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