본문 바로가기
c

3. 제어문

by it_jangyee 2020. 1. 8.

제어문: 프로그램의 흐름을 제어하는 문장

 

1. 조건문: 조건을 따져서 true, false에 따라 분기

 

1) if

조건이 true 일때만 실행

   *조건:결과로 true나 false가 나올 수 있는 수식

문법 예1) 예2)
if (조건){
  실행문1;
  실행문2;
}
실행문3;

int x=10;

if(x==10){

   printf("x는 10");

}

#include<stdio.h>
void main(){
    int a = 3;
    if(a>0){
        printf("a는 0보다 크다\n");
        printf("if 블록 끝\n");
    }
    printf("여기는 if블록 아님. 무조건 실행\n");

    if(a>5){
        printf("a는 5보다 크다\n");
        printf("if 블록 끝\n");
    }
    printf("if블록 밖. 무조건 실행\n");
}


2) if-else
 조건이 하나이고 이 조건이 true일때와 false일때 다르게 실행하려 할때 사용

문법 예1) 예2)
if(조건){ 
  실행문; 
}else{ 
  실행문; 
}

int score=78;

if(score>=60){

  printf("합격");

}else{

  printf("불합격");

}

#include <stdio.h>
void main(){
    int num;
    printf("num:");
    scanf("%d", &num);
    if(num%2==0){
        printf("짝수\n");
    }else{
        printf("홀수\n");
    }
}


3) if-else if-else
조건이 2개 이상으로 다양하고 조건에 따라 각각 다르게 실행해야 할때 사용

문법 예1) 예2)
if(조건1){ 
  실행문; 
}else if(조건2){ 
  실행문; 
}else if(조건3){ 
  실행문; 
}else{ 
  실행문; 
} 

int x=2;

if(x==1){ 
  printf("x는 1");
}else if(x==2){ 
  printf("x는 2"); 
}else if(x==3){ 
  printf("x는 3");
}else{ 
  printf("이외의 값"); 
} 

int score=78;

if(score>100 || score<0){

  printf("잘못된 점수");

  return;

}

if(score>=90){ 
  printf("A");
}else if(score>=80){ 
  printf("B"); 
}else if(score>=70){ 
  printf("C");
}else if(score>=60){ 
  printf("D");
}else{ 

  printf("F"); 
} 


4) switch
조건이 2개 이상으로 다양하고 조건에 따라 각각 다르게 실행해야 할때 사용

문법 예1)

switch(조건변수){ 

 case 1: 

     실행문;
     break; 
  case 2: 

     실행문;
     break; 
  case 3: 
     실행문;
     break;
  default: 

     실행문;
     break;
} 

int x = 2;

switch(x){ 

 case 1: 

    printf("x는 1");
     break; 
  case 2: 

    printf("x는 2");
     break; 
  case 3: 
    printf("x는 3");
     break;
  default: 

    printf("이외의 값");
     break;
} 


2. 반복문:특정 문장을 원하는 만큼 반복


1)for

횟수를 기준으로 반복

문법 예1) 예2)
for(초기값;조건;증감연산){ 
  실행문; 
} 

int i;

for(i=1;i<=5;i++){

    printf(i);

}

int dan=3;

int i;

for(i=1;i<10;i++){

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

}

1~100 10개씩 출력 1~100 합 약수 구하기

#include<stdio.h>

void main(){
    int i; //카운팅 할 변수
    for(i=1;i<=100;i++){
        printf("%d\t", i);
        if(i%10==0){
            printf("\n");
        }
    }
}

#include<stdio.h>

void main(){
    int i, j=0;
    for(i=1;i<101;i++){
        j+=i;//누적
    }
    printf("sum:%d\n", j);
}

#include<stdio.h>
void main(){
    int i, num;
    printf("약수를 구할 정수를 입력하시오");
    scanf("%d", &num);
    //num의 약수 출력
    for(i=1;i<=num;i++){
        if(num%i==0){
            printf("%d\t", i);
        }
    }
}
  • 2중 루프
2줄 출력 세로 구구단
void main(){
    int i, j;
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("#");
        }
        printf("\n");
    }
}
void main(){
    int i, j;
    for(i=2;i<10;i++){//단수를 표현하는 루프
        for(j=1;j<10;j++){//곱하는 수를 표현하는 루프
            printf("%d * %d = %d\n", i, j, i*j);
        }
    }
}
가로 구구단 삼각형1
void main(){
    int i, j;
    for(i=1;i<10;i++){
        for(j=2;j<10;j++){
            printf("%d * %d = %d\t", j, i, j*i);
        }
        printf("\n");
    }
}
void main(){
    int i, j;
    char ch = '*';
    for(i=0;i<5;i++){//줄을 표현하는 루프
        for(j=0;j<=i;j++){//그 줄에 출력될 별의 개수
            printf("%c", ch);
        }
        printf("\n");
    }
}
삼각형2 삼각형3
void main(){
    int i, j;
    char ch = ' ';
    for(i=0;i<5;i++){//줄을 표현하는 루프
        ch = ' ';
        for(j=4;j>=0;j--){//그 줄에 출력될 별의 개수
            if(j==i){
                ch = '*';
            }
            printf("%c", ch);
        }
        printf("\n");
    }
}
void main(){
    int i, j, m, size;
    char ch;

    printf("크기를 입력하시오.");
    scanf("%d", &size);
    m = size/2+1;
    for(i=0;i<m;i++){//삼각형의 줄 수
        ch=' ';//출력할 문자
        for(j=0;j<m+i;j++){//각 줄에 문자(' ', '*') 출력
            if(j==m-i-1){
                ch='*';
            }
            printf("%c", ch);
        }
        printf("\n");
    }

}
1~100 사이의 소수
void main(){
    int i, j, cnt;

    for(i=2;i<101;i++){
        cnt=0;
        //1과 자신을 뺀 약수의 개수를 카운트. 카운트 값이 0이면 소수
        for(j=2;j<i-1;j++){
            if(i%j==0){
                cnt++;
            }
        }
        if(cnt==0){
            printf("%d\t", i);
        }
    }
}


2)while

조건이 true일 동안 반복

문법 예1) 예2) - 무한루프

while(조건){

   실행문;

}

int i=1;

while(i<=5){

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

    i++;

}

int i=1;

while(i<=5){

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

   // i++;

}

구구단 7단 while의 활용1
void main(){
    int i=1, j=7;
 
    while(i<10){
        printf("%d * %d = %d\n", j, i, j*i);
        i++;
    }
}

void main(){
    int i=1, num;
    while(i){
        printf("숫자를 하나 입력하라");
        scanf("%d", &num);
        printf("입력한 값:%d\n", num);
        printf("멈추려면 0을 입력하시오");
        scanf("%d", &i);
    }
}
while의 활용2
#include<stdio.h>
void main(){
    int hp=30, exp=0, level=1, menu, flag=1;
    while(flag){
        printf("1.밥먹기 2.잠자기 3.놀기 4.운동하기 5.정보확인 6.종료");
        scanf("%d", &menu);
        switch(menu){
        case 1:
            printf("피카추 밥먹음\n");
            hp+=5;
            break;
        case 2:
            printf("피카추 잠잠\n");
            hp+=10;
            break;
        case 3:
            printf("피카추 논다\n");
            hp-=10;
            exp+=5;
            if(hp<=0){
                printf("캐릭터 사망\n");
                flag=0;//루프를 나감
            }
            if(exp>=20){
                level++;
                exp-=20;
                printf("레벨이 1증가 되었음\n");
            }
            break;
        case 4:
            printf("피카추 운동함\n");
            hp-=15;
            exp+=10;
            if(hp<=0){
                printf("캐릭터 사망\n");
                flag=0;//루프를 나감
            }
            if(exp>=20){
                level++;
                exp-=20;
                printf("레벨이 1증가 되었음\n");
            }
            break;
        case 5:
            printf("피카추 상태\n");
            printf("hp:%d\n", hp);
            printf("exp:%d\n", exp);
            printf("level:%d\n", level);
            break;
        case 6:
            flag = 0;
            break;
        default:
            printf("잘못된 메뉴값\n");
            break;
        }
    }
    printf("게임종료\n");
}


3)do-while

첫 회는 조건의 상태 상관없이 무조건 실행, 그 이후엔 조건이 true일 동안 반복

문법 예1) - 0번 실행 예2) - 1번 실행

do{

   실행문;

}while(조건);

int i=10;

while(i<=5){

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

    i++;

}

int i=10;

do{

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

    i++;

}while(i<=5);

예제

#include<stdio.h>

void main(){
    int score;
    do{
        printf("점수:");
        scanf("%d", &score);
    }while(score>100 || score<0);

    if(score>=90){
        printf("A");
    }else if(score>=80){
        printf("B");
    }else if(score>=70){
        printf("C");
    }else if(score>=60){
        printf("D");
    }else{
        printf("F");
    }
}

3. 기타

1)break

루프를 빠져 나오는 명령어

예1) 예2)

int x=1;

for(;;){

  printf("%d\n", i++);

   if(x>5){

      break;

   }

}

int x=1;

while(true){

  printf("%d\n", i++);

   if(x>5){

      break;

   }

}

예제
void main(){
    //break: 루프 빠져나가라
    int score;
    while(1){//무한루프
        printf("점수:");
        scanf("%d", &score);
        if(score<=100 && score>=0){//점수가 정상 범위
            break;//루프를 빠져나감. 입력을 더 이상 안받음.
        }
    }

    if(score>=90){
        printf("A");
    }else if(score>=80){
        printf("B");
    }else if(score>=70){
        printf("C");
    }else if(score>=60){
        printf("D");
    }else{
        printf("F");
    }
}

2)continue

continue 다음 명령어들은 점프하고 다시 루프 진행

예1) 예2)

int i;

for(i=1;i<51;i++){

   if(i%2==0){

      continue;

   }

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

}

void main(){
    for(i=1;i<101;i++){
        if(i%2==0){
            continue;
        }
        printf("%d\t", i);
    }
}

 

'c' 카테고리의 다른 글

6. 포인터  (0) 2020.02.17
5. 함수  (0) 2020.02.12
4. 배열  (0) 2020.01.22
2. 변수와 연산자  (0) 2020.01.05
1. 개발환경구축 - 코드블럭설치  (0) 2019.12.21

댓글