개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.

Slides:



Advertisements
Similar presentations
제6장 조건문.
Advertisements

쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
프로그래밍실습 제 7 강.
C++ Espresso 제2장 제어문과 함수.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
2007 1학기 10 함수 활용.
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제5장 제어명령
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
6장. printf와 scanf 함수에 대한 고찰
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
7. while 문의 흐름 제어.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
C언어 콘서트 제6장 반복문.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조.
Chapter 06. 선택문.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express Slide 1 (of 27)
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Chapter 11. 배열과 포인터.
Chapter 05. 입출력 함수.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제7장 반복문이란 무엇인가.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
3주차: Control Flow and Others
어서와 C언어는 처음이지 제16장.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
어서와 C언어는 처음이지 제23장.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
C.
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
개정판 누구나 즐기는 C언어 콘서트 제3장 변수와 자료형 출처: pixabay.
어서와 C언어는 처음이지 제22장.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
11장. 1차원 배열.
Presentation transcript:

개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay

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

이번 장에서 만들 프로그램

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

마일을 미터로 바꾸는 프로그램 #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

반복문의 종류 조건 제어 반복(while 문): 특정한 조건이 만족되면 계속 반복한다. 횟수 제어 반복(for 문): 정해진 횟수만큼 반복한다.

중간 점검 1. 프로그램에 반복 구조가 필요한 이유는 무엇인가? 2. 반복문에는 _______, _______문이 있다.

while 문

while 문의 흐름도

칠판에 “수업시간에 떠들지 않겠습니다.”를 10번 쓰기 #include <stdio.h> int main(void) { int i = 0; while (i < 10) printf("수업 시간에 떠들지 않겠습니다.\n"); i++; } return 0;

반복 제어 변수 출력하기 #include <stdio.h> int main(void) { int i = 0; while (i < 10) printf("i=%d ", i); i++; } return 0;

마일을 미터로 변환하기 1 2 3 i #include <stdio.h> int main(void) {         int meter;         int i = 0;                  while(i < 3)         {                 meter = i * 1609;                 printf("%d 마일은 %d 미터입니다\n", i, meter);                 i++;         }         return 0; } 1 2 i 3 0 마일은 0 미터입니다 1 마일은 1609 미터입니다 2 마일은 3218 미터입니다

팩토리얼 계산하기 #include <stdio.h> int main(void) { int i = 5; long factorial = 1; while (i >= 1) factorial *= i; i--; } printf("%d \n", factorial); return 0;

구구단 출력 // 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++;         }                          return 0; } 구구단 중에서 출력하고 싶은 단을 입력하시오: 9 9*1 = 9 9*2 = 18 9*3 = 27 .... 9*9 = 81

예제 // 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++;         }                          return 0; } ====================    n       n의 제곱     1        1     2        4     3        9     4       16     5       25     6       36     7       49     8       64     9       81    10      100

1부터 1000까지의 합 1부터 n까지의 합을 계산하는 프로그램 n이 무엇이 될지 모르는 경우라면 다음과 같이 계산

1부터 1000까지의 합 #include <stdio.h> int main(void) {         int i, n, sum;                // 변수 선언                  i = 1;                          // 변수 초기화         sum = 0;         while(i <= 1000)         {                 sum += i;              // sum = sum + i;와 같다.                 i++;                    // i = i + 1과 같다.         }         printf("합은 %d입니다\n", sum);         return 0; }

Lab: 반복을 사용하여 도형을 그리자 반복 루프와 윈도우의 GDI 그래픽을 이용하여 사각형 10개를 화면 에 그려보자.

윈도우에서 사각형 그리기 #include <windows.h> #include <stdio.h> int main(void) { HDC hdc = GetWindowDC(GetForegroundWindow()); Ellipse(hdc, 100, 100, 200, 200); return 0; }

윈도우에서 사각형 그리기 #include <windows.h> #include <stdio.h> int main(void) { HDC hdc = GetWindowDC(GetForegroundWindow()); int x = 30; // 첫 번째 사각형의 x좌표 int y = 100; // 첫 번째 사각형의 y좌표 int i = 0; // 반복 제어 변수 while (i < 10) { Rectangle(hdc, x, y, x + 60, y + 60); x += 70; i++; } return 0;

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

Lab: 최대 공약수 찾기 // 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 최대 공약수는 4입니다.

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

do...while문

do-while 문 적어도 한번은 반복문장을 실행한다.

예제 // do..while 문을 이용한 메뉴 1---새로만들기 #include <stdio.h> 2---파일열기 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---새로만들기 2---파일열기 3---파일닫기 하나를 선택하시요. 1 선택된 메뉴=1

중간 점검 1. 다음 코드의 출력을 쓰시오. int n = 0; while (n > 0) { printf("%d\n", n); n = n - 3; } 2. 1번 문제의 반복 구조를 do-while로 변경하면 출력이 어떻게 변화 되는가?

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

실행 결과

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

Lab: 숫자 추측 게임 #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; }

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

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

for 문의 구조

for 문의 구조

10번 출력하기 “Hello World!”를 화면에 10번 출력하기 Hello World!

10번 출력하기 #include <stdio.h> int main(void) { int i;         for(i = 0;i < 10; i++)         printf(“Hello World! \n“);         return 0; }

10번 출력하기

사각형 그리기

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

팩토리얼 구하기 Factorial 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n! 로 나타낸다. 0!=1이다. (예) 3! = 3 X 2 X 1 n! = nX(n-1)X(n-2)X...X2X1

팩토리얼 계산하기 // 반복을 이용한 팩토리얼 구하기 #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; }

팩토리얼 계산 예제(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;

다양한 증감수식의 형태 뺄셈 사용 for (i = 0; i < 10; i += 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"); 어떤 수식이라도 가능

다양한 증감수식의 형태 for ( ; ; ) printf("Hello World!\n"); 무한 반복 루프 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"); 어떤 수식도 가능

중간 점검 1. 다음 코드의 출력을 쓰시오. for(i = 1; i < 5; i++) printf("%d ", 2 * i); 2. 다음 코드의 출력을 쓰시오. for(i = 10; i > 0; i = i - 2) printf("Student%d\n", i);

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

사각형 그리기 *기호를 사각형 모양으로 출력하는 프로그램을 작성해보자.

사각형 그리기 // 중첩 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; }

Lab: 구구단 출력

Sol: 구구단 출력 #include <stdio.h> int main(void) { int i, k; for(i=1;i<=9;i++){ for(k=1;k<=9;k++){ printf("%d X %d = %d \n", i, k, i*k); } return 0;

break 문 break 문은 반복 루프를 빠져 나오는데 사용된다.

예제 다음 프로그램은 사용자로부터 10개의 실수를 받아서 합계를 출력 한다. 사용자가 중간에 음수를 입력하면 반복 루프를 조기에 종료시 킨다.

예제 # include <stdio.h> int main(void) { int i; double number, sum = 0.0; for (i = 1; i <= 10; i++) printf("%d번째 실수를 입력하시오: ", i); scanf("%lf", &number); if (number < 0.0) break; sum += number; } printf("합계 = %f", sum); return 0;

continue 문 현재의 반복을 중단하고 다음 반복을 시작하게 한다.

continue 문 예제 0부터 10까지의 정수 중에서 짝수만을 출력하는 프로그램

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

중간 점검 1. _______ 문이 반복문에서 실행되면 현재의 반복을 중단하고 다음번 반복 처리가 시작된다. 2. _______ 문이 반복문에서 실행되면 반복문을 빠져 나온다. 3. 다음 코드의 출력을 쓰시오. int i; for(i = 1; i < 10; i++) { if( i % 3 == 0 ) break; printf("%d\n", i); }

Lab: 산수 문제 자동 출제 초등학교 학생들을 위한 산수 문제를 자동으로 출제하는 프로그램 을 작성해보자. 덧셈 문제들을 자동으로 생성하여야 한다. 피연산자 는 0에서 99사이의 숫자의 난수로 하자. 한번이라도 맞으면 종료한 다.

Sol: 구구단 출력 #include <stdio.h> #include <stdlib.h> int main(void) { int i, ans; printf("산수 문제를 자동으로 출제합니다. \n"); while(1) { int x = rand() % 100; int y = rand() % 100; printf("%d + %d = ", x, y); scanf("%d", &ans); if (x + y == ans) { printf("맞았습니다.\n"); break; } else printf("틀렸습니다.\n"); return 0; Sol: 구구단 출력

Lab: 앵그리 공 “앵그리 버드”라는 게임이 있었다. 여기서 유사한 게임 “앵그리 공” 을 제작하여 보자. 공을 발사하여서 초기 속도와 초기 각도에 의하 여 비행하게 해보자.

필요한 변수 int x; - 공의 현재 x좌표이다. int y; - 공의 현재 y좌표이다. int vx; - 공의 x 방향 속도이다. int vy; - 공의 y 방향 속도이다.

핵심 코드

Sol: 앵그리 공 #include <windows.h> #include <stdio.h> int main(void) { HDC hdc = GetWindowDC(GetForegroundWindow()); int x = 30, y = 200; int vx = 50, vy = -50; int i; MoveToEx(hdc, 30, 200, NULL); LineTo(hdc, 800, 200); for (i=0; i<20; i++) { vy = vy + 10; x = x + vx; y = y + vy; Ellipse(hdc, x, y, x+10, y+10); Sleep(100); }

Q & A