Presentation is loading. Please wait.

Presentation is loading. Please wait.

쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.

Similar presentations


Presentation on theme: "쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express."— Presentation transcript:

1 쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express

2 이번 장에서 학습할 내용 반복의 개념 이해 while 반복문 do-while 반복문 for 반복문
반복 구조는 일련의 처리를 반복할 수 있게 한다. 반복의 개념을 먼저 이해하고 C에서 제공되는 3가지의 반복 구조에 대하여 학습한다. 반복의 개념 이해 while 반복문 do-while 반복문 for 반복문 break와 continue문

3 반복문 Q) 반복 구조는 왜 필요한가? A) 같은 처리 과정을 되풀이하는 것이 필요하기 때문이다. 학생 30명의 평균 성적을 구하려면 같은 과정을 30번 반복하여야 한다.

4 프로그램의 흐름을 제어하는 방법 1) 순차구조 2) 선택구조 3) 반복구조 - 차례대로 실행 - 조건을 검사하여 여러 개
의 실행 경로 중에서 하나를 선택 3) 반복구조 - 조건이 만족될 때가지 반복 NO YES

5 마일을 미터로 바꾸는 프로그램 #include <stdio.h> int main(void) { int meter;
                meter = 0 * 1609;         printf("0 마일은 %d미터입니다\n", meter);         meter = 1 * 1609;         printf("1 마일은 %d미터입니다\n", meter);         meter = 2 * 1609;         printf("2 마일은 %d미터입니다\n", meter); return 0; } 같은 처리과정 #1 같은 처리과정 #2 같은 처리과정 #3

6 반복문의 종류

7 while 문의 구조 주어진 조건이 만족되는 동안 문장들을 반복 실행한다. 초기식; while (조건식) { 문장; 증감식;
       문장; 증감식; } ① 초기식을 실행한다. ② 반복 조건을 나타내는 조건식을 계산한다. ③ 수식의 값이 거짓이면 while 문의 실행이 종료된다. ④ 수식의 값이 참이면 문장이 실행된다. ⑤ 증감식을 실행하고 ②로 돌아간다. while ( 초기식 ; 조건식 증감식 ) { 반복하고자 하는 문장들 }

8 if 문과 while 문의 비교 if( 조건 ) { ... } while( 조건 ) { ...
조건이 만족되면 한번만 실행된다. 조건이 만족되면 여러 번 반복 실행된다.

9 i 값이 3으로 증가하였지만 조건에 만족 하지 않아
예제 #include <stdio.h> int main(void) {         int meter=0;         int i = 0;                  while(i < 3)         {                 meter = i * 1609;                 printf("%d 마일은 %d 미터입니다\n", i, meter);                 i++; // i = i+1 과 동일         }         return 0; } 0마일은 0미터 입니다. 1마일은 1609미터 입니다. 3 2 1 2마일은 1609미터 입니다. < 3 i * 1609 = 1609 3218 meter i 값이 3으로 증가하였지만 조건에 만족 하지 않아 출력하지 못하고 프로그램을 종료한다.

10

11 예제 2 9 5 4 1 3 2 * n i . . . // while 문을 이용한 구구단 출력 프로그램
#include <stdio.h> int main(void) {         int n;         int i = 1;         printf("출력하고 싶은 단: ");         scanf("%d", &n);         while (i <= 9)         {                 printf("%d*%d = %d \n", n, i, n*i);                 i++; // i = i+1 과 동일         }                          return 0; } 2 9 5 4 1 3 2 n * i 출력하고 싶은 단: 2 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 . . . 2*9=18

12 예제 10 2 3 4 1 5 n . . . // while 문을 이용한 제곱값 출력 프로그램
#include <stdio.h> int main(void) {         int n;         printf("====================\n");         printf("   n       n의 제곱 \n");         n = 1;         while (n <= 10)         {                 printf("%5d    %5d\n", n, n*n);                 n++; // n= n+1 과 동일         }                          return 0; } 10 2 3 4 1 5 n ====================    n       n의 제곱 . . .

13 예제 1부터 n까지의 합을 계산하는 프로그램 n이 무엇이 될지 모르는 경우라면 다음과 같이 계산
... ①빈통을 준비한다. ②통에 1부터 n까지를 넣는다. ③통에 들어 있는 동전의 개수를 출력한다.

14 예제 6 1 3 1 3 2 3 i n sum #include <stdio.h> int main(void) {
        int i, n, sum;  // 변수 선언                  printf("정수를 입력하시오:");          scanf("%d", &n);                     i = 1; // 변수 초기화         sum = 0;         while(i <= n)         {                 sum += i; sum = sum + i 와 동일                 i++; // i = i + 1 와 동일         }         printf("1부터 %d까지의 합은 %d입니다\n", n, sum);         return 0; } 6 1 3 1 3 2 sum i 3 n 정수를 입력하시오:3 1부터 3까지의 합은 6입니다

15 예제 1 2 3 10 30 60 30 10 20 i n sum // while 문을 이용한 합계 프로그램
#include <stdio.h> int main(void) {         int i, n, sum;   i = 0;                          // 변수 초기화        sum = 0;                     // 변수 초기화          while (i < 3)           {                 printf("값을 입력하시오: ");                 scanf("%d", &n);                 sum = sum + n;  // sum += n;과 같다.                 i++;          }           printf("합계는 %d입니다.\n", sum);                  return 0; } 1 2 3 10 30 60 30 10 20 i sum n 값을 입력하시오 : 10 값을 입력하시오 : 20 값을 입력하시오 : 30 합계는 60입니다.

16 예제: 최대값 #include <stdio.h> #include <limits.h>
int main(void) { int number, min_value = INT_MAX; printf("정수를 입력하시오\n종료는 Ctrl+z\n"); while(scanf("%d", &number) != EOF) if( number < min_value ) min_value = number; } printf("최소값은 %d“, min_value); return 0; 정수를 입력하시오 종료는 Ctrl+z 10 20 30 5 ^Z 최소값은 5

17 예제 두수의 최대 공약수 구하기 유클리드 알고리즘 ① 두 수 가운데 큰 수를 x, 작은 수를 y라 한다.
② y가 0이면 공약수는 x와 같다. ③ r ← x % y ④ x ← y ⑤ y ← r ⑥ 단계 ②로 되돌아간다.

18 예제 12 8 4 x y = r % 나머지 // while 문을 이용한 최대 공약수 구하기 프로그램
#include <stdio.h> int main(void) {         int x, y, r;         printf("두 정수를 입력 (큰 수, 작은 수): ");         scanf("%d%d", &x, &y);         while (y != 0)         {                 r = x % y;                 x = y;                 y = r;         }         printf("최대 공약수는 %d입니다.\n", x);                          return 0; } 12 8 x % y = 4 r 나머지 두 정수를 입력 (큰 수,작은 수): 12 8 최대공약수는 4입니다.

19 while 문에서 주의할 점 변수가 증가 아니라 감소 반복 루프에 포함되어 있지 않다. 조건뒤에 ;이 있음 int i = 1;
{         printf("반복중입니다\n"):         i--; } 변수가 증가 아니라 감소 int i = 0; while(i < 3)         printf("반복중입니다\n"):         i++;           . 반복 루프에 포함되어 있지 않다. int i = 0; while(i < 3) ; {         printf("반복중입니다\n"):         i++;           . } 조건뒤에 ;이 있음

20 참과 거짓 #include <stdio.h> int main(void) { int i = 3; while (i)
printf("%d은 참입니다.", i); i--; } printf("%d은 거짓입니다.", i); 3은 참입니다. 2은 참입니다. 1은 참입니다. 0은 거짓입니다.

21 do...while문 반복 조건을 루프의 끝에서 검사 초기식; do {        문장; 증감식; } while (조건식); 주의!

22 do-while 문 적어도 한번은 반복문장을 실행한다. 문장 조건 참 거짓 초기식; do { 문장; 증감식;
       문장; 증감식; } while (조건식); 문장 조건 거짓

23 while 루프와 do-while 루프와의 관계
; 초기식 ; 초기식 while ( 조건식 ) do { { 문장1 ; 문장1 ; 문장2 ; 문장2 ... ... ; 증감식 ; 증감식 } while ( 조건식 ) ; }

24 예제 1 i // do..while 문을 이용한 메뉴 #include <stdio.h> int main(void)
{         int i = 0;         do         {                 printf("1---새로 만들기\n");                 printf("2---파일 열기\n");                 printf("3---파일 닫기\n");                 printf("하나를 선택 하시오:\n");                 scanf("%d", &i);         } while(i < 1 || i > 3);                  printf("선택된 메뉴=%d\n",i);         return 0; } 1 i 1---새로 만들기 2---파일 열기 3---파일 닫기 하나를 선택 하시오: 1 선택된 메뉴=1

25 for 루프 정해진 횟수만큼 반복하는 구조

26 for 문의 구조 for ( 초기식; 조건식; 증감식) 문장; ① 초기식을 실행한다.
      문장; ① 초기식을 실행한다. ② 반복 조건을 나타내는 조건식을 계산한다. ③ 수식의 값이 거짓이면 for 문의 실행이 종료된다. ④ 수식의 값이 참이면 문장이 실행된다. ⑤ 증감식을 실행하고 ②로 돌아간다.

27 for 문의 구조 int i; for(i = 0; i < 10; i++)         printf("Hello World!\n");

28 for문의 실행과정

29 for문의 실행과정 int i; for(i = 0; i < 10; i++) printf("Hello World!\n");
반복횟수 i의 값 i<10 반복여부 1번째 반복 반복 2번째 반복 1 3번째 반복 2 4번째 반복 3 5번째 반복 4 6번째 반복 5 7번째 반복 6 8번째 반복 7 9번째 반복 8 10번째 반복 9 11번째 반복 10 거짓 중지

30 예제 시작 i=1 , sum=0 i <= 10 sum = sum + i Sum출력 i++
//  반복을 이용한 정수합 프로그램 #include <stdio.h> int main(void) {         int i, sum;         sum = 0;               for(i = 1;i <= 10; i++)                 sum += i; // sum = sum + i;와 같음         printf("1부터 10까지 정수의 합= %d\n",sum);         return 0; } i=1 , sum=0 i가 10보다 작거나 같은 때 까지 10번 반복 NO i <= 10 YES sum = sum + i Sum출력 i++ 1부터 10까지 정수의 합 = 55

31 예제 1 3 2 3 i n // 반복을 이용한 세제곱값구하기 #include <stdio.h>
int main(void) {         int i, n;         printf("정수를 입력하시오:");         scanf("%d", &n);         printf("====================\n");         printf("   i       i의 세제곱\n");         for(i = 1;i <= n; i++)                 printf("%5d     %5d\n", i, i*i*i);          return 0; } 1 3 2 3 i n 정수를 입력하시오: 3 ====================     i      i의 세제곱

32 예제 // 반복을 이용한 네모 그리기 #include <stdio.h> int main(void) { int i;
printf("**********"); for(i = 0;i < 5; i++) printf("* *"); return 0; } ********** * *

33 예제 3 3 1 2 10 2 1 6 20 i fact n // 반복을 이용한 팩토리얼 구하기
#include <stdio.h> int main(void) {         long fact=1;         int i, n;         printf("정수를 입력하시오:");         scanf("%d", &n);         for(i = 1;i <= n; i++)                 fact = fact * i;         printf("%d! 은 %d입니다.\n",n,fact);                return 0; } 3 3 1 2 10 2 1 6 20 n i fact 정수를 입력하시오: 3 3! 은 6입니다.

34 while 루프와 for 루프와의 관계 ; for ( ; ; ) while ( ) { { ... ... } ; ; ; ; ;
초기식 초기식 ; 조건식 ; 증감식 ) while ( 조건식 ) { { 문장1 ; 문장2 ; 문장1 ; ... 문장2 ; ... } 증감식 ; }

35 팩토리얼 계산 예제(while 버전) // 반복을 이용한 팩토리얼 구하기 #include <stdio.h>
int main(void) { long fact = 1; int i = 1, n; printf("정수를 입력하시요: "); scanf("%d", &n); while (i <= n) fact = fact * i; i++; } printf("%d!은 %d입니다.", n, fact); return 0;

36 다양한 증감수식의 형태 뺄셈 사용 2씩 증가 2를 곱한다. 어떤 수식이라도 가능
for (i = 10; i > 0; i-- ) printf("Hello World!\n"); 뺄셈 사용 for (i = 0; i < 10; i += 2 ) printf("Hello World!\n"); 2씩 증가 for (i = 1; i < 10; i *= 2 ) printf("Hello World!\n"); 2를 곱한다. for (i = 0; i < 100; i = (i * i) + 2 ) printf("Hello World!\n"); 어떤 수식이라도 가능

37 디양한 for 루프 한부분이 없을 수도 있다. 2개 이상의 변수 초기화 어떤 수식도 가능 무한 반복 루프
for ( ; i<100; i++ ) printf("Hello World!\n"); 한부분이 없을 수도 있다. for (i = 0, k = 0; i < 100; i++ ) printf("Hello World!\n"); 2개 이상의 변수 초기화 for (printf("반복시작”), i = 0; i < 100; i++ ) printf("Hello World!\n"); 어떤 수식도 가능 for ( ; ; ) printf("Hello World!\n"); 무한 반복 루프

38 중첩 반복문 중첩 반복문(nested loop): 반복문 안에 다른 반복문이 위치

39 예제 1 9 2 1 2 4 10 1 20 x y ② ① 0부터 9까지 10번 반복 0부터 4까지 5번 반복
// 중첩 for 문을 이용하여 *기호를 사각형 // 모양으로 출력하는 프로그램 #include <stdio.h> int main(void) {         int x, y;         for(y = 0;y < 5; y++)         {                 for(x = 0;x < 10; x++)                         printf("*");                 printf("\n");         }         return 0; } 0부터 9까지 10번 반복 1 9 2 1 2 x 0부터 4까지 5번 반복 4 10 1 20 y * * * ******* \n ********** \n

40 예제 #include <stdio.h> int main(void) { int x, y;
for(y = 1; y <= 5; y++) for(x = 0; x < y; x++) printf("*"); printf("\n"); // 내부 반복문이 종료될 때마다 실행 } return 0; * ** *** **** *****

41 continue 문 현재의 반복을 중단하고 다음 반복을 시작하게 한다. ; ; for ( ; ; ) while ( ) do {
초기식 ; 초기식 for ( 초기식 ; 조건식 ; 증감식 ) while ( 조건식 ) do { { 문장1 ; { 문장1 ; 문장1 ; 문장2 ; 문장2 ; 문장2 ; continue ; continue ; continue ; } 증감식 ; 증감식 ; } } while ( 조건식 ) ;

42 예제 #include <stdio.h> int main(void) { int i;
for(i=0 ; i<10 ; i++) if( i%3 == 0 ) continue; printf("%d ", i); return 0; } 3의 배수 는 건너뛴다.

43 break 문 현재의 반복을 중단하고 루프를 빠져 나온다. ; ; for ( ; ; ) while ( ) do { { { }
초기식 ; 초기식 for ( 초기식 ; 조건식 ; 증감식 ) while ( 조건식 ) do { { 문장1 ; { 문장1 ; 문장1 ; 문장2 ; 문장2 ; 문장2 ; break; break; break; } 증감식 ; 증감식 ; } } while ( 조건식 ) ;

44 예제 grade < 0.0 count ++ break sum += grade
#include <stdio.h> int main(void) {         float grade, sum = 0.0, average;         int count = 0;         while(1)         {                 printf("학생 성적을 입력하시오: ");                 scanf("%f", &grade);                 if( grade < 0.0 )                         break;                 count++;                 sum += grade;                  }         average = sum / count;         printf("학생들의 평균은 %f입니다.\n", average);         return 0; } 학생 성적을 입력하시오: 90 학생 성적을 입력하시오: 80 학생 성적을 입력하시오: 70 학생 성적을 입력하시오: -1 학생들의 성적의 평균은 입니다. YES grade < 0.0 음수 입력 시 while문을 나옴 NO count ++ break sum += grade

45 예제 12.0 9.0 -1 v // break를 이용하여 무한루프를 탈출한다. #include <stdio.h>
#include <math.h> int main(void) {         double v;         while(1)         {                 printf("실수 값을 입력하시오: ");                 scanf("%lf", &v);                 if( v < 0.0 )                         break;                 printf("%f의 제곱근은 %f\n", v, sqrt(v));         }   return 0; } 12.0 9.0 -1 v 실수 값을 입력하시오: 9.0 의 제곱근은 입니다. 실수 값을 입력하시오: 12.0 의 제곱근은 입니다. 실수 값을 입력하시오: -1

46 예제 b B A Q a letter // 소문자를 대문자로 변경한다. #include <stdio.h>
int main(void) {         char letter;         while(1)         {                 printf("소문자를 입력하시오: ");                 scanf(" %c", &letter);                 if( letter == 'Q' )                         break ;                 if( letter < 'a' || letter > 'z' )                         continue ;                 letter -= 32;                 printf("변환된 대문자는 %c입니다.\n", letter);         }         return 0; } b B A Q a letter 소문자를 입력하시오 : a 변환된 대문자는 A입니다.. 소문자를 입력하시오 : b 변환된 대문자는 B입니다. 소문자를 입력하시오 : Q

47 예제 – 달력 만들기 #include <stdio.h> #define START_DAY 3 // 첫번째 날이 수요일
#define DAYS_OF_MONTH      31     // 달의 일수 int main(void) {         int day, date;        printf("=====================\n");         printf("일 월 화 수 목 금 토\n");         printf("=====================\n"); // 월요일부터 수요일까지         for(day = 0; day < START_DAY ; day++)                     printf("   ");                       // 공백 출력         for(date = 1; date <= DAYS_OF_MONTH ; date++)         {                 if( day == 7 )                 {                         day = 0;      // 일요일이면 줄바꿈을 출력                         printf("\n");                 }                 day++;                 printf("%2d ", date);               // 날을 출력한다.         }         printf("\n=====================\n");         return 0; }

48 실습 반복문을 사용하여 다음 조건에 맞는 프로그램을 작성하시오
2중 for문을 사용하여 구구단 1~9단을 한번에 출력하는 프로그램. ‘*’ 기호로 삼각형 출력하는 프로그램

49 1번 결과

50 2번 결과

51 실습: 숫자 추측 게임 프로그램이 가지고 있는 정수를 사용자가 알아맞히는 게임
사용자가 답을 제시하면 프로그램은 자신이 저장한 정수와 비교하여 제시된 정수가 더 높은지 낮은지 만을 알려준다.

52 실행 결과 정답을 추측하여 보시오: 10 제시한 정수가 낮습니다. 정답을 추측하여 보시오: 30 정답을 추측하여 보시오: 60
제시한 정수가 높습니다. 정답을 추측하여 보시오: 59 축하합니다. 시도횟수=4

53 알고리즘 do 사용자로부터 숫자를 guess로 입력받는다. 시도횟수를 증가한다. if( guess < answer )
숫자가 낮다고 출력한다. if( guess > answer ) 숫자가 높다고 출력한다. while(guess != answer); “축하합니다”와 시도횟수를 출력한다.

54 소스 #include <stdio.h> int main(void) { int answer =59; // 정답
int guess; int tries = 0; // 반복 구조 do { printf("정답을 추측하여 보시오: "); scanf("%d", &guess); tries++; if (guess >answer) // 사용자가 입력한 정수가 정답보다 높으면 printf("제시한 정수가 높습니다."); if (guess <answer) // 사용자가 입력한 정수가 정답보다 낮으면 printf("제시한 정수가 낮습니다."); } while (guess !=answer); printf("축하합니다. 시도횟수=%d", tries); return 0; }

55 도전문제 위의 프로그램이 게임이 되려면 난수를 발생시키는 것이 좋다. 난수는 (rand()%100)으로 발생이 가능하다. stdlib.h 헤더 파일도 포함시켜야 한다.

56 소스 #include <stdio.h> #include <stdlib.h> int main(void) {
int answer; int guess; int tries = 0; answer = (rand()%100); // 정답 // 반복 구조 do { printf("정답을 추측하여 보시오: "); scanf("%d", &guess); tries++; if (guess >answer) // 사용자가 입력한 정수가 정답보다 높으면 printf("제시한 정수가 높습니다."); if (guess <answer) // 사용자가 입력한 정수가 정답보다 낮으면 printf("제시한 정수가 낮습니다."); } while (guess !=answer); printf("축하합니다. 시도횟수=%d", tries); return 0; }

57 실습 프로그램 1

58 실습 프로그램 2

59 실습 프로그램 3

60 실습 프로그램 1

61 실습 프로그램 2

62 Q & A


Download ppt "쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express."

Similar presentations


Ads by Google