1 / 48

4 장 제어문

4 장 제어문. 선택문 : if 문 , if – else 문 , switch 문 반복문 : while 문 , for 문 , do – while 문 연산자 : 관계 연산자와 논리 연산자 , 증감연산자 , 복합치환연산자 , 컴마연산자 분기문 : break, continue, goto. 문장과 실행 순서. 문장( statement) 단문( simple statement) 수식 ; (예) a = b + c; printf("Hello");

oma
Download Presentation

4 장 제어문

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4장 제어문 선택문: if 문, if – else 문, switch 문 반복문: while 문, for 문, do – while 문 연산자: 관계 연산자와 논리 연산자, 증감연산자,복합치환연산자, 컴마연산자 분기문: break, continue, goto

  2. 문장과 실행 순서 • 문장(statement) • 단문(simple statement) 수식 ; (예) a = b + c; printf("Hello"); • 제어문(control statement): 프로그램의 실행 순서를 제어함 • 선택문: if, if – else, switch • 반복문: for, while, do – while • 분기문: goto, break, continue • 복합문(compound statement) { … 여러 개의 문장들로 이루어진 복합문은 문장; 문법적으로는 한 문장으로 취급. … 문장; } • 문장의 실행 순서 • 기본적으로 순차적으로 수행 • 제어문을 사용하면 선택 실행 또는 반복 실행 가능 C 언어 프로그래밍

  3. if 문 • if 문 if (조건식) … 조건식이 참일 때만 문장 문장 실행 if (score < 60) printf("You have failed.\n"); • (예 4.1) 두 변수 중 큰 값 구하기 max = a; … a를 최대값 max라고 가정 if ( b > a ) … b가 a보다 크면 max = b; … b가 max가 된다. C 언어 프로그래밍

  4. 2 a b 1 3 tmp if 문 (2) • 복합문을 사용한 if 문 if (조건식) { … 조건식이 참일 때에 수행하는 문장이 문장 여러 개 이면 복합문 사용 문장 … } • 예: 두 변수 a, b를 비교하여 큰 값을 a에 작은 값을 b에 넣기 if (a < b) { … a가 b보다 작으면 tmp = a; a와 b를 서로 교환함 a = b; b = tmp; } C 언어 프로그래밍

  5. 관계 연산자 • 조건식과 연산자 • 조건식은 대개 값들의 비교로 이루어짐 • 값의 비교에 관계 연산자와 논리 연산자가 주로 사용됨 • 관계 연산자 • 동등 연산자: ==, != C 언어 프로그래밍

  6. C언어에서의 참, 거짓 • C언어에서의 참, 거짓 • nonzero 수식  참 (True) • zero 수식  거짓 (False) • 관계 연산 수식의 값 • 참이면 1 • 거짓이면 0 printf("%d %d \n", 100 > 50, 100 < 50); … [출력] 1 0 • 조건식으로 임의의 수식을 사용할 수 있음 1. if ( a ) … a가 0이 아니면(참 이면) printf("non zero\n"); 출력 2. if (a = 5) … 수식 a=5의 값은 5이므로 항상 참 printf("a is five\n"); (잘못된 예: =는 ==으로 고쳐야 함) C 언어 프로그래밍

  7. 논리 연산자 • 논리 연산자 • 연산자 우선 순위 1. 괄호 2. 단항연산자 3. 곱셈, 나눗셈 4. 덧셈, 뺄셈 5. 관계연산자 > >= < <= 6. 동등연산자 == != 7. 논리곱 && 8. 논리합 | | 9. 치환연산자 C 언어 프로그래밍

  8. 예제 • 예제 • a가 0이상, 100미만이다. a>=0 && a<100 • a가 0미만이거나 100이상이다. a<0 || a>=100 • x, y, z 중에서 x가 가장 작은 수이다. x <= y && x <= z • a와 b의 합이 c와 d의 차보다 작다. a + b < c – d if (a >= 0 && a < 100) printf("a is between 0 and 100\n"); • (예 4.5) 문자 c가 영문자가 아니면 에러메시지 출력 if ( ! ( c >= 'A' && c <= 'Z' | | c >= 'a' && c <= 'z' ) ) printf("c is not alphabet\n"); 또는 if ( ! ( c >= 'A' && c <= 'Z' ) && ! (c >= 'a' && c <= 'z' ) ) printf("c is not alphabet\n"); 드모르간 법칙 !(p && q)  !p || !q !(p || q)  !p && !q C 언어 프로그래밍

  9. 논리연산자의 단축 평가 * • 논리 연산의 단축평가 • 나머지 수식의 결과에 관계없이 연산 결과를 알 수 있을 때에나머지 수식의 평가를 하지 않는다. 수식1 && 수식2  수식1 이 거짓이면 연산결과가 거짓 (수식2를 평가하지 않음) 수식1 | | 수식2  수식1이 참이면 연산결과가 참 (수식2를 평가하지 않음) if ( a != 0 && b / a > 10 ) … a가 0이 아닐 때에만 계산함 C 언어 프로그래밍

  10. if – else 문 • if – else 문 if (조건식) 문장1 … 참일 때 수행 else 문장2 … 거짓일 때 수행 • (예 4.9) y를 x로 나눈 몫을 출력 if (x == 0) printf("0으로 나눌 수 없습니다.\n"); else printf("몫 = %d\n", y / x ); C 언어 프로그래밍

  11. 조건 연산자 • 조건 연산자: ? : 조건식 ? 수식1 : 수식2 • 3항 연산자: 피연산자가 3개 • 조건식: 참  수식값 = 수식1 조건식: 거짓  수식값 = 수식2 • 예: 두 수의 a, b의 최대값을 max에 저장 1. max = (a > b) ? a : b; 2. (a>b) ? (max=a) : (max=b); … 뒤의 두 괄호는 반드시 필요함 3. if ( a > b ) max = a; else max = b; C 언어 프로그래밍

  12. 예제 • (연습 4.4-1) 연도를 입력 받아서 평년과 윤년을 판단하는 프로그램 윤년: (1) 4로 나누어지고 100으로 나누어지지 않는 연도 (2) 400으로 나누어지는 연도 • flag 변수 사용: 이 프로그램은 조건식의 결과를 변수 isleap에 저장하고 if문의 조건식에 저장된변수값을 사용함 C 언어 프로그래밍

  13. 중첩된 if문 • 중첩된 if 문 • if와 else의 목표문으로 if 또는 if – else 문을 사용한 것 • (예 4.11) 변수 a, b의 부호에 따라서 다음 표와 같이 출력 C 언어 프로그래밍

  14. 중첩된 if문 – 다단계 if문 • 다단계 if문 if (조건식1) 문장1 else if (조건식2) 문장2 … else if (조건식n) 문장n else 문장n+1 C 언어 프로그래밍

  15. 예제 • (예 4.12) 점수에 따른 등급 부여 A: 90점이상, B: 80점대, C: 70점대, D: 60점대, F: 60점미만 int score; /* 점수 */ char grade; /* 등급 */ ... if (score >= 90) grade = 'A'; else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = 'D'; else grade = 'F'; • 위에서 80점대를 다음과 같이 작성하지 않도록 주의 else if (score >= 80 && score < 90) grade = 'B' score < 90 의미가 포함됨 C 언어 프로그래밍

  16. switch 문 • switch문 switch (정수식) { case 값1 : 문장1; … break; case 값2 : 문장2; … break; … case 값n : 문장n; … break: switch문 종료 break; break가 없으면 다음 문장 실행 default : 문장n+1; … } • 정수식 값에 해당하는 case의 문장부터 실행 • 해당하는 case가 없으면 default의 문장부터 실행 정수식? =값1 =값2 =값n 기타 문장들1 문장들2 문장들n 문장들n+1 label C 언어 프로그래밍

  17. 예제 • (예 4.14) 점수에 따른 등급 부여 switch ( score / 10 ) … 성적의 10자리를 얻는다. { case 10: … break가 없으므로 다음 문장을 실행 case 9: grade = 'A'; break; case 8: grade = 'B'; break; case 7: grade = 'C'; break; case 6: grade = 'D'; break; default: grade = 'F'; } C 언어 프로그래밍

  18. 예제 • (예 4.43) 다음과 같이 소득에 따른 세금 계산 소득 (만원) 기본 세금 초과분에 대한 세율(%) 0 ~ 100 0.00 10 100 ~ 200 10.00 14 200 ~ 400 24.00 20 400 ~ 64.00 30 • 세금 계산식 소득(income)세금(tax) 0 ~ 100 tax = income * 0.1 100 ~ 200 tax = 100*0.1 + (income-100)*0.14 200 ~ 400 tax = 100*0.1 + 100*0.14 + (income-200)*0.2 400 ~ tax = 100*0.1 + 100*0.14 + 200*0.2 + (income-400)*0.3 C 언어 프로그래밍

  19. 예제 C 언어 프로그래밍

  20. while문 • while문 while (조건식) … 조건식이 참인 동안 문장 문장 반복 실행 while (조건식) { 문장 문장 … } • (예 4.18) 음수 또는 0이 입력될 때까지의 입력된 정수의 합을 계산 ... sum : 누계 C 언어 프로그래밍

  21. 반복제어 변수 • (예 4.19) 1부터 10까지의 정수의 합 계산 sum = 1 + 2 + 3 + … + 10; sum = 0; sum = sum + 1; i=1~10 에 대해서 다음 문장 반복수행 sum = sum + 2; sum = sum + i … sum = sum + 10; sum = 0; … 합의 초기값은 0 i = 1; …초기화 while ( i <= 10 ) { …검사 sum = sum + i; i = i + 1; …갱신 } 변수 i가 반복제어변수 • 반복제어변수: - 반복할 때마다 값이 변화 • - 변수 값에 따라서 반복수행 여부결정 C 언어 프로그래밍

  22. 예제 • (예 4.21) 실수 r의 n제곱을 계산 (n은 정수) • 곱의 초기값 = 1 (곱셈 항등원) • 반복제어: n을 초기값에서 시작하여 반복할 때마다 1씩 감소시켜서 n이 0이 될 때까지 반복하면 n의 초기값 횟수만큼 반복 수행 n번 반복하면 rn이 계산됨 C 언어 프로그래밍

  23. for문 • for문 for (수식1; 수식2; 수식3) … 수식2가 참인 문장 동안 반복 • 반복제어변수를 사용하는 경우에 적합 수식1: 초기화 수식2: 조건식 수식3: 갱신 • 예: N번 반복 실행 1. for (i = 1; i <=N; i = i+1 ) … 1부터 N까지 문장 2. for (i = 0; i < N; i = i+1 ) … 0부터 N-1까지 문장 C 언어 프로그래밍

  24. 1 2 3 4 + = c a b + = c a b 예제 • (예 4.22) 1부터 10까지의 정수의 합 계산 • (예 4.24-1) 수열 an = 2an-1 – 1 (a1=3)의 a10구하기 • (예 4.24-2) Fibonacci수열 Fn = Fn-2 + Fn-1 (F1=0, F2=1)의 F20구하기 a: Fn-2, b: Fn-1, c: Fn C 언어 프로그래밍

  25. 무한 루프와 공문 • 무한루프 • 반복조건이 항상 참인 반복문 for ( ; ; ) … 수식2가 생략되면 참(true)으로 간주함 문장 while (1) … 조건식 1은 참(true)이다 문장 • 무한 루프인 반복문은 내부에서 반복문을 종료할 수 있어야 함. break • 공문(null statement): ;만으로 이루어진 아무 동작도 하지 않는 문장 while (조건식) ; while(조건식)  무한 루프 발생 가능 ; C 언어 프로그래밍

  26. 반복문 설계 • 반복 자료 입력을 종료 시키는 방법 • 입력 자료 수를 먼저 입력하여 이 횟수 만큼 반복 입력 • 정상적으로 사용되지 않는 자료(보초)를 마지막에 입력 • 입력 함수의 파일 끝(EOF) 반환 기능 이용 (Ctrl-Z 또는 Ctrl-D 입력) • (예 4.26) EOF를 만날 때 까지 정수를 입력하여 평균 계산 C 언어 프로그래밍

  27. 예제 • 네제곱표 만들기 • #include <stdio.h> • main() • { • int a; • for (a=1; a<=13; a = a+2) • printf("%d %d \n",a, a*a*a*a); • } • 문제점: 각 열이 나란하게 출력되지 않음 •  해결책: 출력의 각 필드 폭을 일정하게 함 출력 1 1 3 81 5 625 7 2401 9 6561 11 14641 13 28561 C 언어 프로그래밍

  28. 잘못된 입력 처리하기 * • scanf() 함수의 반환값 • scanf() 함수는 성공적으로 입력된 변수의 개수를 반환함. • 정수가 아닌 입력에 대해서 반복 종료 • (예 4.26)의 반복문 에서 EOF를 1로 바꾸면 파일 끝뿐만 아니라정수가 아닌 입력에 대해서도 반복을 종료함 • 정수가 아닌 입력을 무시하고 계속 입력* • scanf("%*s") 를 사용하면 잘못된 입력을 무시하고 다음 자료 입력 C 언어 프로그래밍

  29. 출력 1 1 3 81 5 625 7 2401 9 6561 11 14641 13 28561 형식지정출력 - 예제 • (예 4.27) 네제곱표 만들기 • 문제점: 각 열이 나란하게 출력되지 않음  해결책: 출력의 각 필드 폭을 일정하게 함 C 언어 프로그래밍

  30. 형식지정 출력 • 필드 폭과 정렬: • printf 함수의 형식지정자 C 언어 프로그래밍

  31. 예제 출력 • 네제곱표 printf("%2d %6d\n",a, a*a*a*a); • 연월일을 2003/04/05 형식으로 출력 yr = 2003; mo = 4; day = 5; printf("%4d/%02d/%02d\n", yr, mo, day); • 화씨,섭씨온도 환산표 (0도부터 100도까지 5도간격) printf("%4s %6s\n", "화씨", "섭씨"); … 환산표 헤더 for (f = 0; f <= 100; f = f + 5) { c = (f - 32.0) * 5.0 / 9.0; printf("%4d %6.1f\n", f, c); } 1 1 3 81 5 625 7 2401 9 6561 11 14641 13 28561 C 언어 프로그래밍

  32. 증감 연산자 • 증감 연산자 • 증가연산자: i++  i = i+1 • 감소연산자: i--  i = i-1 • 증감 연산 수식의 값 • 사전증감: ++i, --i 는 먼저 증감  증감이후의 값을 사용 • 사후증감: i++, i-- 는 나중에 증감  증감이전의 값을 사용 (예) i = 5; a = ++i; i++; a = i; 결과: i=6, a=6 i = 5; a = i++; a = i; i++; 결과: i=6, a=5 C 언어 프로그래밍

  33. 복합 치환 연산자 • 복합 치환 연산자 var op= 수식 var = var op수식 • op: 산술연산자(+ – * / %), 비트연산자(11장) • (예 4.30) 치환연산자 사용복합치환연산자 사용 a = a + 2 a += 2 count = count – 1 count –= 1 sum = sum + j sum += j d = d / 12 d /= 12 n = n * (k+1) n *= k+1 … 괄호 불필요 C 언어 프로그래밍

  34. 예제 • (예 4.31) 다음과 같은 수열의 20항까지 출력, 20항까지의 합 출력 1 2 4 7 11 16 … • 증가량이 1, 2, 3, …과 같이 1씩 증가함 C 언어 프로그래밍

  35. 실습 문제 • while 반복문을 사용하여 십진수를 입력하면 그것을 ASCII 값으로 하는 문자를 출력하는 프로그램을 작성하라. (단, 끝날때는 999를 입력한다고 하자.) • 자료의 개수를 입력하고, 그 개수 만큼의 자료를 입력하면 합과 평균을 구하는 프로그램을 작성하라. C 언어 프로그래밍

  36. do – while문 • do-while문 do 문장 … 조건에 관계없이 문장이 while (조건식); 적어도 한번은 실행됨 do { 문장; 문장; … } while (조건식); … 세미콜론(;)으로 끝남에주의 • (예 4.32) 정상적인 메뉴 입력이 들어올 때까지 반복 입력 C 언어 프로그래밍

  37. 중첩된 반복문 • (예 4.33) 다음과 같은 구구단 표 출력 2*1= 2 2*2= 4 2*3= 6 ... 2*6=12 2*7=14 2*8=16 2*9=18 3*1= 3 3*2= 6 3*3= 9 ... 3*6=18 3*7=21 3*8=24 3*9=27 ... • 안쪽 반복문의 반복 횟수가 고정됨 • 중첩된 반복문 • 반복문 안에 반복문이 포함된 것 • 바깥 반복문과 안쪽 반복문은 가능한 한 같은 반복제어변수를 사용하지 않아야 함. C 언어 프로그래밍

  38. 예제 • (예 4.34) 오른쪽과 같이 10줄을 출력 • i번째 줄은 i개의 *를 출력함 • 안쪽 반복문의 반복 횟수가 바깥 반복문의 반복제어 변수에 의해서 정해짐. * ** *** **** ***** C 언어 프로그래밍

  39. 연습 문제 • 1. 다음과 같이 10줄을 출력하는 프로그램을 작성하시오. * ** *** **** ***** • 2. 반복문을 사용하여 15+25+…+105 을 계산하는 프로그램을 작성하시오. 단 5제곱을 계산할때도 반복문을 사용하시오. C 언어 프로그래밍

  40. break문 • break문 • switch 또는 반복문(while, for, do-while)의 실행을 종료함. while (조건식1) { 문장; … if (조건식2) break; … 무한루프에서는 반드시 사용 문장; … } C 언어 프로그래밍

  41. 예제 • (예 4.35) 양수가 입력되는 동안 입력의 합 계산 sum = 0; scanf("%d", &number); while (number > 0) { sum = sum + number; scanf("%d", &number); } /* 예 4.18 */ sum = 0; while (1) { /* 무한 루프 */ scanf("%d", &number); if (number <= 0) break; sum = sum + number; } break를 사용 C 언어 프로그래밍

  42. continue문 • continue문 • 반복문에서 반복 문장의 현재 단계의 수행을 종료하고 다음 반복 시도 while (조건식1) { 문장; … if (조건식2) continue; 문장; … } for (수식1; 조건식1; 수식3) { 문장; … if (조건식2) continue; … for문의 continue는 while문과 문장; … 동작에 차이가 있다. } C 언어 프로그래밍

  43. goto문 • 분기문 • 실행순서를 원하는 곳으로 이동 • (예) break, continue, goto • goto문 goto label; … label: 문장 • 사용을 권장하지 않음 • 중첩된 반복문에서 안쪽 반복문에서 한번에 바깥 반복문을 빠져 나올 때 유용 바깥 반복문 안쪽 반복문 goto end; break end: 문장 C 언어 프로그래밍

  44. 내장 치환 • 내장 치환(embedded assignment) • 치환연산자가 보통 수식에 포함되어 사용되는 것 z = (x=6) + 7; (a = b+c ) != 5; • 조건식에 내장 치환을 사용하면 프로그램이 간결해질 수 있음 • (예 4.39) 한 줄의 문자를 입력하여 소문자를 대문자로 변환 while ( (c = getchar() ) != '\n') { if (c >= 'a' && c <= 'z') c = c - 'a' + 'A'; putchar(c); } c = getchar(); while (c != '\n') { if (c >= 'a' && c <= 'z') /* 소문자이면 */ c = c - 'a' + 'A'; /* 대문자로 변환 */ putchar(c); /* 문자 출력 */ c = getchar(); /* 다시 문자 입력 */ } /* 예 4.17 */ 조건식에 내장 치환 사용 C 언어 프로그래밍

  45. 컴마 연산자 • 컴마(comma) 연산자 , • 여러 개의 수식을 묶어서 하나의 수식으로 만드는 역할 • { }를 사용하여 여러 개의 문장을 하나로 묶는 복합문의 역할과 유사 i = 0, j = 0 … 하나의 수식 • 수식의 값: 컴마 연산자로 결합된 마지막 수식의 값 a = 10, b = a + 20 ... 수식의 값 = b의 값 = 30 • 수식 위치에 여러 개의 수식을 넣어야 하는 경우에 유용함 (예) for문의 수식, 반복문의 조건식 등. • 가장 우선 순위가 낮은 연산자 • (예 4.40) 두 개의 반복제어변수를 사용하는 반복문 for (i=0, j=0; i+j <= 50; i++, j += 2) printf(" (%d, %d)\n", i, j); C 언어 프로그래밍

  46. 예제 • 0 또는 음수가 입력될 때까지의 입력된 정수의 합을 계산 (예 4.41 참고) sum = 0; scanf("%d", &number); while (number > 0) { sum = sum + number; scanf("%d", &number); } /* 예 4.18 */ 마지막에 있는 조건식의 결과가 컴마 수식의 수식의 값 sum = 0; while (scanf("%d", &number),number > 0) sum = sum + number; C 언어 프로그래밍

  47. 실습 문제 (선택문) • 2차 방정식 의 세 계수 a, b, c를 입력 받아서 근을 구하는 프로그램 작성 • 단, C 언어 프로그래밍

  48. 실습 문제 (반복문) • 무리수 e는 다음의 무한 급수로 표현된다. • 소수점이하 14자리까지 정확하도록 무리수 e를 구하는 프로그램 작성하시오. • 프로그램의 결과를 수학함수를 사용한 결과 exp(1.0)과 비교하시오. C 언어 프로그래밍

More Related