최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

Download Report

Transcript 최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

최신 C 프로그래밍 언어
문제해결에서 프로그래밍까지
개정판
6장 : 반복(Loop) 제어 구조
도서출판 - 인터비젼
1
6장 반복(Loop) 제어 구조

학습목표




1. 반복 제어구조의 종류를 이해한다.
2. 반복 제어구조 활용 방법을 이해한다.
3. 반복 제어구조의 다양한 조건 표현 방법을 이해한다.
4. 내포형 반복 제어구조(Nested Loops)에 대해
이해한다.
 5. 분기 제어 구조를 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
2
목차

6장 반복(Loop) 제어 구조
 예습시간
–
–
–
–
–
1. 반복 제어 구조 문법
[기초다지기] 반복 제어 구조 익히기
2. 기타 분기 제어 구조
[기초다지기] 기타 분기 제어 구조 익히기
3. 반복 제어 구조의 종류
 실습시간
– 반복 구조 활용
– 반복 구조 응용
 연습시간
– 반복 구조 분석
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
3
예습시간 – 1 교시
반복 제어 구조 문법
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
4
반복 제어 구조 문법

학습 개요
 C언어가 제공하는 반복 구조의 문법적 특징을 알아본다.
 반복 제어 구조의 종류와 특징을 다룬다.
– for()문
– while()문
– do-while()문
 내포된 반복 구조에 대해 알아본다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
5
반복 제어 구조 문법

for 제어 구조
 조건식의 값을 평가하여 참일 경우 일정 횟수만큼 반복 실행
 조건식이 거짓일 경우 제어 구조를 벗어남
 표현식과 흐름도
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
6
반복 제어 구조 문법

for 제어 구조
 for 문의 특징
– for문은 조건절을 3가지 요소로 구성한다.
» 초기값, 조건식, 증감치
– 증감 대상이 일정할 경우 한 문장으로 처리 가능
– 수행순서
» 먼저 초기값을 할당하고 그 값을 이용해 조건식과 비교
» 그 다음 해당 조건식이 참일 경우 for문 블록 안의 내용을 수행한
후 증감치를 통해 값을 증가
» 증감한 값을 다시 조건식과 비교하고 참일 경우 다시 아래 for블록을
수행하고 그렇지 않고 거짓일 경우 for문을 빠져 나옴
– for문의 초기값은 for문 실행 시 단 한번 수행
– 초기값, 조건식 그리고 증감치는 생략가능 하지만 항상
세미콜론(;)2개는 존재해야 한다.
» 예) for(;;){}, for(;i<10;i++), for(;;j++), for(;i<10;)
– 조건에 맞지 않을 경우 for문을 한번도 실행하지 않을 수 있다.
– 초기값이나 증감치는 2개 이상 둘 수 있으며 이들은 콤마(,)로 분리한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
7
반복 제어 구조 문법

for 문에서 사용되는 다양한 형태
형식
설명
for(i=0; i<10; i++){...}
i값이 0에서부터 10보다 작을 때까지 1씩 증가시키며
반복한다. 결국 i값이 0에서 9까지 10번 반복된다.
for(i=0,j=0; i+j < 10 ; i++, j+=2)
초기값으로 i와 j를 0으로 하고 i+j가 10보다 작을 때까
지 반복한다. 증감은 i는 1증가, j는 2증가한다. 결국 i,j
가 (0,0)(1,2)(2,4)(3,6)까지 4번 반복되고 i,j가 (4,8)일
때 이 for문을 빠져나온다.
char c='z';
for(;c>'a';c--){...}
이 for문은 초기값이 생략된 형태이다. 이 경우 비교 대
상은 for문 이전에 존재해야 한다. 이 구문은 c가 z에서
부터 1씩 감소하면서 보다 클 때까지 반복한다. 결국 c
가 z ~ a까지 반복 수행한다.
for(;;){...}
모든 값이 생략된 형태로 무한 반복을 의미한다. for문
안에 이 블록을 빠져 나올 수 있는 명령이 필요하다.
for(x=1; x<10; x= y+3){...}
이 for문은 x값이 1에서부터 10보다 작을 경우까지 반
복한다. 여기에서 증감치 x=y+3의 y값은 필요에 따라
블록 안에서 변경될 수 있다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
8
반복 제어 구조 문법

다음 프로그램의 실행 결과를 작성해 보자











01 #include <stdio.h>
02 void main(){
03
char c;
04
for(c='A'; c <= 'Z' ; c++){
05
if(c % 2){
06
printf("%c", c);
07
}
08
}
09
printf("\n");
10 }
실행 결과는 :
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
9
반복 제어 구조 문법

while 제어 구조




조건이 참일 경우 반복
초기값과 증감치가 존재하지 않은 구조
while 블록 내부에서 반드시 종료 구문을 포함하여야 한다.
표현식과 흐름도
while(1){…} 구조
while 구문의 무한 루프 구조
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
10
반복 제어 구조 문법

while 제어 구조
 다음 프로그램의 실행 결과를 작성해 보자.
–
–
–
–
–
–
–
–
–
–
–
01 #include<stdio.h>
02 void main(){
03
int x=0,sum=0;
04
while(x<=100){
05
if(x % 3 == 0){
06
sum += x;
07
}
08
}
09
printf(" sum = %d \n" , sum);
10 }
 실행 결과 :
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
11
반복 제어 구조 문법

do-while 제어 구조
 while 제어 구조와 비슷하지만 조건식 검사 시기가 문장 실행 후에
이루어진다.
 문장 실행이 꼭 한번 이상 수행되어야 하는 경우에 유용
 구조 형식
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
12
반복 제어 구조 문법

do-while 제어 구조
 다음 프로그램의 실행 결과를 작성해 보자
–
–
–
–
–
–
–
–
–
–
–
01 #include <stdio.h>
02 void main(){
03
int x, y, sum;
04
x=1,y=sum=0;
05
do{
06
sum += x + y;
07
x*=3;
08
y-=5;
09
}while(sum < 100);
10
printf("sum = %d \n",sum);
11 }
 실행 결과 :
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
13
반복 제어 구조 문법

내포된 반복 구조
 반복 구조는 다른 제어 구조(반복,조건 등등)을 포함할 수 있다.
 내포된 반복 구조는 하나의 외부 반복 구조와 하나 이상의 내부 반복
구조로 구성된다.
 외부 반복이 한번 이루어질 때 내부 반복 구조는 모든 필요한 반복을
수행한다.
 다음 프로그램의 수행 결과를 확인해 보자
– 01 #include <stdio.h>
02 void main(){
– 03
int i,j;
– 04
printf("구구단 출력 프로그램\n");
– 05
for(i=2; i< 10; i++){ // ❶외부 반복 구조
– 06
printf(" %d 단 \n", i);
– 07
for(j=1; i< 10; j++){ // ❷내부 반복 구조
– 08
printf(" I * j = %d \n", i*j);
– 09
}
– 10
}
– 11 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
14
[기초다지기] 반복 제어 구조 익히기

1. for문의 수행 순서에 대해 알아보자.
초기화
조건식 1단계 ( 초기화 : i=0, 조건식 : 0<3, 문장들 )
문장들
#include <stdio.h>
void main(){
int i;
for(printf("초기화\n"),i=0;
printf("조건식\n"),i<3;
printf("증감치\n"),i++){
printf("문장들\n");
}
}

분석
증감치
조건식 1단계 ( 증감치 : i=1, 조건식 : 1<3, 문장들 )
문장들
증감치
조건식 1단계 ( 증감치 : i=2, 조건식 : 2<3, 문장들 )
문장들
증감치
조건식3개의
1단계 ( 인자를
증감치 : i=3,
조건식 : 3<3, 문장들 )
증감치인
가진다
 for문은 초기화, 조건식
 위 프로그램은 i가 0에서 3보다 작을 때까지 3번 반복하는 구조
 각각의 수행 순서는 처음 초기화 부분, 다음 조건식 부분 그리고
다음 문장들이 수행
 다음 단계에서 초기화 대신 증감치가 이루어지고 조건식과 비교되어
조건식이 참일 때까지 문장들을 반복
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
15
[기초다지기] 반복 제어 구조 익히기

2. 각각의 for문의 반복 횟수를 알아보자.
#include <stdio.h>
void main(){
int i,j,x,y=0,count=0;
char c='z';
for(i=0;i<10;i++)의 반복 횟수 : 10
for(i=0;i<10;i++){
for(i=0,j=0;i+j<10;i++,j+=2)의 반복 횟수 : 4
count ++;
for(;c>'a';c--)의 반복 횟수 : 25
}
printf("for(i=0;i<10;i++)의 반복 횟수 : %d\n",count);
for(;;)에서 if(count > 10)의 반복 횟수 : 11
count = 0;
for(x=1; x<10; x = y+3)에서 y++이 있는 반복
for(i=0,j=0;i+j < 10; i++, j+=2){
count ++;
}
printf("for(i=0,j=0;i+j<10;i++,j+=2)의 반복 횟수 : %d\n",count);
count = 0;
for(;c>'a';c--){
count ++;
}
printf("for(;c>'a';c--)의 반복 횟수 : %d\n",count);
count = 0;
for(;;){
if(count > 10)
break;
count ++;
}
printf("for(;;)에서 if(count > 10)의 반복 횟수 : %d\n",count);
count = 0;
for(x=1; x<10; x = y+3){
y++;
count ++;
}
printf("for(x=1; x<10; x = y+3)에서 y++이 있는 반복 횟수 : %d\n",count);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
횟수 : 7
16
[기초다지기] 반복 제어 구조 익히기

2. 각각의 for문의 반복 횟수를 알아보자.

분석
 첫 번째 for문 : i=0에서 9까지 10번 반복
 두 번째 i,j값이 0일 때 i는 1씩 증가 j는 2씩 증가하는데 i+j가 10보다
작을 동안 반복 (총 4번 반복)
 세 번째 for문 : 문자를 이용한 증감 연산
– 문자는 ASC 코드 값으로 나타내며 알파벳 순서대로 1씩 증가된 코드
값을 가진다
– 이 반복문은 'z'에서 'b'까지 25번 반복
 4번째 for문 : 무한 반복 구조
– for 블록 안에 종료를 위한 조건이 필요
– if(count > 10)이 종료조건
– 0부터 10까지 11번의 반복이 발생
 마지막 for문 : y값의 변화가 조건식에 반영
– x가 1에서부터 10보다 작을 때까지 y+3값으로 x를 증가
– 반복문 안에서 y값을 1씩 증가
– x = 1, 4, 5, 6, 7, 8, 9 값으로 7번의 반복
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
17
[기초다지기] 반복 제어 구조 익히기

3. While문과 do-While문의 구조를 이해하자.
#include <stdio.h>
void main(){
int n,i,fact=1;
do{
printf("N! 값을 입력하시오 (1~10 사이의 값) : ");
scanf("%d",&n);
}while(n < 1 || n > 10);
i = n;
while(i > 0){
N! 값을 입력하시오 (1~10 사이의 값) : 7
fact = fact * i;
7! 값은 5040이다.
i--;
}
printf("%d! 값은 %d이다.\n",n,fact);
}

분석
 1에서 10 사이의 정수값을 받아 그 값에 대한 factorial 값 계산
 처음 do-while문 : n값이 1에서 10 사이의 값을 얻을 때까지 반복
– do- while문은 한번 이상의 반복을 요구할 때 많이 사용
 두 번째 while문 : I값이 0보다 큰 값을 가질 동안 반복
– while문은 조건식만을 가지고 있기 때문에 이 조건에 대한 변화는 while
문 안에서 이루어져야 한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
18
예습시간 – 2 교시
기타 분기 제어 구조
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
19
기타 분기 제어 구조

학습 개요
 제어 구조와 함께 자주 사용되는 분기 구조에 대해
알아본다.
 분기 제어문의 종류
– break 문
– continue 문
– goto 문
 이들 분기 제어문의 특징과 문법에 대해 알아본다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
20
기타 분기 제어 구조

break 문
 반복 구조에서 해당 반복 블록을 빠져 나올때 사용
 break 문은 단지 해당 되는 하나의 블록만을 빠져
나오므로 다중 블록을 포함하는 경우 중첩된 수 만큼의
break문 요구
 사용 예>
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
21
기타 분기 제어 구조

continue 문
 반복구조에서 사용되며 반복 제어의 시작으로 위치를
이동 시키는 역할
 break문이 해당 블록을 빠져 나오는데 사용되는데 반해
 continue문은 반복 구조에서 continue문 이후를
수행하지 않고 다음 반복을 수행한다.
 사용 예>
이 반복문 처리 후
sum의 결과 : ?
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
22
기타 분기 제어 구조

goto 문
 무조건적인 분기 명령
 사용 형식





goto문은 [레이블 이름]과 쌍으로 만들어짐
문장에서 goto문을 만나면 해당 레이블로 무조건 분기
하나의 함수 내부에서만 이동 가능
다중 블록을 모두 빠져 나와야 할 경우 자주 이용
기타 상황에서는 자수 이용되지 않음
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
23
기타 분기 제어 구조

goto문
 활용 예
–
–
–
–
–
–
–
–
–
–
01
02
03
04
05
06
07
08
09
10
...
while(1){
for(;;){
if(i>100){
goto EXIT_LOOP;
}
}
}
EXIT_LOOP: printf(...);
...
 다중의 블록구조에서 goto문을 만날때 모든 블록을 빠져
나온다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
24
[기초다지기] 기타 분기 제어 구조 익히기


1. continue와 break문의 활용 예를 익히자.
분석
#include <stdio.h>
void main(){
int i=0,all_count=0,while_count=0;
while(1){
i++;
while문의 반복 101 , 전체 반복 : 51
while_count++;
if(i % 2 == 0){
continue;
}
all_count ++;
if(i > 100)
break;
}
printf("while문의 반복 %d , 전체 반복 : %d \n", while_count,all_count);
}
 while 문의 반복과 while문 안의 문장의 반복 횟수 얻기
 초기 조건 if(i % 2 == 0) 문장에서 i값을 2로 나누어 0 이 되면(짝수일 경우)
continue문을 통해 아래의 문장을 수행하지 않고 while문 의 처음으로 이동
 홀수인 경우 아래의 문장을 반복 수행하고 i값이 100을 넘으면(101일 때)
break문을 통해 이 while문을 종료
 while_ count는 1에서 101까지 101번 수행되고 all_count는 1에서 101까지
홀수일 때 반복되어 총 51번의 반복
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
25
[기초다지기] 기타 분기 제어 구조 익히기

2. goto 문의 구조에 대해 이해하자.
#include <stdio.h>
void main(){
int i=0,sum=0;
1부터 100까지 3의 배수의 합은 1683이다.
loop:
i++;
if(i % 3 == 0){
sum = sum + i;
}
if(i < 100) goto loop;
printf("1부터 100까지 3의 배수의 합은 %d 이다.\n",sum);
}

분석




goto 문을 통해 반복 구조
첫 번째 if문에 의해 3의 배수 값들을 누적
두 번째 if문에서 i<100 즉 100보다 작을 동안 loop 레이블로 분기
결국 1에서 100까지의 3의 배수의 합을 구할 수 있다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
26
예습시간 – 3 교시
반복 제어 구조의 종류
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
27
반복 제어 구조의 종류

학습 개요
 반복 제어 구조를 사용형태에 따라 분류한다.
 분류된 반복 제어구조의 특징을 이해한다.
 문제에 따른 반복 제어 구조 선택 요령을 학습한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
28
반복 제어 구조의 종류

반복 제어 구조의 종류와 선택
종 류
선택 형
계수 반복
수행 전 반복 횟수
미리 결정
이벤트
형반
복
이벤트
형반
복
감시제
어
파일제
어
입력검
증
일반조
건
반복 과정에서
반복횟수 결정
반복 과정에서
반복횟수 결정
설 명
사용되는
구문
반복할 횟수를 미리 알고 있는 형태에서 사용
while문
for문
특수한 값으로 끝나는 임의의 길이를 가진 자료를 얻어
올 때 사용
while문
for문
임의의 크기의 파일을 읽어오기 위해 사용
while문
for문
적정 범위 내의 값이 입력되는지를 검사하여 입력 처리
를 반복하는 대화형 형태에서 사용
do-while문
요구 조건이 만족할 때까지 실행을 반복할 때 사용
while문
for문
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
29
반복 제어 구조의 종류

계수 반복형 제어 구조
 수행 전에 미리 반복횟수를 알고 있으며 계수의 증감을
통해 해당 반복횟수를 결정하는 구조
 for문이나 while문을 통해 주로 구현
 계수 반복형의 3가지 요소
– 계수 인덱스(계수 증감을 기록하는 변수)
– 반복 횟수의 최종 조건
– 계수 인덱스의 증감치
 for문을 활용한 계수 반복형 제어 구조 예
–
–
–
–
–
–
–
–
01 #include <stdio.h>
02 void main(){
03
int index; //❶계수 인덱스
04
printf(" 값
\t
제곱 값 \n");
05
for(index = 1; index < 10 ; index ++){ //❷ 최종 조건 ❸ 증감식
06
printf(" %d
\t
%d \n", index, index * index);
07
}
08 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
30
반복 제어 구조의 종류

계수 반복형 제어 구조
 while문을 이용한 계수 반복형 제어 구조 예
–
–
–
–
–
–
–
–
01 #include <stdio.h>
02 void main(){
03
int index =1; // ❶계수 인덱스
04
printf(" 값
\t
제곱 값 \n");
05
while(index < 10){ // ❷ 최종 조건
06
printf(" %d
\t
%d \n", index, index * index);
07
index++; // ❸ 증감식
08
}
– 09 }
 계수 반복형은 위의 3개의 요소(계수 인덱스, 최종 조건,
증감식)을 포함하고 미리 정의된 횟수만큼 반복하는
구조이다.
 141페이지 프로그램은 계수반복구조로 작성된 N! 계산
프로그램이다. 빈 공간을 완성하여 프로그램을 작성해
보자.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
31
반복 제어 구조의 종류

계수 반복형 제어 구조 예













01 #include <stdio.h>
02 void main(){
03
// 변수 선언
04
int index, data; // 계수 인덱스, 입력
05
int result = 1; // 결과 값
06
// 수치 입력
07
printf("계산을 원하는 값은 : ");
08
scanf("%d", &data);
09
for(index = data; ①_______________
; ②____________){
index > 0
index-10
result *= index;
11
}
12
printf(" %d ! 값은 = %d입니다.\n", data, result);
13 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
32
반복 제어 구조의 종류

이벤트형 반복 제어 구조
 반복 과정 동안 발생되는 이벤트에 의해 반복 횟수 결정
 종류
–
–
–
–
감시
파일
입력
일반
제어형
제어형
검증형
조건형
반복
반복
반복
반복
제어
제어
제어
제어
구조
구조
구조
구조
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
33
반복 제어 구조의 종류

감시 제어형 반복 제어 구조
 반복 구조를 통해 하나 이상의 데이터를 입력 받을 경우
 데이터의 마지막 입력 값 확인 필요
 입력 데이터에 특정 값(데이터의 마지막)을 제공하는
//반 시험 성적에 대한 평균값 계산
제어 구조
#include <stdio.h>
#define SENT 999 // ❶ 감시 제어 값
 구성요소(4가지)
void main(){
–
–
–
–
1)
2)
3)
4)
감시 제어 값 선언
초기값 입력 부분
감시 제어 값 비교
다음 값 입력 부분
//변수 선언
int count =0 ; 총 인원수
int score, sum=0;
printf(" 반학생의 시험 성적을 입력하세요 (종료조건 : 999) :");
scanf("%d",&score); // ❷ 초기값 입력
while(score != SENT){ // ❸ 감시 제어 값 비교
sum += score;
count++;
scanf("%d",&score); // ❹ 다음 값 입력
}
if(count >0){
printf("반학생수는 %d 이고 총점은 %d 이고 \n", count, sum);
printf(" 반 평균은 %f 입니다.\n", score/(float)count);
}
사용 예>
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
34
반복 제어 구조의 종류

파일 제어형 반복 구조
 감시 제어형의 특수 형태로 파일을 대상으로 한다.
 파일은 그 파일의 끝을 알려주는 특수한 값을
가진다.
01 #include <stdio.h>
02 void main(){
 C언어에서 파일의 끝은 03 FILE *fp; // 파일 포인터
04
int status;
// ❶입력 결과 상태
05
int score;
// 입력 점수
EOF로 표시한다.
06
//파일 열기
fp = fopen("data.txt","r");
 파일로부터 데이터를 읽어07
08
if(fp == NULL){
09
printf("file not open !\n");
들일 때 EOF을 만날 때 10
return;
11
}
까지 반복해서 값을 읽어 12 //❷ 파일에서 정수 값 하나 읽기
13
status = fscanf(fp,"%d",&score);
14
while(status != EOF){ // ❸파일 끝 조사
들이는 반복 구조
15
printf("점수 : %d \n",score);
사용 예>
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
16
status = fscanf(fp,"%d",&score); // ❹다음 값 읽기
17
}
18
//파일 닫기
19
fclose(fp);
20 }
35
반복 제어 구조의 종류

입력 검증형 반복 제어 구조
 사용자의 입력에 제한을 가하고 싶을 경우에 이용
– 예>
–
입력 값이 문자여야 한다.
특정 범위에 포함된 값을 입력 해야 한다.
 입력 값이 정확한 값인지를 보장하는 것은 프로그램의
오류 발생을 미연에 방지 가능하다.
 상호 작용 방식으로 값을 받아 들이고 정확한 값이
입력될 때 까지 입력을 반복하는 구조
#include <stdio.h>
 사용 예> 01
02 void main(){
03
04
05
06
07
08
09 }
char c;
do{
printf(" A부터 Z까지의 영문자를 입력하세요 :");
scanf("%c", &chr); // ❶값 입력
}while(chr < 'A' || chr > 'Z'); // ❷값에 대한 조건비교
printf("입력된 값은 %c 입니다.\n", chr);
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
36
반복 제어 구조의 종류

일반 조건형 반복 제어 구조
 사용자의 입력된 값의 결과에 의해 반복 조건을 결정하는
구조
 조건 비교를 위한 증감과정을 포함하지 않고 입력에 의해
반복 횟수가 결정
 사용 예>
01 #include <stdio.h>
02 void main(){
03
int remainder = 100;
04
int use;
05
while(remainder < 0){
06
scanf("%d",&use); // ❶값 입력
07
remainder -= use; // ❷비교 값 수정
08
printf("현재 나머지는 %d 입니다.\n",remainder);
09
}
10 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
37
실습시간 – 1 교시
반복 구조 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
38
반복 구조 활용

학습개요
 반복구조를 이용한 응용 프로그램
 입력 검증 및 값의 변화 처리를 위한 반복 구조 사용
 출력형식 지정을 위한 형식 지정자 확장 형 소개
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
39
반복 구조 활용

자동차 오일 주입일 계산 프로그램
 문제 정의
– 이 프로그램은 자동차 오일을 주입한 후 얼마 후에 다시 오일을
주유해야 하는지를 판단하는 프로그램이다. 사용자는 초기 오일
주입량을 입력하면 3일단위로 오일 소비량, 주행 거리, 그리고
오일 주입 요청 여부를 알려주고 최초의 오일 주입 요청날짜를
다음 오일 주입 일로 출력한다.
 입/출력 조건
– 입력 조건
» 자동차 오일 주입량(단위 : 리터)
– 출력 조건
» 3일 담위로 현재의 날짜, 잔여 오일량, 주행 거리, 오일 보충 여부
표시
» 다음 오일 주입 일자 (최초 오일 보충 일)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
40
반복 구조 활용

자동차 오일 주입일 계산 프로그램
– 출력 예>오일량을 입력하세요(0~500) :90
==========================================
날짜
연료량
주행 거리 연료
보충
==========================================
3
83.644
75
안전
6
77.288
150
안전
9
70.932
225
안전
...
33
20.085
825
안전
36
13.729
900
보충
39
7.373
975
보충
42
1.017
1050
보충
=========================================
다음 주유일자는 36일 후 입니다.
=========================================
– 관련 함수 및 식
»
»
»
»
»
1>
2>
3>
4>
5>
오일 주입량은 0에서부터 500 리터 까지만 가능하다.
하루 운행 거리는 25km이다.
자동차의 연비는 1리터당 11.8km을 운행한다.
잔여 오일량이 20.0리터 이하로 떨어지면 오일 주입 표시
잔여 오일량이 0이하일 때 프로그램을 종료한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
41
반복 구조 활용

자동차 오일 주입일 계산 프로그램
 알고리즘 (플로우차트)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
42
반복 구조 활용

프로그램 작성
 1 단계
– 148페이지의 프로그램을 빈 공간을 포함하여 작성한 후
oil.c이름으로 저장하자.
①. oil < 0 || oil > 500
②. use = DISTANCE/RATIO;
③. remainder > 0
④. remainder > 20.0
 2 단계
– 정상적으로 컴파일이 완료된 후 다음과 같은 입력에 대한 출력
결과를 작성해 보자.
» 입력 값 : 45 리터
» 입력 값 : 345 리터
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
43
반복 구조 활용

자릿수 지정자
 printf()함수에서 사용되는 형식 지정자 문자를 확장하여
출력 형식 지정 (최소 필드 자릿수 지정)
 형식
– %[-][최소필드의 크기][.][소숫점이하 자릿수] 형식지정자타입
 설명
– 1) []에 포함된 내용은 생략 가능하다.
– 2) 모든 수치데이터는 우측정렬 되어 출력되나 - 부호를 적을 경우
좌측정렬 된다.
– 3) 정수형 형식 지정자는 소숫점 이하 자릿수를 가지지 않는다.
– 4) 실수값의 소숫점 이하 자릿수 값은 자동적으로 반올림된다.
– 5) 출력될 값이 최소 필드의 크기보다 작을 경우 남은 경우 공백으로
채워지고 클 경우 자동적으로 출력될 값의 크기로 확장된다.
– 6) 실수형 형식 지정자에 대해 소숫점이하 자릿수를 부여할 수 있다.
– 7) 최소필드 크기값을 0으로 시작할 경우 남은 자릿수는 0으로 채워진다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
44
반복 구조 활용

자릿수 지정자
 사용 예
값
형식지정
자
출력 결과
1
%5d
2
3
%-4d
1
2
3
%07d
0
0
0
0
1
12345
%3d
1
2
3
4
5
3.1415914
%9.4f
123.2345
%.2f
"Hi there"
%10s
123
2
3
H
5자리에 우측 정렬
4자리에 좌측 정렬
3
1
설 명
.
.
i
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
2
빈 공간 0으로 할당
3
값에 의해 5자리 확장
1
2
4
1
9자리 소수점이하 4자리
6
소수점 이하 자릿수만 지정
3
t
h
e
r
e
10자리 우측 정렬
45
실습시간 – 2 교시
반복 구조 응용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
46
반복 구조 응용

학습개요
 문제 분석을 통한 반복 구조 활용
 최대 공약수 계산 프로그램 작성
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
47
반복 구조 응용

두 수의 최대공약수 계산 프로그램
 문제 정의
– 두 정수의 최대 공약수를 계산하는 프로그램을 작성하시오. 이
최대 공약수는 두 정수의 공통요소의 곱으로 나타낸다. 아래에
제시된 알고리즘을 이용하여 프로그램을 완성해 보시오.
 입/출력 조건
– 입력 조건
» 최대 공약수 계산에 사용되는 두 정수 값
– 출력 조건
» 두 정수의 최대 공약수
 관련 함수 및 식
– 최대 공약수 = 두 정수의 공통요소의 곱
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
48
반복 구조 응용

두 수의 최대공약수 계산 프로그램
 알고리즘(또는 플로우차트)
– 1) 두수 중 하나를 다른 하나로 나누고 나머지를 얻어온다.
나머지가 0일 경우 나누었던 수가 최대 공약수가 된다.
– 2) 나머지가 0이 아닐 경우 나머지를 이용해 이전단계에 사용한
제수를 피제수로 하여 나눈다. 나머지가 0이면 그 제수가
최대공약수 이고 그렇지 않을 경우 2단계를 반복한다.
– 3) 최종 나눗셈의 나머지가 0일 때 그 제수가 최대공약수가 된다.
 적용 예>
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
49
반복 구조 응용

프로그램 작성
 1 단계
– 158 페이지의 프로그램을 빈칸을 채워 넣어 작성하자.
①. m % n
②. break
③. remainder
④. while(1)
 2 단계
– 정상적으로 컴파일될때 아래의 값을 입력으로 하여 출력 결과를
작성하자.
– 입력 조건
» 입력된 두 수 : 235, 435
» 입력된 두 수 : 234, 292
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
50
반복(Loop) 제어 구조
The End.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
51