C 5장. 제어문 #include <stdio.h> int main(void) { int num; printf(“Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("Is negative.\n"); printf("num = %d\n", num); return 0; }
학습목표 ■ 제어문인 조건문, 반복문, 분기문에 대해 알아본다. ■ 조건문인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다. ■ 반복문인 for, while, do while의 사용 방법과 사용시 주의사항에 대해 알아본다. ■ 분기문인 break, continue, goto, return에 대해 알아본다. 5장. 제어문
목차 5장. 제어문 조건문 반복문 분기문 if switch for while do while break continue goto return 5장. 제어문
제어문 : 특정 문장을 수행하거나 수행하지 않도록 선택하거나, 특정 문장을 여러 번 반복 수행하게 만드는 것 제어문의 종류 조건문 : if, switch 반복문 : for, while, do while 분기문 : break, continue, goto, return 5장. 제어문
조건문 if 기본적인 if 5장. 제어문
if의 사용 예 조건문 if 5장. 제어문 01: /* Ex05_01.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int score; 07: 08: printf("점수를 입력하세요 : "); 09: scanf("%d", &score); 10: 11: if( score < 60 ) 12: printf("%d점은 불합격입니다.\n", score); 13: 14: if( score >= 60 ) 15: printf("%d점은 합격입니다.\n", score); 16: 17: return 0; 18: } If의 사용 If의 사용 5장. 제어문
복합문(compound statement) 조건문 if 복합문(compound statement) if의 조건식이 참일 때 수행할 문장이 여러 개면, 수행할 문장들을 { }로 묶어 주어야 한다. 5장. 제어문
조건문 if if else 5장. 제어문
if else의 사용 예 조건문 if 5장. 제어문 01: /* Ex05_02.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int score; 07: 08: printf("점수를 입력하세요 : "); 09: scanf("%d", &score); 10: 11: if( score < 60 ) 12: printf("%d점은 불합격입니다.\n", score); 13: else 14: printf("%d점은 합격입니다.\n", score); 15: 16: return 0; 17: } If else의 사용 5장. 제어문
조건문 if 다중 if(1/2) if else문에서 else 다음에 다시 if를 사용 5장. 제어문
다중 if(2/2) 조건문 중첩된 if : if 안에 다른 if문을 사용 다중 if : 중첩된 if 중에서 if else if의 형태로 작성할 수 있는 if문 여러 가지 조건을 차례차례 검사할 때 유용 중첩된 if 다중 if 5장. 제어문
다중 if의 사용 예(1/2) 조건문 if 5장. 제어문 01: /* Ex05_03.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int score; 07: char grade; 08: 09: printf("점수를 입력하세요 : "); 10: scanf("%d", &score); 11: 12: if( score >= 90 ) 13: grade = 'A'; 14: else if( score >= 80 ) 15: grade = 'B'; 16: else if( score >= 70 ) 17: grade = 'C'; 18: else if( score >= 60 ) 19: grade = 'D'; 20: else 21: grade = 'F‘; 다중 If 5장. 제어문
다중 if의 사용 예(2/2) 조건문 if 5장. 제어문 22: 23: printf("%c 학점입니다.\n", grade); 24: 25: return 0; 26: } 5장. 제어문
중첩된 if의 사용 예(1/2) 조건문 if 5장. 제어문 01: /* Ex05_04.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int score; 07: char grade; 08: 09: printf("점수를 입력하세요 : "); 10: scanf("%d", &score); 11: 5장. 제어문
중첩된 if의 사용 예(2/2) 조건문 if 5장. 제어문 12: if ( score < 0 || score > 100 ) 13: { 14: printf("잘못 입력하셨습니다.\n"); 15: } 16: else 17: { 18: if ( score >= 90 ) 19: grade = 'A'; 20: else if ( score >= 80 ) 21: grade = 'B'; 22: else if ( score >= 70 ) 23: grade = 'C'; 24: else if ( score >= 60 ) 25: grade = 'D'; 26: else 27: grade = 'F'; 28: 29: printf("%c 학점입니다.\n", grade); 30: } 31: 32: return 0; 33: } 중첩된 if 다중 if 5장. 제어문
조건문 if 중첩된 if와 다중 if 5장. 제어문
기본적인 switch 조건문 먼저 정수식의 값을 평가한다. 값이 같은 case문을 찾아서 해당 case문 다음에 나열된 문장들을 수행한다. break를 만날 때까지 문장들을 수행하고, break를 만나면 switch문을 빠져나간다. 5장. 제어문
switch를 이용한 사칙연산 계산기(1/2) 조건문 switch switch를 이용한 사칙연산 계산기(1/2) 01: /* Ex05_05.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a, b; 07: char op; 08: 09: printf("수식을 입력하세요 : "); 10: scanf("%d %c %d", &a, &op, &b); 11: 두 정수를 입력받을 int형 변수 a, b 선언 연산자를 입력받을 char형 변수 op 선언 5장. 제어문
switch를 이용한 사칙연산 계산기(2/2) 조건문 switch switch를 이용한 사칙연산 계산기(2/2) 12: switch ( op ) 13: { 14: case '+': 15: printf("%d + %d = %d\n", a, b, a + b); 16: break; 17: case '-': 18: printf("%d - %d = %d\n", a, b, a - b); 19: break; 20: case '*': 21: printf("%d * %d = %d\n", a, b, a * b); 22: break; 23: case '/': 24: printf("%d / %d = %d\n", a, b, a / b); 25: break; 26: default: 27: printf("계산할 수 없습니다.\n"); 28: break; 29: } 30: 31: return 0; 32: } switch의 사용 5장. 제어문
조건문 switch switch문의 수행 순서 5장. 제어문
switch 대신 if else if를 사용하는 경우(1/3) 조건문 switch switch 대신 if else if를 사용하는 경우(1/3) 01: /* Ex05_06.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a, b; 07: char op; 08: 09: printf("수식을 입력하세요 : "); 10: scanf("%d %c %d", &a, &op, &b); 11: 두 정수를 입력받을 int형 변수 a, b 선언 연산자를 입력받을 char형 변수 op 선언 5장. 제어문
switch 대신 if else if를 사용하는 경우(2/3) 조건문 switch switch 대신 if else if를 사용하는 경우(2/3) 12: if ( op == '+' ) 13: { 14: printf("%d + %d = %d\n", a, b, a + b); 15: } 16: else if ( op == '-' ) 17: { 18: printf("%d - %d = %d\n", a, b, a - b); 19: } 20: else if ( op == '*' ) 21: { 22: printf("%d * %d = %d\n", a, b, a * b); 23: } 24: else if ( op == '/' ) 25: { 26: printf("%d / %d = %d\n", a, b, a / b); 27: } 28: else 29: { 30: printf("계산할 수 없습니다.\n"); 31: } if else if의 사용 5장. 제어문
switch 대신 if else if를 사용하는 경우(3/3) 조건문 switch switch 대신 if else if를 사용하는 경우(3/3) 32: 33: return 0; 34: } 5장. 제어문
switch와 if else if의 선택(1/2) 조건문 switch switch와 if else if의 선택(1/2) 값을 비교하는 조건식을 사용하고, 비교할 값이 둘 이상이면 switch를 사용하는 것이 더 좋다. 5장. 제어문
switch와 if else if의 선택(2/2) 조건문 switch switch와 if else if의 선택(2/2) 값의 범위를 비교하는 경우에는 if else if를 사용하는 것이 더 좋다. 5장. 제어문
break를 사용하지 않은 경우의 예 조건문 switch 5장. 제어문 11: switch ( op ) 12: { 12: { 13: case '+': 14: printf("%d + %d = %d\n", a, b, a + b); 15: case '-': 16: printf("%d - %d = %d\n", a, b, a - b); 17: case '*': 18: printf("%d * %d = %d\n", a, b, a * b); 19: case '/': 20: printf("%d / %d = %d\n", a, b, a / b); 21: default: 22: printf("계산할 수 없습니다.\n"); 23: } 24: 25: return 0; 26: } Break를 생략한 경우 5장. 제어문
조건문 switch switch 사용 시 주의사항(1/3) switch문에서 break를 생략하면, break를 만날 때까지 모든 문장들을 수행한다. 5장. 제어문
switch 사용 시 주의사항(2/3) 조건문 switch문에서 사용되는 default도 생략할 수 있다. default는 switch문 안에 어떤 위치에도 사용할 수 있다. 5장. 제어문
조건문 switch switch 사용 시 주의사항(3/3) switch의 ( ) 안에는 정수식만 사용할 수 있으며, 실수나 문자열은 사용할 수 없다. 5장. 제어문
반복문 반복문의 종류 반복문 같은 코드를 여러 번 반복할 수 있도록 하는 제어문 코드를 반복해서 수행해야 할 때 코드를 복사해서 작성하는 대신 반복문을 사용 반복문의 종류 for while do while 5장. 제어문
반복문 for 기본적인 for 5장. 제어문
for의 사용 예 반복문 for 5장. 제어문 01: /* Ex05_08.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: for ( i = 1 ; i <= 10 ; i++) 09: printf("%d ", i); 10: 11: printf("\n"); 12: 13: return 0; 14: } for의 사용 5장. 제어문
반복문 for for의 실행 과정 for문에서도 반복해서 수행할 문장이 여러 개일 때는 { }로 묶어준다. 5장. 제어문
for를 이용한 합계와 곱 구하기 반복문 for 5장. 제어문 01: /* Ex05_09.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: int sum = 0; 08: int factorial = 1; 09: 10: for ( i = 1 ; i <= 10 ; i++) 11: { 12: sum += i; 13: factorial *= i; 14: } 15: 16: printf("1~10의 합계 : %d\n", sum); 17: printf("1~10의 곱 : %d\n", factorial); 18: 19: return 0; 20: } 합계를 저장할 int형 변수 sum 선언 곱을 저장할 int형 변수 factorial 선언 for의 사용 5장. 제어문
for의 여러 가지 변형(1/2) 반복문 for 문을 구성하는 초기식, 조건식, 증감식, 반복할 문장은 모두 생략할 수 있다. 5장. 제어문
반복문 for for의 여러 가지 변형(2/2) 무한 루프 널 문장 5장. 제어문
중첩된 for의 사용 반복문 for 5장. 제어문 01: /* Ex05_10.c */ 02: #include <stdio. 03: 04: int main(void) 05: { 06: int i, j; 07: 08: for ( i = 1 ; i < 10 ; i++ ) 09: { 10: for ( j = 1 ; j < 10 ; j++ ) 11: { 12: printf("%d*%d=%2d ", i, j, i*j); 13: } 14: printf("\n"); 15: } 16: 17: return 0; 18: } 중첩된 for의 사용 5장. 제어문
중첩된 for의 수행 순서 반복문 for ( i = 1 ; i < 10 ; i++ ) { for ( j = 1 ; j < 10 ; j++ ) printf("%d*%d=%2d ", i, j, i*j); } printf("\n"); 5장. 제어문
반복문 while 기본적인 while 5장. 제어문
while의 사용 예 반복문 while 5장. 제어문 01: /* Ex05_11.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: i = 1; 09: while ( i <= 10 ) 10: printf("%d ", i++); 11: 12: printf("\n"); 13: 14: return 0; 15: } while의 사용 5장. 제어문
반복문 while for와 while for를 while로 변경할 때는 while문 앞에 초기식을 쓰고 while 블록 안쪽의 맨 끝에 증감식을 써준다. 5장. 제어문
while을 이용한 합계와 곱 구하기 반복문 while 5장. 제어문 01: /* Ex05_12.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: int sum = 0; 08: int factorial = 1; 09: 10: i = 1; 11: while ( i <= 10 ) 12: { 13: sum += i; 14: factorial *= i; 15: i++; 16: } 17: 18: printf("1~10의 합계 : %d\n", sum); 19: printf("1~10의 곱 : %d\n", factorial); 20: 21: return 0; 22: } for의 초기식은 while 앞에서 수행 for의 조건식을 while의 조건식으로 사용 for의 증감식을 while의 맨 끝에서 수행 5장. 제어문
while을 이용한 사칙연산 계산기(1/3) 반복문 while 5장. 제어문 01: /* Ex05_13.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a, b; 07: char op; 08: 09: printf("수식을 입력하세요 (0 0 0 입력 시 종료) : "); 10: scanf("%d %c %d", &a, &op, &b); 11: 5장. 제어문
while을 이용한 사칙연산 계산기(2/3) 반복문 while 5장. 제어문 12: while ( a != 0 || op != '0' || b != 0 ) 13: { 14: switch ( op ) 15: { 16: case '+': 17: printf("%d + %d = %d\n", a, b, a + b); 18: break; 19: case '-': 20: printf("%d - %d = %d\n", a, b, a - b); 21: break; 22: case '*': 23: printf("%d * %d = %d\n", a, b, a * b); 24: break; 25: case '/': 26: printf("%d / %d = %d\n", a, b, a / b); 27: break; 28: default: 29: printf("계산할 수 없습니다.\n"); 30: break; 31: } op에 따라서 더하기, 빼기, 곱하기, 나누기 연산 수행 while문 수행 5장. 제어문
while을 이용한 사칙연산 계산기(3/3) 반복문 while 5장. 제어문 33: printf("수식을 입력하세요 (0 0 0 입력 시 종료) : "); 34: scanf("%d %c %d", &a, &op, &b); 35: } 36: 37: return 0; 38: } 5장. 제어문
무한 루프를 이용한 구구단 프로그램 반복문 while 5장. 제어문 01: /* Ex05_14.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int num; 07: int i; 08: 09: while ( 1 ) 10: { 11: printf("정수를 입력하세요 (Ctrl+C 입력 시 종료) : "); 12: scanf("%d", &num); 13: 14: for ( i = 1 ; i < 10 ; i++) 15: printf("%d*%d=%2d ", num, i, num * i); 16: printf("\n"); 17: } 18: 19: return 0; 20: } 구구단의 단수를 입력받기 위한 int형 변수 num 선언 while을 이용한 무한 루프 5장. 제어문
반복문 do while 기본적인 do while 5장. 제어문
do while의 사용 예 반복문 do while 5장. 제어문 01: /* Ex05_15.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: i = 1; 09: do 10: printf("%d ", i++); 11: while ( i <= 10 ); 12: printf("\n"); 13: 14: return 0; 15: } do while의 사용 5장. 제어문
for, while과 do while의 차이 반복문 5장. 제어문
분기문을 이용하면 실행 순서를 변경할 수 있다. break 분기문 break : 반복문을 탈출한다. continue : 반복문의 시작 부분으로 이동한다. return : 함수를 호출한 곳으로 돌아간다. goto : 레이블이 지정한 위치로 이동한다. break switch문 안에 사용하면 switch를 탈출해서 switch의 다음 문장으로 이동한다. for, while, do while 등의 반복문 안에서 사용하면 반복문을 빠져나가게 된다. 5장. 제어문
break의 사용 예 분기문 break 5장. 제어문 01: /* Ex05_16.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: for ( i = 1 ; i <= 10 ; i++ ) 09: { 10: if ( i % 2 == 0 ) 11: break; 12: printf("%d ", i); 13: } 14: printf("\n"); 15: 16: return 0; 17: } i가 1~10인 동안 수행되는 for 문 break를 만나면 for 루프 탈출 5장. 제어문
break를 이용한 무한 루프 탈출(1/2) 분기문 break 5장. 제어문 01: /* Ex05_17.c */ 02: #include <stdio.h> 03: #include <conio.h> 04: 05: int main(void) 06: { 07: int num, sum; 08: int i; 09: 5장. 제어문
break를 이용한 무한 루프 탈출(2/2) 분기문 break 5장. 제어문 10: while ( 1 ) 11: { 11: { 12: printf("정수를 입력하세요 (-1 입력 시 종료) : "); 13: scanf("%d", &num); 14: 15: if ( num == -1 ) 16: break; 17: 18: sum = 0; 19: for ( i = 1 ; i <= num ; i++) 20: sum += i; 21: printf("%d까지의 합계 : %d\n", num, sum); 22: } 23: 24: return 0; 25: } 무한 루프 num이 -1이면 무한 루프 탈출 5장. 제어문
continue 분기문 반복문 안에서 continue를 만나면 루프의 시작 부분으로 이동해서 조건문 검사부터 다시 계속한다. 5장. 제어문
continue의 사용 예 분기문 continue 5장. 제어문 01: /* Ex05_18.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: for ( i = 1 ; i <= 10 ; i++ ) 09: { 10: if ( i % 2 == 0 ) 11: continue; 12: printf("%d ", i); 13: } 14: printf("\n"); 15: 16: return 0; 17: } continue를 만나면 루프 시작으로 돌아감 5장. 제어문
goto 분기문 프로그램 수행 중 제어의 흐름을 프로그램의 특정 위치로 이동하려면 goto 문을 사용한다. goto문을 사용하려면 먼저 이동할 문장을 가리키는 레이블(label)이 필요하다. 레이블을 정의할 때는 레이블을 구별하기 위한 이름과 콜론(:)이 필요하다. goto문으로 제어의 흐름을 갑자기 아무데로나 이동하게 되면, 프로그램이 이해하기 어려워지므로 꼭 필요한 경우가 아니면 goto문을 사용하지 않는 것이 좋다. 5장. 제어문
goto의 사용 예 분기문 goto 5장. 제어문 01: /* Ex05_19.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: for ( i = 1 ; i <= 10 ; i++ ) 09: { 10: if ( i % 2 == 0 ) 11: goto exit; 12: printf("%d ", i); 13: } 14: exit: 15: printf("\n"); 16: 17: return 0; 18: } goto를 만나면 지정된 위치로 이동 goto의 레이블 5장. 제어문
return 분기문 프로그램 수행 중에 return문을 만나면 함수를 호출한 곳으로 되돌아간다. main 함수 안에서 return문을 만나면 프로그램이 종료된다. 5장. 제어문
return의 사용 예 분기문 return 5장. 제어문 01: /* Ex05_20.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int i; 07: 08: for ( i = 1 ; i <= 10 ; i++ ) 09: { 10: if ( i % 2 == 0 ) 11: return 1; 12: printf("%d ", i); 13: } 14: printf("프로그램을 종료합니다.\n"); 15: 16: return 0; 17: } return을 만나면 함수를 호출한 곳으로 되돌아감 5장. 제어문
조건문 반복문 분기문 학습정리 if : 조건식이 참이면 문장을 수행하고, 조건식이 거짓이면 수행하지 않는다. switch : 정수식에 값에 따라서 다중 분기를 수행한다. 반복문 for : 초기식, 조건식, 증감식으로 구성되며, 조건이 참인 동안 문장을 반복 수행한다. while : 조건식이 참인 동안 문장을 반복 수행한다. do-while : 조건식이 참인 동안 문장을 반복 수행하며, 문장을 한번 수행한 다음에 조건식을 검사한다. 분기문 break : 반복문을 빠져나가게 만든다. continue : 반복문의 시작 부분으로 돌아가게 만든다. return : 함수를 호출한 곳으로 돌아가게 만든다. goto : 레이블이 지정한 위치로 이동하게 만든다. 5장. 제어문
5장. 제어문 수고하셨습니다. 질문 있습니까? NEXT Chapter 6장. 함수