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