Transcript C 08

2007 1학기
08 반복문
1
반복문
 제어문
 프로그램의 실행 순서는 “위에서 아래로 한 문장씩” 순차적으로
실행
 반복문
 프로그램에서는 일정한 규칙의 처리를 반복적으로 처리하는
모듈이 자주 필요, 이를 위한 구문이 반복문
 제어문의 한 종류가 반복문
 반복문 종류
반복문의 종류
for
while
do while
2
구문
for(초기화; 조건검사; 증감연산)
{
for문 몸체(body);
};
while(조건검사)
{
while문 몸체(body);
};
do
{
do while문 몸체(body);
} while(조검검사);
특징
일정한 반복 횟수를
이용하는
반복문에 적합.
구문이 간단하며,
검사부분이
처음에 있음.
반복 몸체를 1번은
실행하며,
검사부분이 뒤에
있음.
Perfect C
for 문
 반복문 for 구조
 for 다음에 괄호() 구성
• 초기화(Initilization), 조건검사(conditional expression),
증감연산(increment)의 세 부분으로 구성되고
• 이를 세미콜론(;) 으로 구분
3
Perfect C
for 문의 실행순서
4
Perfect C
문자 *를 한 줄에 5개씩 5줄 출력
 정수형 변수 i의 초기값을 0으로 지정해서 5보다 작을 때까지, 증감연산
부분에 증가자(i++)를 이용하여 출력문을 출력
5
Perfect C
증감 부분의 이해
 for 문의 증간연산 부분
 위의 for 문과 아래 예문은 같은 기능을 수행할까?
• 물론이다.
for (i = 0; i < 5; i = i +1)
{
printf("*****\n");
}
 증감연산 부분에서 i++를 i=i+1로 한 것은 프로그램 기능에 차이가 없다.
• 연산식 i++는 i=i+1을 의미하기 때문
 그렇다면 아래 예문은 어떠한가?
for (i = 0; i < 5; ++i)
{
printf("*****\n");
}
 위 예문도 같은 결과를 처리
6
Perfect C
for 문이 반복되는 과정
 1에서 10까지의 합을 구하는 for 문을 작성
sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;
 이를 for 문으로 바꿔보자.
 처음에 합이 저장될 변수 sum에 0을 대입하고, 반복 횟수에 대한 제한에 이용
될 i를 1로 초기화
1
2
3
실행순서
 조건검사는 10번을 변수 i 값 검사 (i<=10) 검사 결과 몸체실행(sum+=i) 증감연산(i++)
(sum = sum + i)
(i = i+1)
반복해야 하므로
1(초기 값)
1 <= 10
sum = 0+1
1+1
참
i<=10이고
2
2 <= 10
sum = 0+1+2
2+1
참
증감연산은 i 값을
3
3 <= 10
sum = 0+1+2+3
3+1
참
하나씩 증가하도록
sum = 0+ … +4
4
4 <= 10
4+1
참
i++로 구성
sum = 0;
for (i = 1; i <= 10; i++)
{
sum += i;
}
7
5
5 <= 10
참
sum = 0+ … +5
5+1
6
6 <= 10
참
sum = 0+ … +6
6+1
7
7 <= 10
참
sum = 0+ … +7
7+1
8
8 <= 10
참
sum = 0+ … +8
8+1
9
9 <= 10
참
sum = 0+ … +9
9+1
10
10 <= 10
참
sum = 0+ … +10
11
11 <= 10
거짓
10+1
Perfect C
반복문 while 문
 while 문 구조
 조건검사 부분인 (expression)을 while 다음에 괄호로 구성
 while 문 실행순서
 조건문인 expression 을 검사하여 0이 아니면(참) 반복문의 몸체에
해당하는 문장이나 블록을 실행
 몸체를 실행하면 다시 조건검사를 조사하여 1의 과정을 다시 실행
 조건검사가 거짓이면 while 문장을 종료
8
Perfect C
1부터 n까지의 곱
 1에서 10까지의 곱을 구하는 while 문을 작성
mult = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10;
 이를 while 문으로 바꿔보자.
 곱한 결과를 저장할 변수 mult에 초기값 1을 대입하고,
 while 문의 조건식으로 (i <= 10)을 지정
 while 문 몸체에 곱할 축약 대입연산자를 이용하고 조건검사에
이용할 i 값을 하나 증가
mult = 1;
i = 1;
while (i <= 10)
{
mult *= i;
i++;
}
9
mult = 1;
i = 1;
while (i <= 10)
{
mult *= i++;
}
Perfect C
무한 반복
 for 문에서 조건검사 부분이
없다면?
 조건검사를 무시하고 계속적으로
반복문을 수행
• 아래 구문은 반복문이 종료되지 않는
무한반복(indefinite loop)을 실행
 while() 문에서의 조건검사 부분
 옆 while 구문은 컴파일 시간에 에러가
발생
• while 구문에서 조건검사 부분은
생략할 수 없음
 위 while 구문으로 무한반복문을
만들려면 다음 가능
• 조건 부문을 참으로 지정
10
for ( ; ; )
{
printf("*****\n");
}
while ( )
{
printf("*****\n");
}
while ( 1 )
{
printf("*****\n");
}
Perfect C
do while
 문장 구조
 do while 문은 while 문과 유사하나 검사부분이 몸체의 마지막에
있는 것이 차이
 do while 문은 조건검사를 나중에 하는 반복문에 적당
 몸체 부분에 특별한 구문이 없는 경우, 반복문 do while 의 몸체는
적어도 한번은 실행
11
Perfect C
10진수 자릿수 반대로
 정수 125에서
각각의 자릿수 1,
2, 5를 그 순서를
반대로 분리해
내는 방법
 나머지
연산자 %를
이용하면 항상
단 단위
자릿수의 수를
알 수 있음
1
실행순서
2
수
수 % 10
결과
수 / 10
결과
125
125 % 10
5
125 / 10
12
12
12 % 10
2
12 / 10
1
1
1 % 10
1
1 / 10
0
0
12
Perfect C
예제 소스
 dowhilere
verse.c
 입력한
정수를
반대로
출력하는
프로그램을
작성
13
Perfect C
반복문 내부의 반복문
 nestedfor.c
14
Perfect C
콤마 연산자의 이용
 초기화와 증감부분에 여러 개의 문장 기술
15
Perfect C
break와 continue
 break
 세 종류 반복문(for, while,
do while)에서 무조건
반복문을 종료하려면
break 문을 이용
 반복문에서 break의
역할은 반복을 종료하고
반복문 다음 문장으로
실행 흐름을 바꾸는 역할
 continue
 continue 문은 반복문을 완전히 종료하는 것이 아니라, continue 문이
있는 몸체의 continue 문 아래 부분은 실행되지 않고, 다음 반복을
계속하는 문장
16
Perfect C
프로그래밍 실습
 프로그램 목적
 1부터 n까지의 소수(prime number)를 출력하는 프로그램을 작성
 정수를 하나 입력 받아 1부터 n까지의 소수(prime number)를 한
줄에 5개씩 출력하는 프로그램
 구현
 하나의 정수 number가 소수임을 알려면 2부터 number-1까지의
모든 정수에 대하여 나누어 떨어지지 않음을 보이면 된다.
• 즉 5가 소수임을 보이는 방법은 다음과 같이 2부터 4까지 5를 나누어
봄
17
나누는 수(i)
수%i
결과
2
5 % 2 == 1
!=0
3
5 % 3 == 2
!=0
4
5 % 4 == 1
!=0
Perfect C
프로그래밍 실습 구현
 구현
 이 반복문은 몸체가 없는 for 문으로, for 문을 빠져 나오는 경우는 두
가지 경우
• 하나는 중간의 수로 나누어져 나오는 경우이고,
• 나머지는 계속 반복문을 반복하여 자기 자신으로 나누어진 경우
 이 두 가지 중, 후자가 소수임을 나타냄
18
Perfect C
소스와 결과
19
Perfect C
중간점검



20
모든 for 문을 while 문으로 바꿀 수 있겠는가? 바꿀 수 있다면 어떻게 수정이
가능한가?
for (문장1; 문장2; 문장4) {
문장3;
}
문장1;
while ( 문장2 ) {
문장3;
문장4;
}
표준입력으로 받은 정수를 출력하는 과정을 반복하는 구문 do while 문을 이용하여
작성하시오. 다만 0을 입력하면 프로그램을 종료하도록 한다.
99에서 1까지 홀수 정수를 출력
for (x=99; x >=1; x-=2)
printf(“%d\n”, x);
Perfect C
중간점검

다음 반복문의 수행 후, 변수 sum에는 무슨 값이 저장되는가?
…
sum = 0;
for ( i = 1; i <= 100; )
sum += i++;
…
sum = 0;
for ( i = 1; i <= 100; )
sum += ++i;
…
sum = 0;
for ( i = 0; i < 100; )
sum += ++i;
21
Perfect C
중간점검

다음 반복문의 수행 후, 변수 sum에는 무슨 값이 저장되는가?
…
sum = 0;
for ( i = 1; i <= 100; )
sum += ++i;
…
sum = 0;
for ( i = 1; i <= 100; sum += ++i) ;
…

어떤 결과?
for (x=99; x >=1; x -= 2)
printf(“%d\n”, x);
22
Perfect C
이해점검










23
C 언어에서 제공하는 3가지 반복문은 ( ), ( ), ( )(이)다.
반복문은 모두 반복문의 계속실행을 검사하는 조건검사 부분과 반복 처리를
위한 문장으로 구성되는 ( 몸체 )(으)로 구성된다.
반복문에서 반복의 몸체가 여러 문장으로 구성되면 이를 중괄호를 이용한
( 블록 )(으)로 구성해야 한다.
반복문 for 구조는 for 다음에 괄호( ) 부분이 초기화(Initialization),
조건검사(Conditional expression), 증감연산(Increment)의 세
부분으로 구성되고 이를 ( )(으)로 구분한다.
반복 구조에서 반복을 종료하는 문장은 ( ) 문이다.
반복문 세 종류 중에서 반복 조건검사를 몸체를 실행한 후 나중에 검사하는
문장은 (do while) 문이다.
for 문을 for (1;2;3) {4};으로 표현하면 가장 나중에 실행하는 문장은
( )번 문장이다.
반복의 제어 횟수를 이용한 구조에 가장 적합한 반복문은 ( ) 문이다.
( ) 문은 반복문을 완전히 종료하는 것이 아니라, 이 문장 이후의 몸체
부분은 실행되지 않고, 다음 반복을 계속하는 문장이다.
반복문 for 문에서 초기화와 증감부분에 ( ) 연산자를 이용하여 여러 개의
문장을 기술할 수 있다.
Perfect C
프로그래밍 과제
3.
섭씨온도가 0부터 200까지 20씩 증가, 이 때의 화씨온도를 구하여 출력하는데,
온도는 모두 정수 형태로 출력
for(c =0; c <=200; c += 20)
5. 다음을 출력하는 프로그램을 for 문을 이용하여 작성하시오.
0
10
210
3210
43210
543210
for (i = 0; i <= MAX; i++)
{
for (j = MAX; j >= 0; j--)
{
if (j > i) putchar(' ');
else printf("%d", j);
}
putchar('\n');
}
24
Perfect C
프로그래밍 과제
6. 다음과 같이 0부터 5까지의 수로 삼각형을 만들어 출력하는 프로그램을 for
문을 이용하여 작성하시오.
0
101
21012
3210123
432101234
54321012345
for (i = 0; i <= MAX; i++)
{
for (j = MAX; j >= -MAX; j--)
{
if (abs(j) > i) putchar(' ');
else printf("%d", abs(j));
}
putchar('\n');
}
25
Perfect C
프로그래밍 과제
for (i = 'z'; i >= 'a'; i--) {
//변수 j를 이용하여 한 행에서 출력해야 할 알파벳을 선정
for (j = 'a'; j <= 'z'; j++)
(i > j) ? putchar(' ') : putchar(j);
putchar('\n');
}
실습 : 본문, 프로그래밍 과제 1~10
과제 : 다음주 월요일(4/16) 까지 제출할 것
- 8장 프로그래밍 과제 2, 6, 8, 10
- 소스코드와 출력화면 캡처한 그림을 워드파일로 작성하여 제출할 것
26
Perfect C