[C#] 자습서 4장 - 제어문
조건문
조건문은 조건의 진위 여부에 따라 명령의 실행 여부를 결정하는 문장이다. 조건이 참일 때만 뒤쪽의 명령을 수행하며 거짓이면 명령을 무시한다. else문은 조건이 거짓일 때 실행할 명령을 지정하며 생략도 가능하다.
if(조건) 명령1; else 명령2;
internal class Program
{
private static void Main(string[] args)
{
int i = 3;
if (i == 3)
Console.WriteLine("i는 3이다.");
else
Console.WriteLine("i는 3이 아니다.");
}
}
간단한 예시이다. i 변수에 3이 저장되어 있으므로 결과는 "i는 3이다." 가 출력된다. 명령문이 한 줄이면 바로 밑에 써도 되지만 2줄이상이 된다면 {} 안에 써야한다.
반복문
반복문은 비슷한 명령을 여러 번 반복하는 문장이다. 반복적으로 실행되는 코드 묶음을 루프(loop)라고 한다. C#은 4가지 반복문 (for, while, do while, foreach)을 제공하는데 for문이 가장 흔하게 사용된다.
for
for(초기식;조건식;증감식) {명령}
초기식은 반복을 시작하기 전에 딱 한 번 실행되어 제어 변수를 초기화한다. 조건식은 언제까지 실행할 지 지정하며 이 식이 참인 동안 루프의 명령을 반복 실행한다. 보통 제어 변수의 값을 대소 비교하는 연산문이 온다. 증감식은 명렬을 한 번 실행할 때마다 제어 변수의 값을 변경한다. 이렇게 초기식을 실행한 후 조건이 참인 동안 명령과 증감식을 계속 반복한다. for 문은 반복 횟수가 미리 정해진 경우에 주로 사용한다.
internal class Program
{
private static void Main(string[] args)
{
int sum = 0;
for (int i = 0; i <= 100; i++)
{
sum = sum + i;
}
Console.WriteLine("1~100까지의 합계 = " + sum);
}
}
초기식에 int i = 0으로 초기화를 하고 i 가 100 이하가 될 때까지 1씩 증가시키며 밑의 명령문인 sum = sum + i 를 101번 실행한다.
while
while(조건식){명령;}
while은 반복 횟수가 가변적인 경우에 적합하다. 조건식이 참인 동안 반복적으로 실행한다. for문과는 형태가 조금 다를 뿐 서로 대체 가능하다.
internal class Program
{
private static void Main(string[] args)
{
int i = 1;
int sum = 0;
while (sum < 1000)
{
sum = sum + i;
i++;
}
Console.WriteLine("1000 초과 수 = " + i);
}
}
do while
do{명령} while(조건식);
do while문은 while문과 거의 똑같지만 조건보다 명령이 먼저 온다는 점이 다르다. do 로 명령을 일단 실행하고 조건을 점검한다. 조건보다 명령이 우선이기 때문에 최소한 한 번은 실행하게 된다.
internal class Program
{
private static void Main(string[] args)
{
string snum;
int num;
do
{
Console.Write("숫자를 입력하세요(끝낼 때는 0) : ");
snum = Console.ReadLine();
num = Int32.Parse(snum);
Console.WriteLine($"입력한 값은 {num}입니다.");
} while (num != 0);
}
}
foreach
foreach(타입 변수 in 배열){명령}
foreach 반복문은 집합의 요소를 반복 처리할 때 사용한다. 배열의 모든 요소를 순회하는 예가 가장 전형적이다.
internal class Program
{
private static void Main(string[] args)
{
int[,] ar =
{
{1, 2, 3 },
{4, 5, 6 }
};
foreach (int a in ar)
{
Console.Write(a + "");
}
//같은 의미의 for 문
Console.WriteLine("\n-----------");
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
Console.Write(ar[i, j] + "");
}
}
2차원 배열의 모든 요소를 순회하며 요소를 출력하는 foreach 문이다. 실행 결과로는 "1 2 3 4 5 6" 이 나오게 된다. for 문으로 같은 문장을 만들어내면 코드가 더 길어지는 것을 확인할 수 있다. 하지만 필자는 foreach 문을 거의 사용해 본 적이 없다. (for문으로도 다 가능하기 때문에..!)
선택문
switch
switch(제어 변수){
case 값 1: 처리 1; break;
case 값 2: 처리 2; break;
default: 디폴트 처리; break;
}
switch 문은 제어 변수의 값과 일치하는 case의 명령을 찾아 실행하는 다중 선택문이다. if else를 여러 번 중첩해서 똑같은 코드를 작성할 수 있지만 값이 많을 때는 switch 문이 깔끔해서 가독성이 높고 유지보수도 쉽다.
default는 일치하는 case가 없을 때를 의미하는데 필요 없으면 생략한다. case의 값은 중복되지 말아야 하며 상수만 쓸 수 있고 변수나 범위를 지정할 수는 없다.
internal class Program
{
private static void Main(string[] args)
{
Console.Write("점수를 입력하세요 >> ");
int score = Int32.Parse(Console.ReadLine());
switch (score/10)
{
case 10:
Console.WriteLine("A");
break;
case 9:
Console.WriteLine("B");
break;
case 8:
Console.WriteLine("C");
break;
default:
Console.WriteLine("D");
break;
}
}
}
위 예제는 점수에 따라 등급을 출력하는 예제이다. 점수를 10으로 나누고 나온 점수에 따라 A~D등급을 매기는데 100점은 A, 90점 대는 B, 80점 대는 C, 그 이하는 D 등급을 출력한다.