쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express Slide 1 (of 27)
반복문 Q) 반복 구조는 왜 필요한가? A) 같은 처리 과정을 되풀이하는 것이 필요하기 때문이다. 학생 30명의 평균 성적을 구하려면 같은 과정을 30번 반복하여야 한다. Slide 2 (of 27)
while 문 주어진 조건이 만족되는 동안 문장들을 반복 실행한다. while( 조건식 ) 문장; Slide 3 (of 27)
반복문의 실행 과정 Slide 4 (of 27)
반복문의 실행 과정 반복횟수 i의 값 i< 3 반복여부 첫번째 반복(시작위치) 참(1) 반복 두번째 반복(시작위치) 1 참(1) 반복 두번째 반복(시작위치) 1 세번째 반복(시작위치) 2 네번째 반복(시작위치) 3 거짓(0) 중지 Slide 5 (of 27)
예제 // while 문을 이용한 구구단 출력 프로그램 #include <stdio.h> int main(void) { int n; int i = 1; printf("구구단 중에서 출력하고 싶은 단을 입력하시오: "); scanf("%d", &n); while (i <= 9) { printf("%d*%d = %d \n", n, i, n*i); i++; } return 0; } 구구단 중에서 출력하고 싶은 단을 입력하시오: 9 9*1 = 9 9*2 = 18 9*3 = 27 .... 9*9 = 81 Slide 6 (of 27)
예제 #include <stdio.h> int main(void) { int i, n, sum; // 변수 선언 printf("정수를 입력하시오:"); // 입력 안내 메시지 출력 scanf("%d", &n); // 정수값 입력 i = 1; // 변수 초기화 sum = 0; while(i <= n) { sum += i; // sum = sum + i;와 같다. i++; // i = i + 1과 같다. } printf("1부터 %d까지의 합은 %d입니다\n", n, sum); return 0; } 정수를 입력하시오: 3 1부터 3까지의 합은 6입니다 Slide 7 (of 27)
do...while문 반복 조건을 루프의 끝에서 검사 do 문장 while(조건) ① 문장들이 실행된다. 문장 while(조건) ① 문장들이 실행된다. ② 조건식이 계산된다. ③ 결과가 참이면 ①로 돌아간다. ④ 결과가 거짓이면 종료된다. Slide 8 (of 27)
예제 // do..while 문을 이용한 메뉴 1---새로만들기 #include <stdio.h> 2---파일열기 int main(void) { int i = 0; do { printf("1---새로만들기\n"); printf("2---파일열기\n"); printf("3---파일닫기\n"); printf("하나를 선택하시요.\n"); scanf("%d", &i); } while(i < 1 || i > 3); printf("선택된 메뉴=%d\n",i); return 0; } 1---새로만들기 2---파일열기 3---파일닫기 하나를 선택하시요. 1 선택된 메뉴=1 Slide 9 (of 27)
글자 게임 예제 // 반복을 이용한 글자 게임 프로그램 #include <stdio.h> // 반복을 이용한 글자 게임 프로그램 #include <stdio.h> int main(void) { char answer = 'm' char guess; int tries = 0; do { printf("정답을 추측하여 보시오: "); scanf(" %c", &guess); tries++; if( guess > answer ) printf("제시한 문자의 아스키 코드 값이 높습니다.\n"); if( guess < answer ) printf("제시한 문자의 아스키 코드값이 낮습니다.\n"); } while(guess != answer); printf("축하합니다. 시도횟수=%d \n", tries); return 0; } 정답을 추측하여 보시오: a 제시한 문자의 아스키 코드값이 낮습니다. 정답을 추측하여 보시오: s 제시한 문자의 아스키 코드값이 높습니다. 정답을 추측하여 보시오: b 정답을 추측하여 보시오: z 정답을 추측하여 보시오: m 축하합니다. 시도횟수=5 Slide 10 (of 27)
for 루프 정해진 횟수만큼 반복하는 구조 Slide 11 (of 27)
for 문의 구조 for ( 초기화; 조건식; 증감식) 문장; ① 초기화를 실행한다. 문장; ① 초기화를 실행한다. ② 반복 조건을 나타내는 조건식을 계산한다. ③ 수식의 값이 거짓이면 for 문의 실행이 종료된다. ④ 수식의 값이 참이면 문장이 실행된다. ⑤ 증감을 실행하고 ②로 돌아간다. Slide 12 (of 27)
for 문의 구조 int i; for(i = 0; i < 10; i++) printf("Hello World!\n"); Slide 13 (of 27)
예제 // 반복을 이용한 정수합 프로그램 #include <stdio.h> int main(void) { // 반복을 이용한 정수합 프로그램 #include <stdio.h> int main(void) { int i, sum; sum = 0; for(i = 1;i <= 10; i++) sum += i; // sum = sum + i;와 같음 printf("1부터 10까지의 정수의 합= %d\n",sum); return 0; } 1부터 10까지의 정수의 합 = 55 Slide 14 (of 27)
예제 // 반복을 이용한 세제곱값구하기 정수를 입력하시요:5 #include <stdio.h> int main(void) { int i, n; printf("정수를 입력하시요:"); scanf("%d", &n); printf("====================\n"); printf(" i i의 세제곱\n"); for(i = 1;i <= n; i++) printf("%5d %5d\n", i, i*i*i); return 0; } 정수를 입력하시요:5 ==================== i i의 세제곱 1 1 2 8 3 27 4 64 5 125 Slide 15 (of 27)
예제 // 반복을 이용한 팩토리얼 구하기 #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; } 정수를 입력하시요: 10 10!은 3628800입니다. Slide 16 (of 27)
while 루프와 for 루프와의 관계 Slide 17 (of 27)
중첩 반복문 중첩 반복문(nested loop): 반복문 안에 다른 반복문이 위치 Slide 18 (of 27)
예제 // 중첩 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; } ********** Slide 19 (of 27)
break 문 break 문은 반복 루프를 빠져 나오는데 사용된다. Slide 20 (of 27)
예제 // break를 이용하여 무한루프를 탈출한다. #include <stdio.h> #include <math.h> int main(void) { double v; while(1) { printf("실수값을 입력하시오: "); scanf("%lf", &v); if( v < 0.0 ) break; printf("%f의 제곱근은 %f입니다.\n", v, sqrt(v)); } return 0; } 실수값을 입력하시오: 9.0 9.000000의 제곱근은 3.000000입니다. 실수값을 입력하시오: 12.0 12.000000의 제곱근은 3.464102입니다. 실수값을 입력하시오: 25.0 25.000000의 제곱근은 5.000000입니다. 실수값을 입력하시오: -1 Slide 21 (of 27)
goto문의 사용 #include <stdio.h> int main(void) { int x, y; for(y = 1; y < 10000; y++) { for(x = 1; x < 50; x++) { if( _kbhit() ) goto OUT; printf("*"); } printf("\n"); } OUT: return 0; } Slide 22 (of 27)
continue 문 현재의 반복을 중단하고 다음 반복을 시작하게 한다. Slide 23 (of 27)
예제 sum = 245 Slide 24 (of 27)
예제 // 소문자를 대문자로 변경한다. #include <stdio.h> 소문자를 입력하시오: a int main(void) { char letter; while(1) { printf("소문자를 입력하시오: "); scanf(" %c", &letter); if( letter == 'Q' ) break ; if( letter < 'a' || letter > 'z' ) continue ; letter -= 32; printf("변환된 대문자는 %c입니다.\n", letter); } return 0; } 소문자를 입력하시오: a 변환된 대문자는 A입니다. 소문자를 입력하시오: b 변환된 대문자는 B입니다. 소문자를 입력하시오: c 변환된 대문자는 C입니다. 소문자를 입력하시오: Q Slide 25 (of 27)
예제 #include <stdio.h> #define START_DAY 3 // 첫번째 날이 수요일 #define DAYS_OF_MONTH 31 // 달의 일수 int main(void) { int day, date; printf("=====================\n"); printf("일 월 화 수 목 금 토\n"); printf("=====================\n"); for(day = 0; day < START_DAY ; day++) // 월요일부터 수요일까지 printf(" "); // 공백 출력 for(date = 1; date <= DAYS_OF_MONTH ; date++) { if( day == 7 ) { day = 0; // 일요일이면 줄바꿈을 출력 printf("\n"); } day++; printf("%2d ", date); // 날을 출력한다. } printf("\n=====================\n"); return 0; } Slide 26 (of 27)
Q & A Slide 27 (of 27)