최신 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