05
25

1) if문

가장 기본적인 if문의 문법은

if(조건식)
	구문;
    
//또는

if(조건식) 구문;

if문은 괄호 안에 조건식을 지정하고 그것의 평가 결과가 참이면 괄호가 끝난 다음의 코드를 실행하고, 거짓이면 괄호 다음의 코드를 실행하지 않는다. if문은 조건식의 결과가 참인 경우뿐 아니라 거짓인 경우에도 실행할 수 있는 구문을 else 예약어를 추가해 지정할 수 있다. 조건이 여러 개인 경우 if / else if / else로 표현하는 것도 가능하다. 또한 if문 내에 if문을 중복으로 사용하여 많은 조건을 제어할 수 있다.

 

ex)

if(true)
{
	Console.WriteLine("참입니다.");
}

if (false)
{
	Console.WriteLine("거짓입니다.");
}

 

예제 실행 화면

조건식에 false(거짓)이므로 실행되지 않는다.

int i_Num;
Console.WriteLine("정수를 입력하세요");
i_Num = int.Parse(Console.ReadLine());

if(100 < i_Num)
{
	Console.WriteLine("입력하신 정수는 100보다 큽니다.");
}

 

예제 실행 화면

int i_Num;
Console.WriteLine("정수를 입력하세요");
i_Num = int.Parse(Console.ReadLine());

if(i_Num % 10 == 0)
{
	if (i_Num % 3 == 0)
	{
		Console.WriteLine("입력하신 정수는 10의 배수이면서 3의 배수입니다.");
	}
}

//또는

if ((i_Num % 10 == 0 )&&(i_Num % 3 == 0))
{
	Console.WriteLine("입력하신 정수는 10의 배수이면서 3의 배수입니다.");
}

 

예제 실행 화면

ex) 홀수, 짝수 판별

int i_Num;
Console.WriteLine("정수를 입력하세요");
i_Num = int.Parse(Console.ReadLine());

if(i_Num % 2 == 0)
{
	Console.WriteLine("해당 정수는 짝수입니다.");
}
else
{
	Console.WriteLine("해당 정수는 홀수입니다.");
}

 

예제 실행 화면

ex) 학점 구하기

int i_score;
Console.Write("점수를 입력하세요 : ");
// i_score에 점수 입력 받는 코드를 아래에 작성
i_score = int.Parse(Console.ReadLine());

Console.Write("당신의 학점은 ");
if (i_score >= 90)
{
	Console.Write("A");
}
else if(i_score >= 80)
{
	Console.Write("B");
}
else if(i_score >= 70)
{
	Console.Write("C");
}
else if(i_score >= 60)
{
	Console.Write("D");
}
else
{
	Console.Write("F");
}
Console.WriteLine("입니다.");

 

예제 실행 화면

ex) 윤년

int i_year;

Console.Write("연도를 입력해주세요 : ");
i_year = int.Parse(Console.ReadLine());

if((i_year%4 == 0 && i_year%100 != 0 ) || i_year % 400 == 0)
{
	Console.WriteLine("{0}는 윤년입니다.", i_year);
}
else
{
	Console.WriteLine("{0}는 윤년이 아닙니다.", i_year);
}
Console.WriteLine("년도를 입력하세요");
int iYear = int.Parse(Console.ReadLine());

//400으로 나누어 떨어지는 해 : 윤년
if (iYear%400 == 0)
{
	Console.WriteLine("{0}은 윤년입니다.", iYear);
}
//400으로 나누어 떨어지는 않는 해 : 평년과 윤년이 섞여 있음
else
{
	//4로 나누어 떨어지는 해는 윤년 후보(평년과 윤년이 섞여 있음)
	if (iYear % 4 == 0)
	{
	 	//100으로 나누어 떨어지지 않는 해는 윤년
		if (iYear % 100 != 0)
		{
			Console.WriteLine("{0}은 윤년입니다.", iYear);
		}
		//100으로 나누어 떨어지는 해는 평년
		else
		{
			Console.WriteLine("{0}은 평년입니다.", iYear);
		}
	}
	//4로 나누어 떨어지지 않는 해 : 평년
	else
	{
		Console.WriteLine("{0}은 평년입니다.", iYear);
	}
}

 

예제 실행 화면

 

cf. 의사 코드(슈도 코드, pseudocode)

프로그램을 작성할 때 각 모듈이 작동하는 논리를 표현하기 위한 언어. 프로그래밍 언어의 문법에 따라 쓰인 것이 아니라, 일반적인 언어로 코드를 흉내 내어 알고리즘을 써놓은 코드를 말한다.

 

2) 연산자

2.1) 수식 연산자

분류 기능 예제
+ 양쪽 피연산자를 서로 더함 a+b
- 왼쪽 피연산자에서 오른쪽 피연산자를 뺌 a-b
* 양쪽 피연산자를 서로 곱함 a*b
/ 왼쪽 피연산자를 오른쪽 피연산자로 나눔 a/b
% 왼쪽 피연산자를 오른쪽 피연산자로 나눈 뒤의 나머지를 구함 a%b

 

2.2) 논리 연산자(logical operator)

좌측 피연산자 우측 피연산자 AND 연산 결과 예제
true true true  bool result = true && true;
true false false  bool result = true && false;
false true false  bool result = false && true;
false false false  bool result = false && false;
좌측 피연산자 우측 피연산자 OR 연산 결과 예제
true true true  bool result = true || true;
true false true  bool result = true || false;
false true true  bool result = false || true;
false false false  bool result = false || false;
좌측 피연산자 우측 피연산자 XOR 연산 결과 예제
true true false  bool result = true ^ true;
true false true  bool result = true ^ false;
false true true  bool result = false ^ true;
false false false  bool result = false ^ fasle;
우측 피연산자 NOT 연산 결과 예제
true false  bool result = !true;
false true  bool result = !false;

 

2.3) 증감 연산자

증감연산자 평가 방식 예제
++ 피연산자의 값을 1 증가시킨다.  int n = 50;
 n++; // 결괏값 51
-- 피연산자의 값을 1 감소시킨다.  int n = 50;
 n--; // 결괏값 49

증감 연산자(++, --)는 피연산자의 앞에 오느냐 뒤에 오느냐에 따라 동작이 바뀌며 이를 전위(prefix)/후위(postfix) 표기법이라고 한다. 

  • 후위 표기법 : 피연산자 값이 평가된 후 값을 증가/감소
  • 전위 표기법 : 피연산자 값을 증가/감소시킨 후에 식을 평가

ex)

int i_num = 100;
Console.WriteLine(i_num); // 100
++i_num;
Console.WriteLine(i_num); // 101
i_num = i_num + 1;
Console.WriteLine(i_num); // 102
int i_num2;
i_num2 = ++i_num; // i_num = i_num + 1; i_num2 = i_num;
Console.WriteLine("i_num, i_num2 = {0},{1}", i_num, i_num2);
int i_num3;
i_num3 = i_num++; // i_num2 = i_num; i_num = i_num + 1;
Console.WriteLine("i_num, i_num3 = {0},{1}", i_num, i_num3);

 

예제 실행 화면

 

2.4) 조건 연산자(삼항 연산자, ternary operator)

(조건식)?표현식1:표현식2;

조건 연산자는 피연산자가 3개이다. 첫 번째 피연산자는 조건식을 나타내고, 두 번째 피연산자는 조건식이 참인 경우에 반환되는 값을, 세 번째 피연산자는 조건식이 거짓인 경우 반환되는 값을 나타낸다.

 

ex)

int i_num1, i_num2, i_max;
Console.Write("정수를 입력하세요 : ");
i_num1 = int.Parse(Console.ReadLine());
Console.Write("정수를 입력하세요 : ");
i_num2 = int.Parse(Console.ReadLine());
if (i_num1 > i_num2)
{
	i_max = i_num1;
}
else
{
	i_max = i_num2;            
}
Console.WriteLine("큰 값은 {0}입니다.", i_max);

int i_max2;
i_max2 = (i_num1 > i_num2) ? i_num1 : i_num2;
Console.WriteLine("큰 값은 {0}입니다.", i_max2);

 

예제 실행 화면

 

2.5) 비트 연산자

분류 기능 예제
& 두 피연산자의 대응되는 비트에 논리곱(AND)을 수행 a & b = 0100 1000
| 두 피연산자의 대응되는 비트에 논리합(OR)을 수행 a | b = 1101 1110
^ 두 피연산자의 대응되는 비트에 배타적 논리합(XOR)을 수행 a ^ b = 1001 0110
~ 피연산자의 비트에 NOT을 수행 ~a = 1010 0011
<< 피연산자의 비트를 왼쪽으로 1비트 이동 a<<3 = 1110 0000
>> 피연산자의 비트를 오른쪽으로 1비트 이동 a>>3 = 0000 1011

a = 0101 1100, b = 1100 1010

ex)

byte b_num = 100;
Console.WriteLine(b_num);
b_num = (byte)(b_num << 2);
Console.WriteLine(b_num);
            
b_num = 1;
Console.WriteLine(b_num);
b_num = (byte)(b_num << 1);
Console.WriteLine(b_num);
b_num = (byte)(b_num << 1);
Console.WriteLine(b_num);
b_num = (byte)(b_num << 1);
Console.WriteLine(b_num);
b_num = (byte)(b_num << 1);
Console.WriteLine(b_num);
            
byte bNum_1 = 0xAD; // 0x : 16진수
byte bNum_2 = 0x69;
byte bNum_3 = (byte)(bNum_1 & bNum_2);

Console.WriteLine(bNum_3);

 

예제 실행 화면

 

2.6) 문자열 결합 연산자

string을 합치는 경우 문자열 결합 연산자(+)를 이용하여 여러 개의 문자열을 하나의 문자열로 합칠 수 있다.

 

ex)

string str_1 = "hello";
string str_2 = "world";
Console.WriteLine(str_1 + " " + str_2);

 

예제 실행 화면

cf. 연산자와 피연산자

  • 연산 : 프로그램에서 데이터를 처리하여 결과를 산출
  • 연산자 : 연산을 수행하기 위해 사용되는 문자, 계산할 때 사용되는 기호
  • 피연산자 : 연산에 참여하는 변수나 상수
  • 단항 연산자 : 피연산자가 한 개가 대상 ex) 부호 연산자, 증감 연산자
  • 이항 연산자 : 피연산자가 두 개가 대상 ex) 대입 연산자
  • 삼항 연산자 : 피연산자가 세 개가 대상 ex) 조건 연산자

cf. 중단점과 디버그 기능

  • 중단점(F9) : 브레이크 포인트(Break Point)라고도 불리며 소스 코드의 특정 지점에서 프로그램의 실행을 멈추는 데 사용
  • 프로시저 단위 실행(F10)
  • 한 단계씩 코드 실행(F11)

 

3) switch 문

여러 개의 조건을 판단해서 실행할 때 if / else if / else if / ··· / else 구문을 쓸 수도 있지만 조건 판단의 기준이 되는 식이 상수라면 switch 구문을 쓰는 것이 편리할 수 있다. 모든 switch문은 다중 if문으로 변환할 수 있지만 반대로 특정한 경우의 다중 if문만이 switch 문으로 변환될 수 있다.

switch(인스턴스)
{
	case 상수식1:
		구문;
		break;
	case 상수식2:
		구문;
		break;
	default:
		구문;
		break;
}

조건이 많아지면 switch 문을 쓰는 편이 직관적인 코드 해석에 도움이 된다. C#에서는 case 문에 break를 포함하는 것이 강제 사항이라서 break가 없으면 컴파일할 때 오류가 발생한다.

 

ex)

int i_num;
Console.Write("1~3까지의 숫자를 입력하세요 : ");
i_num = int.Parse(Console.ReadLine());
switch (i_num)
{
	case 1:
		Console.WriteLine("첫째");
		break;
	case 2:
		Console.WriteLine("둘째");
		break;
	case 3:
		Console.WriteLine("셋째");
		break;
	default:
		Console.WriteLine("해당되는 숫자가 아닙니다.");
		break;
}

int i_score;
Console.Write("점수를 입력해주세요 : ");
i_score = int.Parse(Console.ReadLine());
i_score = i_score / 10;
switch (i_score)
{
	case 10:
	case 9:
		Console.WriteLine("A");
		break;
	case 8:
		Console.WriteLine("B");
		break;
	case 7:
		Console.WriteLine("C");
		break;
	case 6:
		Console.WriteLine("D");
		break;
	default:
		Console.WriteLine("F");
		break;
}

 

예제 실행 화면

 

COMMENT