36
20152학기 프로그래밍개론및 실습 과목으로 본 내 용은 강의 교재인 생능출판사, 두근두근 C 언어 수업, 천인국지음을 발췌 수정하였음 프로그래밍개론및 실습

프로그래밍개론및실습 - contents.kocw.netcontents.kocw.net/KOCW/document/2015/cup/chojaehyun/10.pdf중첩반복문(nested loop): 반복문안에다른반복문이위치

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

2015년 2학기프로그래밍개론및실습과목으로 본내용은 강의교재인생능출판사,두근두근 C 언어수업,

천인국지음을발췌수정하였음

프로그래밍개론및실습

CHAPTER 12 횟수로반복하기

for 루프

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

for 문의순서도및구조 for 문은초기식, 조건식, 증감식의 3 부분으로구성

i= 0 , i<10, i++

start

end

“Hello World”

제어변수사용

현재의반복횟수를출력해보자.

#include <stdio.h>

int main(void){

int i;

for (i = 0; i < 5; i++){

printf("%d \n", i);}

printf(“ %d반복이종료 . \n", i);return 0;

}

i= 0 , i<5, i++

start

반복이종료

end

i

핵심예제: 정수들의합 1부터사용자가입력한수 n까지더해서 (1+2+3+...+n)을계산하는프로그램을작성하여보자

예제소스

// 반복을이용한정수합프로그램#include <stdio.h>

int main(void){

int i, sum=0, limit=5;

for (i = 1; i <= limit; i++)

sum += i;

printf(“ %d\n", sum);

return 0;}

i= 1 , i<=limit, i++

sum+=i

start

i , sum=0, limit=5

sum

end

핵심예제: 팩토리얼계산하기 for문을이용하여서팩토리얼을계산해보자. 팩토리얼 n!은 1부터 n까지의정수를모두곱한것을의미한다. 즉, n! = 1×2×3×……×(n-1)×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;}

핵심예제: 온도변환테이블출력 화씨온도-섭씨온도변환테이블을출력하는프로그램을작성하여보자.

예제소스

#include <stdio.h>

int main(void){

double t;

for( t=0.0 ; t<=100.0 ; t += 10.0 ){

printf("%6.2f F = %6.2f C\n", t, (t - 32.0) * 5.0 / 9.0);}

return 0;}

Lab:화면에사각형그리기 화면에사각형을그려본다.

Lab:함수그래프그리기 0.01 ∗ 의그래프를반복문을이용하여서그려보자.

예제소스

#include <windows.h>#include <stdio.h>

HWND hwnd;HDC hdc;

int main(void){

int x, y;

hwnd = GetForegroundWindow();hdc = GetWindowDC(hwnd);

MoveToEx(hdc, 100, 300, 0);LineTo(hdc, 300, 300);

MoveToEx(hdc, 100, 300, 0);LineTo(hdc, 100, 0);

for (x = 0; x < 300; x++){

y = 0.01*x*x + x;SetPixel(hdc, 100 + x, 300 - y, RGB(255, 0, 0));

}return 0;

}

while 루프와 for 루프와의관계

{

초기식

while ( 조건식 )

}

장문장1 ;

장문장2 ;

증증감식 ;

for ( 초기식 ;조건식 ;증증감식 )

{

}

장문장1 ;

장문장2 ;...

...

다양한증감수식의형태

for (i = 10; i > 0; i-- )printf("Hello World!\n");

for (i = 0; i < 10; i += 2 )printf("Hello World!\n");

for (i = 1; i < 10; i *= 2 )printf("Hello World!\n");

for (i = 0; i < 100; i = (i * i) + 2 )printf("Hello World!\n");

뺄셈 사용

2씩 증가

2를 곱한다.

어떤 수식이라도 가능

다양한증감수식의형태

for (i = 0, k = 0; i < 100; i++ )printf("Hello World!\n");

for (printf("반복시작”), i = 0; i < 100; i++ )printf("Hello World!\n");

2개 이상의 변수 초기화

어떤 수식도 가능

for ( ; ; )printf("Hello World!\n");

무한 반복 루프

중첩반복문

중첩반복문(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; }

예제

핵심예제: 구구단출력하기 구구단을 2단부터 9단까지출력하는프로그램을살펴보자.

예제소스

#include <stdio.h>

int main(void){

int x, dan;

for (dan = 2; dan<10; dan++){

for (x = 1; x<10; x++)printf("%d*%d=%2d ", dan, x, dan*x);

printf("\n");}return 0;

}

Lab: 주사위 경우의수

두개의주사위를던졌을때합이 7이되는경우를모두출력하여보자.

예제소스

#include <stdio.h>#define SUM 7

int main(void){

int diceA, diceB;

printf("합이 %d이되는경우의수를찾아봅니다. \n", SUM);printf("--------------------- \n");printf("주사위A 주사위B \n");printf("--------------------- \n");

for (diceA = 1; diceA <= 6; diceA++)for (diceB = 1; diceB <= 6; diceB++)

if ( SUM== (diceA+diceB) )printf("%d %d \n", diceA, diceB);

return 0;}

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

핵심예제: break로반복종료 ‘q’가입력되면반복루프를빠져나오는예제를작성하여보자.

예제소스

#include <stdio.h>

int main(void) {

char c;

for(;;) {printf( "어떤키나누르세요, q는종료: " );scanf(" %c", &c);if (c == 'q')

break;}return 0;

}

#include <stdio.h>int main(void){

int i;for(i=0 ; i<10 ; i++)

if( i%3 == 0 )continue;

printf("%d ", i);

return 0;}

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

3의 배수 는 건너뛴다.

Lab:배터리관리 배터리관리프로그램을시뮬레이션하여보자. 사용자는충전과사용을반복한다. 충전은양수로, 사용은음수로입력받는다. 만약배터리가총충전용량의 10% 이하로내려가면충전이필요하다는경고를화면에출력하고프로그램을종료한다.

예제소스

#include <stdio.h>int main (void){

double capacity, remaining, amount; capacity = 5000.0;remaining = 3000.0;printf ("현재남아있는충전량: %f\n", remaining);

while (remaining > capacity * 0.10){

printf ("\n충전(+)/사용(-): ");scanf ("%lf", &amount);remaining = remaining + amount;

if (remaining < 0.0)remaining = 0.0;

if (remaining > capacity)remaining = capacity;

printf ("현재남아있는충전량: %f\n", remaining);}printf ("경고! 충전하세요!\n");return (0);

}

Lab: 직각삼각형찾기 각변의길이가 100보다작은삼각형중에서피타고라스의정리가성립하는직각삼각형은몇개나있을까?

알고리즘

for(a=1;a<=100;a++) for(b=1;b<=100;b++) for(c=1;c<=100;c++) if( c*c = =(a*a + b*b) ) a와 b와 c를화면에출력한다.

소스

#include <stdio.h>int main(void){

int a, b, c;

for(a=1; a<=100; a++)for(b=1; b<=100; b++)

for(c=1; c<=100; c++)if(c*c== (a*a+b*b) )

printf("%d %d %d", a, b, c);return 0;

}

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

알고리즘

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

소스

#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;

퀴즈

임의의수 A, B, C, D 4개의수로구성된 3자리정수가있다. 단각각의수는 1에서 9사이의정수이다. 다음식을만족하는A,B,C,D의값들을출력하는프로그램을작성하시오

A B C + C A C---------------

B D D

설명) 여러해중에서예를들면A=2, B=9, C=6, D=2인경우위식을만족하는해라고할수있음

2 9 6+6 2 6----------

9 2 2