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