제어문에는 조건문, 반복문, 분기문이 있다.
조건문에는 if 문, switch문
반복문에는 for문, while문, do while문
분기문에는 beak, continue, goto, return
가 있다.
먼저 조건문 중에서 switch문에 대해서 알아보자.
기본적인 switch문을 살펴보자. 먼저 switch(정수식) 에 있는 정수식의 값을 평가한다. 그 후에 값이 같은 case문 다음에 나열된 문장들을 수행한다. break를 만날 때까지 문장들을 수행하고, break를 만나고, switch문을 빠져나간다.

위의 문제는 switch문을 이용한 '사칙연산 계산기' 문제로 대표적인 switch문 문제이다.
swich 문에서 break; 를 생략하면 만날떄까지 계속 실행한다.
이 문제는 수식의 값이 특정 값인 경우를 나타내는 문제이다.

switch 문의 주의사항 !
1. swich 문에서 break; 를 생략하면 만날떄까지 계속 실행한다.
2. default도 생략 가능(어느 위치에서도 사용가능).
3. switch 안에는 정수식만 사용가능, 실수나 문자열은 사용 불가능.
if 문 에 대해서 알아보자.
if문의 조건식이 여러개일 때는 수행할 문장들을 { }로 묶어줘야 한다.

조건문에는 if 문과 switch문 두개가 있다.
그 중 무엇을 선택하는 것이 좋을까? 물어본다면, 값의 범위를 비교 할때는 if-else 문을 이용하는 것이 좋고, 수식의 값이 특정값일 경우라면, switch 문을 이용하는 것이 좋다.
두번째로, 반복문 중에서 for문에 대해서 알아보자.
반복문은 말 그대로 코드를 반복해서 수행해야 할 때 코드를 복사해서 작성하는 대신, 반복문을 사용하는 것이다.
for문의 형식은,
for( 초기식; 조건식; 증감식)
반복할 문장;
if문과 같이 반복할 문장이 여러개라면, { }를 이용해야 한다.

위의 문제는 먼저 합계를 저장할 변수 sum이라는 변수와, 곱할 변수인 factorial이라는 변수를 선언한다.
하지만, 이전 글에서 설명했듯이 scanf로 받을 것이 아니라면, 변수선언할 때, 변수는 초기화되어야한다.
처음에 합계는 0이고, factorial 은 1로 초기화 한다(1에다가 곱하기 시작해야겠지? 상식적으로).
따라서 처음에
int sum = 0;
int factorial = 1;
로 선언한다.
그리고 1~10까지 합계와 곱을 구하기 위해서 for문을 사용한다.
참고로 sum += i ; 는 sum = sum + i ; 이다. 처음에는 sum에 i=1을 더하고, 그 다음 반복문을 돌때는 i=2를 더해주고... 이런식으로 반복문이 돌아가는 것이다.
factorial도 sum과 마찬가지로 똑같이 반복문이 돌아간다.
중첩된 for을 이용한 1단~9단 구구단

수행 순서는 i=1일 때 j=1 ~ j=9 까지 이중중첩문 안에 있는 'printf("%d*%d=%2d ", i, j, i * j);' 을 수행한다. (가로로 쭉 출력)
그리고 i=2 ~ i=9까지 동일한 방식으로 쭉 출력된다.
이제, 반복문 중에서 while문에 대해서 알아보자.
기본적인 형식은
초기식;
while(조건식)
{
반복할 문장;
증감식;
}
이다.

for 문과 달리 while문은 while문 앞에 int i;, 초기식(ex)i=0) 을 써줘야 한다.
또한 while문 안에는 증감식을 써줘야 한다.
위에서 for문으로 풀었던 문제를 while문으로 바꿔보자.

for문에서 while문으로 바꿀 때, while문의 형식에 맞게 for문에 있던 초기식과 증감식을 각각 밖으로 빼주고, 조건식만 while(조건식) 으로 쓰면된다.
while문으로 구구단 단수를 입력하면, 구구단이 출력되는 반복문을 출력해보자.

마지막으로, 반복문 중에서 do while문에 대해서 알아보자.
기본적인 형식은,
do{
반복할 문장 ;
} while(조건식);
이다.

위에서 사용했던 문제를 do while문으로 변형하였다.
for문,while문 v.s do while문
for문 과 while문 은 조건식을 먼저 검사해서 참인 경우에만 문장을 수행하지만, do while문은 일단 먼저 문장을 수행한 다음에 조건식을 검사한다.
마지막으로, 분기문을 순차적으로 알아보자.
분기문을 이용하면 실행순서를 변경할 수 있다.
break문:반복문 탈출
continue문:반복문이 시작부분으로 이동(조건문 검사부터 다시 계속)!! 중요!!
return문: 함수를 호출한 곳으로 돌아감
goto문: 레이블이 지정한 위치로 이동
먼저 break문은 while문에서 반복을 멈추기 위해서 자주 쓰인다.
continue문은 comtinue; 를 만나는 순간 루프(반복문)의 시작부분으로 돌아간다 !

위의 문제에서 만약 i=2라면, i%2==0이므로 continue를 만난다. 따라서 출력하지않고 반복문으로 돌아가고, i=3이 되어서 i%2==0이 아니므로, 출력된다. 따라서 1~10 중에서 홀수들만 출력되는 것이다.
return문은 함수를 호출한 곳으로 돌아간다.
프로그램 수행 중에, return문을 만나면 함수가 호출한곳을 돌아간다.
하지만, main 함수 안에서 return을 만나면 프로그램이 종료된다.

위의 문제에서는 return을 만나면 함수가 호출한 곳인 if(i % 2 == 0)으로 돌아가서, 최종적으로 1이 출력되는 것이다.
goto문은 레이블이 지정한 위치로 이동한다.
여기서 exit; 은 goto의 레이블 이고, goto를 만나면 지정된 위치로 이동한다.

goto문으로 제어의 흐름을 갑자기 아무데로나 이동하게 되면, 프로그램이 이해하기 어려워지므로, 꼭 필요한 경우가 아니면 goto문을 사용하지 않는 것이 좋다.
'대학교_1학년 > C프로그래밍 및 실습' 카테고리의 다른 글
C프로그래밍 및 실습 - 중간고사 리뷰2 (0) | 2024.11.14 |
---|---|
C프로그래밍 및 실습 - 중간고사 리뷰1 (3) | 2024.11.09 |
C프로그래밍 및 실습 - 배열/문자열 (0) | 2024.11.08 |
C프로그래밍 및 실습(1) (1) | 2024.10.29 |