쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
일상 생활에서의 조건문의 예 만약 비가 오지 않으면 테니스를 친다. 만약 결석이 1/3이상이면 F학점을 받는다. 만약 시간이 없는 경우에는 택시를 탄다. 만약 날씨가 좋고 공휴일이면 공원에 산책을 간다. 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다. 조건문은 프로그램의 흐름을 변경합니다. Slide 2 (of 28)
if문 조건에 따라서 결정을 내리는 경우에 사용 if( 조건식 ) 문장; 조건식이 참으로 계산되면 문장이 실행된다. 문장; 문장이 실행된다. Slide 3 (of 28)
if문 Slide 4 (of 28)
If문의 예 if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf("합격입니다.\n"); if( height >= 130 && age >= 10 ) printf("놀이기구를 탈 수 있습니다.\n"); bonus에 200을 대입한다. if 문이 끝나면 if 문 다음 문장이 실행된다. if ( temperature < 0 ) printf("현재 영하입니다.\n"); // 조건이 참일 때만 실행 printf("현재 온도는 %도 입니다.\n", temperature); // 항상 실행 Slide 5 (of 28)
복합문 복합문(compound statement) 중괄호를 사용하여 문장들을 그룹핑하는 것, 블록(block)이라고도 한다. 단일문 대신 들어 갈 수 있다. if( score >= 60 ) { printf("합격입니다.\n"); printf("장학금도 받을 수 있습니다.\n"); } 조건식이 참이면 2개의 문장이 묶여서 실행된다. Slide 6 (of 28)
if-else 문 if( 조건식 ) 문장1; else 문장2; 날씨가 좋은가? 테니스를 친다. 공부를 한다. 거짓 참 문장1; else 문장2; 조건식이 참이면 실행된다. 조건식이 거짓이면 실행된다. Slide 7 (of 28)
if-else 문 if ( score >= 60 ) printf("합격입니다.\n"); else { printf("합격입니다.\n"); printf("장학금도 받을 수 있습니다.\n"); } else printf("불합격입니다.\n"); printf("공부하세요.\n"); score가 60이상이면 실행 score가 60미만이면 실행 Slide 8 (of 28)
예제 #3 // 윤년 판단 프로그램 #include <stdio.h> int main(void) { int year; printf("연도를 입력하시오: "); scanf("%d", &year); if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) printf("%d년은 윤년입니다.\n", year); else printf("%d년은 윤년이 아닙니다.\n", year); return 0; } 연도를 입력하시오: 2005 2005년은 윤년이 아닙니다. Slide 9 (of 28)
중첩 if if 문에 다시 if 문이 포함 if( 조건식1 ) if( 조건식2 ) 문장; Slide 10 (of 28)
If 문안의 문장자리에 if-else 문이 들어간 경우 if( score > 80 ) if( score > 90 ) printf("당신의 학점은 A입니다.\n"); If 문안의 문장자리에 if문이 들어간 경우 if( score > 80 ) if( score > 90 ) printf("당신의 학점은 A입니다.\n"); else printf("당신의 학점은 B입니다.\n"); If 문안의 문장자리에 if-else 문이 들어간 경우 Slide 11 (of 28)
만약 다른 if절과 else 절을 매치시키려면 중괄호를 사용하여 블록으로 묶는다. else 절은 가장 가까운 if절과 매치된다. if(score > 80) if( score > 90) printf(“당신의 학점은 A입니다\n”); else printf(“당신의 학점은 B입니다\n”) O X if( score > 80 ) { if( score > 90 ) printf("당신의 학점은 A입니다.\n"); } else printf("당신의 학점은 A나 B가 아닙니다.\n"); 만약 다른 if절과 else 절을 매치시키려면 중괄호를 사용하여 블록으로 묶는다. Slide 12 (of 28)
If-else 절 안에 다른 if-else절이 포함될 수 있다. if( score > 80 ) { if( score > 90 ) printf("당신의 학점은 A입니다.\n"); else printf("당신의 학점은 B입니다.\n"); } else { if( score > 70 ) printf("당신의 학점은 C입니다.\n"); printf("당신의 학점은 D 또는 F입니다.\n"); If-else 절 안에 다른 if-else절이 포함될 수 있다. Slide 13 (of 28)
연속적인 if if( 조건식1 ) 문장1; else if( 조건식2 ) 문장2; else if( 조건식3 ) 문장3; else 문장1; else if( 조건식2 ) 문장2; else if( 조건식3 ) 문장3; else 문장4; Slide 14 (of 28)
score >= 80 && score < 90 연속적인 if 성적을 입력받아서 연속적인 if를 사용하여 학점을 매기는 코드 if (score >= 90) printf("합격: 학점 A\n"); else if (score >= 80) printf("합격: 학점 B\n"); else if (score >= 70) printf("합격: 학점 C\n"); else if (score >= 60) printf("합격: 학점 D\n"); else printf("불합격: 학점 F\n"); score >= 80 && score < 90 와 같이 쓸 필요는 없음 Slide 15 (of 28)
문자 분류 예제 // 문자들을 분류하는 프로그램 #include <stdio.h> int main(void) { char ch; printf("문자를 입력하시오: "); scanf("%c", &ch); if( ch >= 'A' && ch <= 'Z' ) printf("%c는 대문자입니다.\n", ch); else if( ch >= 'a' && ch <= 'z' ) printf("%c는 소문자입니다.\n", ch); else if( ch >= '0' && ch <= '9' ) printf("%c는 숫자입니다.\n", ch); else printf("%c는 기타문자입니다.\n", ch); return 0; } 문자를 입력하시오: c c는 소문자입니다. Slide 16 (of 28)
switch 문 여러가지 경우 중에서 하나를 선택하는데 사용 switch(조건식) { case c1: 문장1; break; 문장1; break; case c2: 문장2; ... case cn: 문장n; default: 문장d; } Slide 17 (of 28)
switch 문의 실행 순서 break는 문장의 실행을 끝내고 switch 문을 탈출하는데 사용합니다. Slide 18 (of 28)
예제 int main(void) { int number; printf("정수를 입력하시오:"); scanf("%d", &number); switch(number) { case 0: printf("없음\n"); break ; case 1: printf("하나\n"); case 2: printf("둘\n"); default: printf("많음\n"); break; } } 정수를 입력하시오: 1 하나 Slide 19 (of 28)
break가 생략되는 경우 break를 만날 때까지 계속 문장을 실행합니다. Slide 20 (of 28)
의도적인 break생략 2개의 경우를 하나로 묶어서 처리하기 위하여 이러한 기법을 사용 switch(number) { case 0: printf("없음\n"); break; case 1: printf("하나\n"); case 2: case 3: printf("두서너개\n"); default: printf("많음\n"); } 2개의 경우를 하나로 묶어서 처리하기 위하여 이러한 기법을 사용 Slide 21 (of 28)
default 문 어떤 case문과도 일치되지 않는 경우에 선택 Slide 22 (of 28)
switch 문과 if-else 문 int main(void) { int number; scanf("%d", &number); if( number == 0 ) printf("없음\n"); else if( number == 1 ) printf("하나\n"); else if( number == 2 ) printf("둘\n"); else printf("많음\n"); } switch(number) { case 0: printf("없음\n"); break; case 1: printf("하나\n"); case 2: printf(“둘\n"); default: printf("많음\n"); } Slide 23 (of 28)
예제 // 달의 일수를 계산하는 프로그램 #include <stdio.h> int main(void) { int month, days; printf("일수를 알고 싶은 달을 입력하시오: "); scanf("%d", &month); switch(month) { case 2: days = 28; break; case 4: case 6: case 9: case 11: days = 30; default: days = 31; } printf("%d월의 일수는 %d입니다.\n", month, days); return 0; } 일수를 알고 싶은 달을 입력하시오: 12 12월의 일수는 31입니다. Slide 24 (of 28)
예제 #include <stdio.h> int main(void) { char op; int x, y; printf("수식을 입력하시오: "); scanf("%d %c %d", &x, &op, &y); switch(op) { case '+': printf("%d %c %d = %d \n", x, op, y, x + y); break; case '-': printf("%d %c %d = %d \n", x, op, y, x - y); break ; case '*': printf("%d %c %d = %d \n", x, op, y, x * y); case '/': printf("%d %c %d = %d \n", x, op, y, x / y); case '%': printf("%d %c %d = %d \n", x, op, y, x % y); default: printf("지원되지 않는 연산자입니다. \n"); } return 0; } 수식을 입력하시오: 10 % 3 10 % 3 = 1 Slide 25 (of 28)
Goto문 조건없이 어떤 위치로 점프 사용하지 않는 것이 좋음 Slide 26 (of 28)
예제 // 구구단출력프로그램 #include <stdio.h> int main(void) { int i = 1; loop: printf("%d * %d = %d \n", 3, i, 3 * i); i++; if( i == 10 ) goto end; goto loop; end: return 0; } 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 Slide 27 (of 28)
Q & A Slide 28 (of 28)