공부/C programming

5. 제어문

natom_ 2016. 3. 29. 14:44
반응형

1. 조건문 <if문>


(1) 형식-1

 

if(조건식)

{

종속문장1;

...

종속문장n;

}

 


 

※ 복합문 : 조건식이 참일 때 실행할 문장이 두개 이상일 경우에는 중괄호('{}')를 사용해 문장들을 하나로 묶어 줘야 한다.



<프로그램 예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int temp;
    
    printf("현재 온도는? ");
    scanf("%d",&temp);
    
    if(temp<0)
        printf("\n오늘은 영하이며, ");
        
    printf("\n현재 온도는 %d도입니다.\n",temp);
    
    
    
    
    return 0;
}
cs



(2) 형식-2

 

if(조건식)

종속문장1;

else

종속문장2;


다음문장;

//실행하는 문장이 두줄 이상이면 중괄호({})로 묶는다.

 

※ 쓸데없이 세미콜론(;)을 붙이지 않아야 한다.

※ else뒤에 조건식을 단독으로 사용할 수 없다.


<프로그램 예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int num;
    
    printf("정수를 입력하세요 : ");
    scanf("%d",&num);
    
    if(num%2==0)
        printf("\n짝수입니다.\n");    //참인 경우 실행문 
            
    else
        printf("\n홀수입니다.\n");     //거짓인 경우 실행문 
    
    return 0;
}
cs




(3) 형식-3

 

if(조건식 1)

문장1;

else if(조건식2)

문장2;

else if(조건식3)

문장3;

.....

else if(조건식 n-1)

문장n-1;

else

문장n;

다음문장;

//실행하는 문장이 두줄이상이면 중괄호({})로 묶는다.

 

※ else 뒤에 바로 if문이 올때 else와 if 사이에는 반드시 공백이 있어야한다.



<프로그램 예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int score;
    char grade;
    
    printf("점수를 입력하세요 : ");
    scanf("%d",&score);
    
    if(score>=90)
        grade = 'A';
    else if(score>=80)
        grade = 'B';
    else if(score>=70)
        grade = 'C';
    else if(score>=60)
        grade = 'D';
    else
        grade = 'F';
        
    
    printf("\n학점 : %c\n",grade);
        
    
    return 0;
}
cs



2. 조건문<switch문>


(1) 형식

 

switch(조건식)

{

case 값1: 문장 1; break;

case 값2: 문장 2; break;

...

case 값n: 문장 n; break;

default: 문장 n+1;

}

다음문장;

 



※ 조건식의 결과 값은 반드시 정수형이어야 한다.

※ case 레이블에 명시하는 값은 반드시 정수형 상수 한 개만 가능하다.

※ case 레이블 뒤의 내용까지 실행하지 않으려면 꼭 break;를 사용해아한다.



3-1> 예제 break;유무

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
    
    int menu;
    
    printf("1. 입금하기 2. 출금하기 3. 송금하기 \n");
    printf("메뉴번호 선택 : ");
    scanf("%d",&menu);
    
    switch(menu)
    {
        case 1printf("입금하기 화면으로 이동합니다.\n");
        case 2printf("출금하기 화면으로 이동합니다.\n");
        case 3printf("송금하기 화면으로 이동합니다.\n");
        defaultprintf("잘못된 입력입니다.\n"); 
    }
 
    return 0;
}
cs




//break; 가 없을때는 2 를 입력하게되면 case 1: 에 만족하지 않아 case 1: 을 제외한 나머지 문장들이 모두 출력된다. 





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
    
    int menu;
    
    printf("1. 입금하기 2. 출금하기 3. 송금하기 \n");
    printf("메뉴번호 선택 : ");
    scanf("%d",&menu);
    
    switch(menu)
    {
        case 1printf("입금하기 화면으로 이동합니다.\n");break;
        case 2printf("출금하기 화면으로 이동합니다.\n");break;
        case 3printf("송금하기 화면으로 이동합니다.\n");break;
        defaultprintf("잘못된 입력입니다.\n"); 
    }
 
    return 0;
}
cs


//case 문을 실행하고 break; 를 만나게 되면 switch문이 종료된다.



예제 3-2>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
    
    int x,y,result;
    char op;
    
    printf("연산자 종류 : + - * / %%\n");
    printf("입력 예) 2+3\n\n 입력 >>");
    scanf("%d %c %d",&x,&op,&y); 
    
    switch(op)
    {
        case '+' : result=x+y; break;
        case '-' : result=x-y; break;
        case '*' : result=x*y; break;
        case '/' : result=x/y; break;
        case '%' : result=x%y; break;
        default : printf("잘못된 연산입니다.\n"); exit(0);
    }
    
    printf("\n결과 >> %d %c %d = %d",x,op,y,result);
 
    return 0;
}
cs



3. 반복문 <for문>

1
2
3
4
5
    int i;
    
    //1. 1~10까지 출력 
    for(i=1;i<=10;i++)
        printf("%d\n",i);
cs


1
2
3
4
5
    int i; 
    
    //2. 1~10까지 역순 
    for(i=10;i>=1;i--)
        printf("%d\n",i); 
cs



1
2
3
4
5
6
    int i; 
    //3. 1~10까지 짝수만 출력
    
    for(i=2;i<=10;i+=2)
        printf("%d\n",i);
 
cs




1
2
3
4
5
6
7
 
    int i;
    
    //4. 1~100 짝수 출력 
    for(i=2;i<=100;i+=2)
        printf("%d\n", i); 
        
cs



1
2
3
4
5
6
    int i;
    
    //5. 1~100 홀수 출력
    for(i=1;i<=100;i+=2)
        printf("%d\n", i); 
    
cs





1
2
3
4
5
6
7
    int i;
    
    //6. A~Z 출력  
    for(i=65; i<=100;i++)
        printf("%c\n",i);
        
 
cs







1
2
3
4
5
6
7
8
9
10
    //7. 1~10까지 합
    
    int i,sum=0;
    
    for(i=1; i<=10; i++)
    {
        sum+=i;
        printf("%d\n",sum);
    }
    
cs





1
2
3
4
5
6
7
8
9
    //8. 1~100까지 합
     int i,sum=0;
    
    for(i=1; i<=100; i++)
    
        sum+=i;
        printf("%d\n",sum);
        
    
cs





for문 예제

합계가 1000이 넘는 i값

→for문 + if문 예제소스, 실행결과, 주석(if문의 역할설명)

1
2
3
4
5
6
7
8
9
10
11
 
    int i, sum=0;
    
    for(i=1; ;i++)
    {
 
        if(sum>1000)        break;
        sum += i;
        printf("i = %d, sum = %d\n",i,sum);
    }
 
cs






1
2
3
4
5
6
7
8
9
10
    int i, sum=0;
    
    for(i=1; ;i++)
    {
        sum += i;
        if(sum>1000)        break;
        
        printf("i = %d, sum = %d\n",i,sum);
    }
 
cs





이중for문

1. 형식 

 

for(i=1;i<=2;i++)

for(j=1;j<=5;j++)

printf("i=%d,j=%d \n",i,j);

 

 



2. 예제-1 프로그램 5-10 소스, 실행결과

1
2
3
4
5
6
7
8
9
10
11
    int line, star;
    
    
    for(line=1;line<=5;line++)
    {
        for(star=1;star<=5;star++)
            printf("*");        
        
        printf("\n");
 
}
cs









3. 예제-2 프로그램 5-11 소스, 실행결과

1
2
3
4
5
6
7
8
9
10
11
    int line, star;
    
    
    for(line=1;line<=5;line++)
    {
        for(star=1;star<=line;star++)
            printf("*");        
        
        printf("\n");
 
}
cs




5. 구구단 출력 프로그램(5-17 프로그램 소스, 실행결과)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int dan,i;
    
    printf("출력 할 단 입력 : ");
    scanf("%d",&dan);
    
    for(i=1;i<=9;i++)
        printf("%d * %d = %d\n",dan,i,dan*i);
        
    return 0;
}
cs


6. 구구단 1~9단 출력(실행결과 : 연습문제 18번 p.225참조) 소스코드, 실행결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int i,j;
    
    for(i=1;i<=9;i++)
    {
        for(j=1; j<=9;j++)
            printf("%d * %d = %d\n",i,j,i*j);
            
        printf("\n");
    }
    
    return 0;
}
cs


....


7. 프로그램 5-15소스, 실행결과


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int i, quiz,sum,pass,fail;
    double avg;
    
    sum=0;
    pass=0;
    fail=0;
    
    for(i=1;i<=10;i++)
    {
        printf("%d번의 퀴즈 점수는?  ",i);
        scanf("%d",&quiz);
        
        sum+=quiz;
        
        if(quiz>=70)
            pass++;
        else
            fail++;
        
    }
    avg = (double)sum/10;
    
    printf("==========================\n");
    printf("평균:%.2lf점\n",avg);
    printf("통과자:%2d명\n",pass);
    printf("탈락자:%2d명\n",fail);
        
    return 0;
}
cs

//for문 안에 if~else문을 넣었다.

for문을 10번 실행시키고 sum변수 안에 각 입력한 quiz의 점수를 합계시킨다.

입력한 점수가 if~else문의 조건인 70점 이상이면 pass에 1이 더해지게 되고,

만족하지않으면 fail에 1이 더해진다.

avg는 double형으로 초기화해주었기 때문에 sum을 형변환연산자를 사용해 double으로 형변환을 해주었다.

그리고 출력문을 이용하여 각 값을 출력시켜주었다.



4. 반복문<while문>


1. 형식   

 

while(조건식)

반복할문장;

다음문장;

 

2. 1~10까지 합을 출력하는 프로그램, 실행결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int i=1, sum=0;
    
    while(i<=10)
    {
        sum += i;
        i++;
    }
    printf("%d",sum);
    
    
    return 0;
}
cs

//변수를 초기화 시켜주고, while문의 괄호 안에 조건식을 넣고, 증감식을 while문내부에 넣는다.

이 프로그램에서 int형으로 i와 sum을 초기화 해주고 while문을 실행시킨다.



3. 합이 1000이 넘는 수 출력 프로그램, 실행결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    int i=0, sum=0;
    
    while(1)
    {
        sum += i;
        if(sum>1000)    break;
        i++;
    }
    printf("%d\n",sum); 
    return 0;
}
cs

//while(1)은 무한 반복문이다.

while문에서 무한 반복을 실행하게 되고,while문안에 있는

if문의 조건에 의해 sum의 합이 1000이상이 되면 break가 걸린다.

여기서는 sum+=i 의 위치가 if문 위에 있기 때문에

1000이 넘는 처음의 숫자가 출력이 된다.

 

100이 넘지 않는 숫자를 출력시키고 싶으면

i문 아래에 sum+=i를 위치시키면 된다.



5. 반복문 <do~while문>

1. 형식


do

{

반복

증감식

}while(조건식);

 


6. for문, while문, do~while문의 비교

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    
    int i;
    
    printf("for문을 이용한 출력\n");
    for(i=1;i<=10;i++)
        printf("%d ",i);
    
    
    
    
    printf("\n\n\n");
    printf("while문을 이용한 출력\n");
    i=1;                //1.초기식
    while(i<=10)            //2.조건식 
    {
        printf("%d ",i);
        i++;            //3. 증감식 
    }
    
    
    
    printf("\n\n\n");
    printf("do while문을 이용한 출력 \n"); 
    
    i=1;                //1. 초기식 
    
    do
    {
        printf("%d ",i);
        i++;            //3. 증감식 
        
        
    }while(i<=10);        //2. 조건식 
    
    
    return 0;
}
cs


//조건을 만족하는 for문, while문, do~while문에서는 동일한 결과가 출력된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[]) {
    
    
    int i;
    
    printf("for문을 이용한 출력\n");
    for(i=1;i>10;i++)
        printf("%d ",i);
    
    
    
    
    printf("\n\n\n");
    printf("while문을 이용한 출력\n");
    i=1;                //1.초기식
    while(i>10)            //2.조건식 
    {
        printf("%d ",i);
        i++;            //3. 증감식 
    }
    
    
    
    printf("\n\n\n");
    printf("do while문을 이용한 출력 \n"); 
    
    i=1;                //1. 초기식 
    
    do
    {
        printf("%d ",i);
        i++;            //3. 증감식 
        
        
    }while(i>10);        //2. 조건식 
    
    
    return 0;
}
cs


//하지만 조건을 만족하지 않는 for문, while문, do~while문에서는 결과가 다르게 출력이 되는데

그 이유는 각 반복문의 실행순서에 의해 결과가 다르게 출력되는것을 확인할 수 있다.


(왼쪽부터 for문, while문, do~while문)

for문과 while문은 조건식이 참일때만 반복할 문장을 실행하는데.

do~while문은 먼저 반복할 문장을 실행 시킨 후에 조건을 판별하므로 

조건식이 참인가 거짓인가에 상관없이 한번은 무조건 반복할 문장을 실행시키게 된다.





7. 기타제어문

(1) break; 예제 소스, 결과

switch문, for문, while문, do~while문을 탈출할때 사용

무한 루프를 벗어날 때 매우 유용하다.


(2) continue; 예제 소스, 결과

continue문 다음 내용만 실행하지 않은 채 다음 반복으로 진행


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int i;
    
    printf("break 예시>> ");
    
    for(i=1;i<=10;i++)
    {
        printf("%d ",i); 
        if(i==5)    break;
    }
    
     
    printf("\n\ncontinue 예시>> "); 
    for(i=1;i<=10;i++)
    {
        
        if(i==5)    continue;
        //5일때 출력을 안하고 다시 증감식으로 올라간다. 
        printf("%d ",i); 
    }
    
cs






int score;

printf("점수입력 : ");

scanf("%d",&score);


switch(score/10)

{

case 10: 

case 9: printf("A학점\n"); break;

case 8: printf("B학점\n"); break;

case 7: printf("C학점\n"); break;

case 6: printf("D학점\n"); break;

default:  printf("F학점\n"); break;

}


if(score>=90)

printf("A학점");

else if(score>=80)

printf("B학점");

else if(score>=70)

printf("B학점");

else if(score>=60)

printf("C학점");

else

printf("F학점");










#include <stdio.h>

#include <stdlib.h> //system 함수를 위한 헤더파일 

#define PI 3.141592 //PI를 매크로 상수로 정의한다. 

#include<conio.h> //getch 함수를 위한 헤더파일 




int main(int argc, char *argv[]) {

/*

int answer;

int r;

double circum, area, volume;

do{

printf("===========================\n");

printf("=== 1. 원의 둘레 구하기 ===\n");

printf("=== 2. 원의 넓이 구하기 ===\n");

printf("=== 3. 구의 부피 구하기 ===\n");

printf("=== 4. 종료하기  ==========\n");

printf("===========================\n");

printf(" 메뉴 선택 : ");

scanf("%d",&answer);

if(answer==1||answer==2||answer==3)

{

printf("\n>> 반지름은?");

scanf("%d",&r);

}

switch(answer)

{

case 1: 

{

circum=2*PI*r;

printf("원의 둘레는 %6.2lf\n",circum);

} break;

case 2:

{

area = PI * r*r;

printf("원의 넓이는 %6.2lf\n", area);

} break;

case 3:

{

volume=4./3*PI*r*r*r;

printf("원의 부피는 %6.2lf\n",volume);

} break;

case 4:

{

printf("\n프로그램을 종료합니다.\n"); exit(0); //exit(0)은 실행종료를 나타낸다 

}

}

printf("\n >>결과를 확인 했으면 아무키나 누르세요.");

getch(); //키보드로 문자 한 개 입력받기 

system("cls"); //현재 화면의 내용 지우기 

} while(answer!=4); //case4를 선택하지 않았으면 다시 반복하기 

*/


return 0;

}










반응형

'공부 > C programming' 카테고리의 다른 글

7. 배열  (0) 2016.04.15
6. 전처리기  (0) 2016.04.15
4. 연산자  (0) 2016.03.22
정리하기  (0) 2016.03.20
실습 정리하기!  (0) 2016.03.18