제 4 장 제어구조. 4.1 제어문 (control statements) 의 개념 4.2 택일문 (alternative statements) 4.3 반복문 (iterative statements) 4.4 분기문 (branching statements). 4.1 제어문의 개념. 컴퓨터 프로그램의 제어 컴퓨터 프로그램은 적어도 하나 이상의 문장들 (statements) 의 유기적인 구성을 통해 목적하는 특정작업을 수행 묵시적인 순차 제어 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
switch (x+y) { case 100: z='A'; case 200: z='B'; case 300: z='C'; default: z=' '; }
• switch-case 문의 예 (break 문을 사용한 예 )
int x, y; char z; ……… switch(x+y) { case 100: z='A'; break; case 200: z='B'; break; case 300: z='C'; break; default: z=' '; }
1515Yes CYes C 제제 44 장 제어구조장 제어구조
4.2 택일문 ( 계속 ) 예제 4.8
• 예제 4.7 을 if 문 대신 switch-case 문을 이용하여 작성하라 . ☑ 프로그램
#include <stdio.h>main(void){ char op;
int a, b; printf("Enter an expression : "); scanf("%d%c%d", &a, &op, &b); switch(op) { case '+': printf("%d+%d=%d\n", a, b, a+b); break; case '-': printf("%d-%d=%d\n", a, b, a-b); break; case '*': printf("%d*%d=%d\n", a, b, a*b); break; case '/': printf("%d/%d=%d\n", a, b, a/b); break; default: printf("No such operator %c\n", op); }}☑ 입력Enter an expression : 5+10☑ 실행결과5+10=15
1616Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문
반복문– 반복문 (iterative statements) 은 명령문 집단을 반복 실행하기 위해 사용한
다 . 반복 구조에는 반복을 계속할 것인지를 검사하는 반복조건이 있어야 한다 .
– C 언어에서 제공하는 반복문에는 while 문 , for 문 , do-while 문이 있다 .
4.3.1 while 문 문법■
statement1;while(test_expression)
statement2;
statement3;
statement(s)1
statement(s)2
statement(s)3
test_expressiontrue
false
while loop
1717Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.10• while 문의 사용 예(1) 옳은 예 1
while (i++ < n) factorial *= i;
(2) 옳은 예 2 while ((c=getchar( )) ! = EOF) { if ('a'<= c && c <= 'z') ++lower_case_letter_cnt; ++total_cnt; }
(3) 틀린 예 1 while (++i < 1000) do { /* do 가 포함되어서는 안 됨 */ j=2*i+3; printf("\n%d", j); }
(4) 틀린 예 2 while i++ < n factorial *= i;
1818Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.11• 1 부터 계속 더하여 그 합이 100미만일 때까지 반복 계산하는
프로그램을 작성하라 . ☑ 프로그램
#include <stdio.h>void main(){ int i=0, sum=0; while(sum < 100) { sum += i; i++; } sum -= --i; printf("i = %d sum = %d\n", i, sum);}
☑ 실행결과i = 14 sum = 91
1919Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.12 예제☑ 프로그램
#include <stdio.h>#include <conio.h>void main(){ char c, d; int a, b; printf("\n 연산을 하시겠습니까 ?(y or n)\n"); while((d=getche())!='n') { printf("\n<< 어떤 연산을 원하세요 ? EX) + - * />>\n"); printf(" 연산자 선택 :"); scanf("%c", &c); while(c!='+' && c!='-' && c!= '*' && c!='/') { printf(" 연산자를 잘못 입력하였습니다 .\ 다시 입력하세요 \n"); printf(" 연산자 재선택 :"); c=getchar(); scanf("%c", &c); } printf("\n값을 입력하세요 연산 예 :A %c B\n", c); printf("A="); scanf ("%d", &a); printf("B="); scanf("%d", &b);
while(c=='/' && b==0) { printf("0 으로 나누었습니다 다시 입력하세요 !\n"); printf("\n B값을 0 이 아닌 값으로 다시 \ 입력하세요 !\n"); printf("B="); scanf("%d", &b); } switch(c) {
case '+': printf("%d+%d=%d\n",a,b,a+b); break; case '-': printf("%d-%d=%d\n",a,b,a-b); break; case '*': printf("%d*%d=%d\n",a,b,a*b); break; case '/': printf("%d/%d=%f\n",a,b,(float)a/(float)b); break; } printf(" 연산을 계속 하시겠습니까 ?(y or n)\n"); d=getchar(); } getch();} 입력ꁾ
연산을 하시겠습니까 ?(y or n)y<< 어떤 연산을 원하세요 ? EX) + - * />>연산자 선택 :+값을 입력하세요 연산 예 :A + BA=10B=20 실행결과ꁼ
10+20=30
2020Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
4.3.2 for 문• for 문은 반복횟수를 미리 알 수 있는 경우에 사용되는 while 문의 특수한
(1) 옳은 예 for (i=1, factorial=1; i<=n; ++i) factorial *= i; for (j=2; k%j==0; ++j) { printf("\n%d is a divisor of %d", j, k); sum += k; }
(2) 틀린 예 for (i=0, i<n, i+=3) /* 세미콜론이 필요함 */ sum += i;
2424Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.15 1 부터 10 까지의 합 계산 (1)
(1) 방법 1 int i, sum; sum=0; for (i=1; i<=10; ++i) sum += i;
(2) 방법 2 int i, sum; i=1; sum=0; for(; i<=10; ++i) sum += i;
(3) 방법 3 int i, sum; i=1; sum=0; for(; i<=10; ) sum += i++;
※(1), (2), (3) 은 모두 같은 결과를 제공한다 .
2525Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.16 1 부터 10 까지의 합 계산 (2)
(1) 방법 1 int i, sum; for (sum=0, i=1; i<=10; sum+=i, ++i) ; /* 공문 */ printf("\n%d', sum);
(2) 방법 2 int i, sum; for (sum=0, i=1; i<=10; ++i) sum += i;
printf("\n%d", sum);
※(1), (2) 는 모두 같은 결과를 제공한다 .
2626Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.17 1+2+3+4+5+6+7+8+9+10 을 계산하는 프로그램
☑ 프로그램#include <stdio.h>#include <conio.h>void main(){ int i, sum=0; for(i=1; i<=10; i++) { sum = sum+i; // sum += i 와 같은 식 } // for 문의 목표문이 한 문장일 경우는 {} 를 생략해도 됨 . printf("sum = %d \n", sum); getch();} 실행결과ꁼ
#include <stdio.h>#include <conio.h>void main(){ int i; printf("/* ASCII 코드 값 */ \n"); for(i=32; i<128; i++) { if(i%8 ==0) /* i 가 8 의 배수인 경우 한 줄 띄운다 */ printf("\n"); /* % 는 모튤연산자로서 8 로 나눈 \ 나머지 */ printf("%4d %c", i, i);/* i 를 10진수 (%4d) 와 문자 (%c)\ 로 출력 */ }}
3131Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.26 입력된 문자의 아스키코드를 출력하는 프로그램을 작성하라 .( 단 , Ctrl+Z 키를 누르면 루프를 빠져나올 것 .)
{ int i=0, sum=0; do { i++; sum += i*i; }while(sum<=5000); printf("i=%d sum=%d\n", i, sum);} 실행결과ꁼ
i=14 sum=1015
3636Yes CYes C 제제 44 장 제어구조장 제어구조
4.3 반복문 ( 계속 )
예제 4.35 무한 루프의 예
(1) while(1) { /* 다른 프로그램 문장들 */ }
(2) do { /* 다른 프로그램 문장들 */ }while(1);
(3) for( ; ; ) { /* 다른 프로그램 문장들 */ }
3737Yes CYes C 제제 44 장 제어구조장 제어구조
4.4 분기문
– 분기문 (branching statements) 은 제어의 흐름을 다른 곳으로 이동하는 문장으로서 break, continue, return 그리고 goto 가 있다 .
4.4.1 break 문• break 문은 반복문이나 switch-case 문에서 완전히 빠져 나오고자 할
때 사용– 예컨대 , 반복문에서 조건에 관계없이 즉시 반복과정으로부터 이탈하고자
할 경우에는 break 문을 사용할 수 있다 . – break 문이 실행되면 , 자신이 포함된 코드 블록으로부터 실행흐름을 벗어나게 한다 .
가령 , 블록 내에 블록이 내포된 중첩 블록 구조에서 break 문이 실행되면 모든 블록으로부터 단 한번에 빠져나오는 것이 아니라 자신이 포함된 하나의 블록만을 벗어하는 것이다 .
다시 말해서 , 반복문이 중첩되어 있으면 break 문은 해당 반복 블록만을 벗어남에 따라 중첩된 반복 블록을 완전히 벗어나지 못한다 .
• 예제 4.36for(i=0; i<10; i++) /* for 블록 -1 */ { for(j=0; j<10; j++) /* for 블록 -2 */ { if (k=0) { break; /* break 문은 for 블록 -2 의 실행을 중단하고 */ ........ /* 외부 for 블록 -1 로 제어를 옮긴다 . */ } printf("%d",sum"); }}
3838Yes CYes C 제제 44 장 제어구조장 제어구조
4.4 분기문 ( 계속 )
예제 4.37
/*else-if 문을 사용한 경우 */if(ch == 'A') statement1;else if( ch == 'B') statement2;else statement3;/* switch-case 문을 사용한 경우 */switch(ch){ case 'A': statement1; break; case 'B': statement2; break; default: statement3;}
3939Yes CYes C 제제 44 장 제어구조장 제어구조
4.4 분기문 ( 계속 )
4.4.2 continue 문 continue 문은 반복블록을 실행하는 도중에 만나면 , 후속 명령문을
실행하지 않고 , 반복문의 다음 과정으로 순서를 넘긴다 .• continue 문은 switch-case 문에서는 사용되지 않고 반복구조에서만 국한되어
사용되며 , • switch-case 구조처럼 반복구조에서 완전히 빠져 나오는 것이 아니라 현재
반복중인 것만 중단하고 다음 반복 순서로 계속하기 위해 사용된다 . • 통상 , continue 문은 C 언어 문법상에는 제공되고 있지만 if 문으로 대치할 수
있기 때문에 가능하면 사용하지 말 것을 권장하고 있다 .
예제 4.38
for(i=0; i<10; i++) /* for 블록 -1 */{ for (j=0; j<10; j++) /* for 블록 -2 */ { if (k=10) continue; /*continue 문은 ix=ix+j+i 을 실행하지 않고 ,*/ ix=ix+j+i; /* for 블록 -2 로 실행순서를 옮긴다 .*/ } printf("%d", ix);}
4040Yes CYes C 제제 44 장 제어구조장 제어구조
4.4 분기문 ( 계속 ) 예제 4.39
☑ 프로그램 /* 알파벳 출력 프로그램 */#include <stdio.h>#include <conio.h>main(){ int i, ch, j, k; // ch: 선택 . i,j,k: 카운터 while(1) // 무한루프 , break 를 만나면 빠져나옴
{ // 출력시 화면 지우기 printf("\n\t****알파벳 출력 프로그램 ****\n");// 출력형식 printf("\t1. 알파벳 출력하기 \n"); printf("\t2. 마치기 !!\n"); printf("\t******************************\n"); printf("\t 당신이 원하는 작업 번호는 ? "); scanf("%d",&ch); // 사용자가 원하는 번호를 입력받음 if(ch==1) { for(i=65; i<=90; i++) // 정수 65 부터 90 까지가 { printf("\t"); for(j=i; j<=90; j++) printf("%2c", j); for(k=65; k<i; k++) printf("%2c", k); printf("\n"); } getch(); } if(ch==2) { break; } continue; } getch(); return 0;}☑ 입력 *****알파벳 출력 프로그램 ***** 1. 알파벳 출력하기 2. 마치기 !! ****************************** 당신이 원하는 작업 번호는 ? 1
4141Yes CYes C 제제 44 장 제어구조장 제어구조
4.4 분기문 ( 계속 )
4.4.3 goto 문• goto 문은 빈번한 사용을 권하지 않는 제어문이며 , • goto 문을 사용하지 않고도 프로그램을 할 수 있다 .
goto 문은 지시된 레이블 (label) 이 있는 곳으로 무조건 분기시킨다 . • 이때 , goto 문은 그에 대응하는 레이블 이름 (label_name) 을 반드시
goto 문이 유용하다고 할 수 있는 한 경우– 다음과 같이 중첩된 반복 구조로부터 단 한번에 탈출하기 위한 경우일 뿐이다 .for( ...) for( ...) { .... if( troublesome) goto error /* 오류가 발생했음을 확인 */ } .....error : message of error /* 오류 발생된 경우 실제로 실행할 문장 */
null 명령문 : 세미콜론 (;) 만으로 구성되는 명령문으로서 실행문이 없는 빈(null) 명령문
• while 문 , for 문 및 do-while 문과 같은 반복문에서 실행문을 요구하지 않고 , 다만 시간의 지연을 필요로 하는 경우에 빈 명령문을 작성할 수 있다 .
for(i=0; i<32000; i++) ;
• goto 문에 대응하는 레이블 문의 위치에 실행문을 필요로 하지 않을 경우 , 빈 명령문으로 작성할 수 있고 , 복합문의 경우도 빈 명령문으로 구성할 수 있다 .
4545Yes CYes C 제제 44 장 제어구조장 제어구조
4.4 분기문 ( 계속 )
4.4.4 return 문 return 문은 반환식의 유무에 따라 다음과 같은 2 가지 종류로 구분
문법■(1) return;(2) return( 반환식 );
• return 문은 피호출 함수로부터 호출 함수에 제어를 넘겨주고 , 동시에 호출문에 값을 반환하기 위해서 사용된다 .
– 이때 반환식이 없으면 0 을 반환한다 . 그러나 만약 반환식이 있으면 식의 자료형은 함수의 반환형과 일치해야 한다 .
int ifactorial(int n){ int i; int s=1; for(i=1; i<=n; i++) s=s*i; return s;}