본문 바로가기

C

혼공C 3주차

안녕하세요

샤땨는 내려갔지만...기록 열심히 해보겠습니다...


CH5 선택문

- 조건에 따라 실행 문자를 선택해야할 때 사용하는 선택문(조건문)

- if문 / switch ~ case

5-1 if문

제어문

  • 선택문 if, switch ~ case
  • 반복문 while, for, do ~ while
  • 분기문 break, continue, goto, return

if문의 기본 형식

5-1 직접 해보는 손코딩

읽기 쉬운 코드를 위한 규칙

규칙1) if문은 중괄호 {}를 사용하고 들여쓰기해 실행문을 명확히 구분하기.

시작 중괄호 조건식 끝에 붙여도 되고, 생략도 되고(한줄에 쓸 경우), 한줄에 작성도 된다.
하지만 구분해 쓰고 한 방식으로 통일하는 것이 좋다.

규칙2) 실행할 문장이 두 문장 이상이면 반드시 중괄호로 묶기.

if ~ else 문

5-2 직접 해보는 손코딩

두 실행문 중 하나만 실행되며, 반드시 하나는 실행되는 구조를 갖음.

if ~ else문의 규칙

규칙1) if ~ else문의 else에는 조건을 사용하지 않음.

즉, 조건을 만족하지 않을 때 무조건 else 부분을 실행하므로 둘 중에 하나는 반드시 실행함.

규칙2) 실행할 문장이 두 문장 이상이면 반드시 중괄호로 묶어야 합니다.
if ~ else문도 기본 if문처럼 실행문이 한 문장인 경우는 다음과 같이 중괄호를 생략할 수 있음.

규칙3 ) 경우에 따라 if문을 두 번 사용하는 것보다 if ~ else문을 한 번 사용하는 것이 좋음.

if  ~ else if ~ else 문

3개 이상의 실행문에서 반드시 하나를 선택하는 경우 사용.

5-3 직접 해보는 손코딩

조건을 추가하려면 else if 추가.

if ~ else if ~ else 문의 규칙

규칙1)  각 조건에 따라 실행할 문장이 두 문장 이상이면 반드시 중괄호 묶기.

규칙2) 조건식을 차례로 검사하므로 이전 조건 결과 반영됨.


확인 문제

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

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

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

 

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

int chest = 95;
char size;
if (chest =< 90)
{
	size = 'S';
}
else if (chest > 90) && (chest =< 100)
{
	size = 'M';
}
else
{
	size = 'L';
}

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.0)
    {
    	printf("ok\n");
    }
    else
    {
    	printf("cancel"\n);
    }
    
    return 0;
}

5-2 if문 활용과 switch ~ case문

if문 중첩

if문 안 if문... 마치 마트료시카

5-4 직접 해보는 손코딩

if~else문은 실행문이 많고 형태가 복잡하더라도 전체를 한 문장으로 취급.

그래서

if~else문 밖의 중괄호는 삭제 가능하다.
(하지만 구분을 위해 가능한 한 유지...)

if문을 중첩해서 쓰는 이유

1. 선행조건이 있으면 불필요한 조건 검사를 하지 않음.
if문을 중첩하면 실행 효율을 높일 수  있다.

2. 선행조건이 없어도 실행 효율을 위해 의도적으로 중첩해 사용할 수 있음.

else 결합 문제

if ~else 문 안에 실행문으로 기본s if문이 쓰이면 반드시 중괄호가 필요. (한 문장인 경우에도)

5-5 직접 해보는 손코딩

8행과 13행의 중괄호 앞에 //을 붙인 다음 컴파일하고 실행.

> 컴파일러는 if문이 중첩된 경우 else를 가장 가까운 if와 연결. 따라서 14행의 else를 9행의 if와 짝을 지어 기본 if문 안에 실행문으로 if ~ else문을 사용한 구문으로 해석.

> 이 경우 7행의 조건이 거짓이므로 아무것도 출력하지 않음.

switch ~ case문

여러 개의 상수 중 조건에 해당하는 하나를 골라 실행하는 것.

switch (조건식)
{
case 상수식1:	//조건식==상수식1 참이면 실행문1 실행
    실행문1;
    break;
case 상수식2:	//조건식==상수식1 거짓, 조건식==상수식2 이면 실행문2 실행
    실행문2;
    break;
default:       //조건식==상수식1,조건식==상수식2 거짓이면 실행문3 실행
    실행문3;
    break;
}

규칙1 ) 조건식으로 정수식만 사용

규칙2 ) 기본적으로 case는 break를 포함. (해당 블록을 탈출할 때 사용)

5-6 직접 해보는 손코딩

default는 상수식을 쓰지 않으며 생략 가능.

default를 생략한 경우 rank와 일치하는 case의 상수가 없으면 바로 블록을 벗어나므로 블록 내의 어떤 문장도 실행되지 않음.

case와 default는 건너뛸 위치를 표시하는 레이블 label 의 역할을 함.

break 생략
필요에 따라 생략 가능.
있고 없고는 굉장히 큰 차이가 나므로,
제한적으로 break를 생략해야 하며 생략할 때는 자세한 설명을 주석으로 남겨야 함.


확인문제

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

① if ~ else if ~ else 문은 if ~ else문이 중첩된 구조다.
② if ~ else 문이 중첩된 경우 else는 가장 가까운 if와 짝이 된다.
③ if문이 중첩된 경우 안쪽 if문을 벗어날 때 break를 사용한다.
④ switch ~ case문은 결괏값이 정수인 수식만 조건식으로 사용할 수 있다.

2. 다음 프로그램의 실행결과를 참고해 빈칸을 채우세요.

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

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

#inclued <stdio.h>
int main(void)
{
    int age = 25, chest = 95;
    char size;
    if (age < 20)
    {
        if (chest < 85)
            size = 'S';
        else if (85 <= chest < 95)
            size = 'M';
        else
            size = 'L';
    }
    else
    {
        if (chest < 90)
            size = 'S';
        else if (90 <= chest < 100)
            size = 'M';
        else
            size = 'L';
    }
    printf("사이즈는 %c입니다.\n", size);
    
    return 0;
}

CH 6 반복문

6-1 while문, for문, do ~ while문

반복문은 조건을 만족하는 동안 같은 문장을 반복한다.

while문 : ① 조건을 먼저 물어보고 만족하는 동안 ② 실행문을 실행

for문 : ⓐ 초깃값을 최초 설정한 다음 ① 조건을 물어보고 ② 실행문을 실행한 다음 ③ 증감식을 실행하고 다시 ① 조건을 확인.

do ~ while문은 ① 실행문을 무조건 실행하고 ② 조건을 확인한 후 다시 ① 실행문을 실행하러 감.

while문

조건식을 먼저 검사하고 조건식이 참인 동안 실행문 반복

6-1 직접 해보는 손코딩

중괄호의 사용법과 들여쓰기

모든 반복문은 실행문을 중괄호로 묶어 반복할 부분을 표시.
다만, 실행문이 한 문장이면 중괄호 생략 가능.

중괄호 안에 들여쓰기 하지 않아도 에러가 나지 않지만, 편의를 위해 들여쓰자.

for문

실행문을 원하는 횟수만큼 반복할 때 사용.

6-2 직접 해보는 손코딩

주의1 ) 초기식, 조건식, 증감식은 반복 횟수를 알기 쉽게 작성

주의2 ) 반복 횟수를 세는 변수를 반복문 안에서 바꾸지 않는 것이 좋습니다.

do ~ while문

일단 반복할 문장을 수행한 후에 조건을 검사.

6-3 직접 입력하는 손코딩

마지막 세미콜론을 잊지 말도록 하자.


확인문제

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

do
{
    scanf("%d", a);
} while (a < 0);
for  (i = 0; i < 5; i++)
{
    printf("Be happy!\n");
}

3. 반복문을 사용해 화면에 '$'를 열 번 출력하는 프로그램이 완성되도록 빈칸을 채우세요.

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

6-2 반복문 사용

중첩 반복문, 분기문 break, continue

중첩 반복문

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

6-4 직접 해보는 손코딩'

i 값이 바뀔 때마다 안쪽 for문의 초기식에 의해 j값이 다시 0부터 시작.

중첩 반복문을 사용할 때는 각 반복문이 서로 독립적인 변수를 사용해야 함.

중첩 반복문으로 구구단을 출력하는 프로그램

for (i = 2; i < 9; i++)
{
    for (j = 1; i <= 9; j++)
    {
        printf("%d * %d = %d\n", i, j, i * j);
    }
}

 

break와 continue 분기문

break

반복문 안에서 반복을 즉시 끝낼 때 사용.

6-5 직접 해보는 손코딩

break는 자신을 포함하는 반복문 하나만 벗어남.
반복문이 중첩된 경우 가장 안쪽에서 break를 사용해 모든 반복문을 한 번에 벗어날 수 없음.

반복문 이외의 블록에서 사용하면 그 블록을 포함한 반복문을 벗어남.

continue

반복문의 일부를 건너뜀.

반복문 안에서 continue를 사용하면 다음 실행 위치가 반복문의 블록 끝.
블록을 탈출하는 것은 아님.

따라서 반복문의 일부를 제외하고 반복할 수 있습니다.

예를 들어, 3의 배수를 빼고 1부터 100까지 합을 구할 때 효과적으로 사용할 수 있음.

for (i = 1; i <= 100; i++)
{
    if( (i % 3) == 0 )
    {
        continue;
    }
    sum += i;
}

=> i가 3의 배수면 sum += i; 문장을 건너뛰고 블록 끝으로 간 후 다시 반복.

for문과 달리 while문에서 continue를 사용하면 다음 실행 위치가 조건식이 됨.
i가 3일때 증감식 i++을 건너뛰므로 while문의 조건식이 계속 참이 됨.

i = 1;
while (i <= 100)
{
    if ((i % 3) == 0)
    {
        continue;
    }
    sum += i;
    i++;
}

확인 문제

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

A_1 : 12번

A_2 : 9번

3. 중첩 반복문을 사용해 다음과 같은 실행결과를 출력하는 프로그램을 작성하세요.


커버 이미지

'C' 카테고리의 다른 글

혼공C 6주차  (0) 2025.02.21
혼공C 5주차  (0) 2025.02.19
혼공C 4주차  (0) 2025.02.11
혼공C 2주차  (0) 2025.01.20
혼공C 1주차  (0) 2025.01.12