학이시습

[혼공C] 3주차_선택문과 반복문 알아보기 본문

혼공학습단/혼공C

[혼공C] 3주차_선택문과 반복문 알아보기

dbswndud 2024. 1. 22. 04:17

혼공C 커리큘럼


chapter 5

01. if문

if문의 기본 형식

if문은 전제인 조건식과 조건을 만족해야 하는 실행문으로 구성됩니다.

if (조건식) {
    실행문
}

 

읽기 쉬운 코드를 위한 규칙

  • if문은 중괄호를 사용하고 들여쓰기하여 실행문을 명확히 구분하는 것이 좋습니다.
  • 실행할 문장이 두 문장 이상이면 반드시 중괄호로 묶어야 합니다.

if ~ else문

조건을 만족하지 못할 때에도 별도의 실행문이 있으려면 if ~ else문을 씁니다.

if (조건문) {
    실행문
}
else {
    실행문
}

 

if ~ else문은 두 실행문 중에 하나만 실행하며, 반드시 하나만 실행되는 구조를 갖습니다. 단 다음 규칙을 지켜야 합니다.

 

if ~ else문의 규칙

  • if ~ else문의 else조건을 사용하지 않습니다.
  • 실행할 문장이 두 문장이 이상이면 반시 중괄호로 묶어야 합니다.
  • 경우에 따라 if문을 두 번 사용하는 것보다 if ~ else문을 한 번 사용하는 것이 좋습니다.

if ~ else if ~ else문

3개 이상의 실행문에서 반드시 하나를 선택하는 경우 if ~ else if ~ else문을 사용합니다.

 

if ~ else if ~else문의 규칙

  • 각 조건에 따라 실행할 문장이 두 문장 이상이면 반드시 중괄호로 묶어야 합니다.
  • 조건식을 차례로 검사하므로 이전 조건의 결과가 반영됩니다.

확인 문제

1. 다음 그림과 실행 순서가 같도록 if문을 작성하세요.


 if (a < 0) {
     a = -a;
 }

 if (a % 2 == 0) {
     a = 2;
 }
 else {
     a = 1;
 }

 

2. 다음 조건에 맞도록 if문의 빈칸을 채워보세요.

  • 가슴둘레가 90보다 작거나 같으면 S 선택
  • 가슴둘레가 90보다 크고 100보다 작거나 같으면 M 선택
  • 가슴둘레가 100보다 크면 L 선택
int chest = 95;
char size;

if (_________) {
    size = 'S';
}
else if (_________) {
    size = 'M';
}
else {
    size = 'L';
}
chest <= 90
chest <= 100

 

3. 키가 187.5cm 이상이고 몸무게가 80.0kg 미만이면 ok를 출력하고 그 이외의 경우에는 cancel을 출력하는 프로그램을 작성하세요. 키는 179.5, 몸무게는 75.0으로 double형 변수에 초기화합니다.

#include <stdio.h>

int main(void) {
	double height = 179.5;
	double weight = 75.0;

	if ((height >= 187.5) && (weight < 80)) {
		printf("ok\n");
	}
	else {
		printf("cancel\n");
	}

	return 0;
}

 

02. if문 활용과 switch ~ case문

if문 중첩

어떤 조건을 검사하기 전에 선행조건이 있다면 if문 안에 if문을 넣어 사용합니다.

선행조건이 참이면 안에 있는 if문이 실행되고 선행조건이 거짓이면 안의 문장이 실행되지 않습니다.

 

if문을 중첩해서 쓰는 이유

  • 선행조건이 있으면 불필요한 조건 검사를 하지 않습니다.
  • 선행조건이 없어도 실행 효율을 위해 의도적으로 중첩해 사용할 수 있습니다. (분할 whrj 기법)

else 결합 문제

문법적으로 if문은 조건에 따라 실행할 문장이 한 문장인 경우 중괄호를 생략할 수 있습니다.

그러나 if ~ else문 안에 단독으로 if문을 쓸 때는 반드시 중괄호를 붙여야 합니다.

 

switch ~ case문

여러 개의 상수 중에서 조건에 해당하는 하나를 골라 실행하는 것이 switch ~ case문입니다.

switch ~ case문의 일반 형식은 다음과 같습니다.

switch(조건식) {
    case 상수식1: 
        실행문1;
        break;
    case 상수식2: 
        실행문2;
        break;
    default: 
        실행문3;
        break;
}

 

switch ~ case문은 두 가지 규칙을 지켜야 합니다.

  • 조건식은 정수식만 사용합니다.
  • 기본적으로 case는 break를 포함합니다.

break 생략

break는 필요에 따라 생략할 수 있습니다.

break를 생략하면 불록의 끝까지(break를 만날 때까지) 실행합니다.

 

확인 문제

1. 다음 중 if문과 switch ~ case문에 대한 설명으로 옳지 않은 것을 고르세요.

    ① if ~ else if ~ else문은 if ~ case문이 중첩된 구조다.

    ② if ~ else문이 중첩된 경우 else는 가장 가까운 if와 짝이 된다

    ③ if문이 중첩된 경우 안쪽 if문을 벗어날 때 break를 사용합니다.

    ④ switch ~ case문은 결괏값이 정수인 수식만 조건식으로 사용할 수 있다.

 

2. 다음 프로그램의 실행결과를 참고하여 빈칸을 채워보세요.

    정수 입력 : 1 -> 참

    정수 입력 : 2 -> 참

    정수 입력 : 3 -> 거짓

#include <stdio.h>
int main(void) {
    int n;
    printf("정수 입력 : ");
    scanf("%d", &n);
    
    switch (n % 3) {
        case 0:
            printf("거짓");
            break;
     _____________
            printf("거짓");
            break;
    }
    
    return 0;
}
default

 

3. 다음 표에 따라 옷의 사이즈가 결정될 때, 나이가 25이고 가슴둘레가 95인 사람의 사이즈를 출력하는 프로그램을 if문을 사용하여 작성하세요.

#include <stdio.h>

int main(void) {
	int age = 25, chest = 95;
	char size;

	if (age < 20) {
		if (chest < 85) {
			size = 'S';
		}
		else if (chest < 95) {
			size = 'M';
		}
		else {
			size = 'L';
		}
	}
	else {
		if (chest < 90) {
			size = 'S';
		}
		else if (chest < 100) {
			size = 'M';
		}
		else {
			size = 'L';
		}
	}

	printf("사이즈는 %c입니다.\n", size);

	return 0;
}

 

기본 미션

이렇게 하는게 맞나요..? 코드 쓰면서도 굉장히 의아해하면서 작성했습니다.

 

선택 미션

여태까지 아이패드로만 공부를 해와서 종이에다 작성하는게 굉장히 어색했습니다..

반복문에서 중첩 반복문이 중요할 것 같아서 추가를 했고 코드를 예시로 작성해서 어떻게 돌아가는지 추가해봤습니다!

 


 

chapter 6

01. while문, for문, do ~ while문

일정 조건을 만족하는 동안 같은 실행문을 반복하는 것이 반복문입니다

 

while문

while문은 조건식을 먼저 검사하고 조건식이 참인 동안 실행문을 반복합니다.

while (조건식) {
    실행문;
}

 

for문

for문은 while문과 비슷합니다. 다만 for문은 실행문을 원하는 횟수만큼 반복할 때 사용합니다.

for (초기식; 조건식; 증감식) {
    실행문;
}

 

for문 사용 시 주의점

  • 초기식, 조건식, 증감식은 반복 횟수를 알기 쉽게 작성합니다.
  • 반복 횟수를 세는 변수를 반복문 안에서 바꾸지 않는 것이 좋습니다.

do ~ while문

do ~ while문은 일단 반복할 문장을 수행한 후에 조건을 검사합니다.

do {
    실행문;
} while (조건식)

 

확인 문제

다음 그림과 실행 순서가 같도록 반복문을 작성하세요.


 do {
     scanf("%d", &a);
 } while (a < 0) 

 for (int i = 0; i < 5; i++) {
     printf("Be happy\n")
 }

 

3. 반복문을 사용하여 화면에 '$'를 10번 출력하는 프로그램을 작성하세요.

#include <stdio.h>
int main(void) {
    int i;
    
    for (i = 0; i <= 9; i++) {
        printf("$");
    }
}

 

 

02. 반복문 활용

중첩 반복문

중첩 반복문은 반복문 안에 실행할 문장으로 반복문이 포함된 것입니다.

for (초기식; 조건식; 증감식) {
    for (초기식; 조건식; 증감식) {
        실행문;
    }
}

 

break continue 분기문

break

break는 반복문에서 반복을 즉시 끝낼 때 사용합니다.

break는 자신을 포함한 반복문 하나만 빠져나갑니다. 중첩문 안에 있는 break문이라면 안쪽 for문만 빠져나갑니다.

 

continue

continue는 반복문의 일부를 건너뜁니다.

continue를 사용하면 continue와 같은 블록에 있는 continue아래의 문장은 실행되지 않습니다.

 

확인 문제

다음 중첩 반복문을 실행할 때 "Be happy~"가 출력되는 횟수는 몇 번일까요?

① 12번 ② 9번

 

3. 중첩 반복문을 사용하여 다음과 같이 출력하는 프로그램을 작성합니다.

*    *
 *  *
   *
  * *
*    *

 

#include <stdio.h>
int main(void) {
    int i, j;
    
    for (i = 0; i <= 4; i ++) {
        for (j = 0; i <= 4; j++) {
            if ((i == j) || (i + j == 4))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    
    returtn 0;
}

생각보다... 살짝 헤맸습니다.....