안녕하세요
샤땨는 내려갔지만...기록 열심히 해보겠습니다...
CH5 선택문
- 조건에 따라 실행 문자를 선택해야할 때 사용하는 선택문(조건문)
- if문 / switch ~ case
5-1 if문
제어문
- 선택문 if, switch ~ case
- 반복문 while, for, do ~ while
- 분기문 break, continue, goto, return
if문의 기본 형식
읽기 쉬운 코드를 위한 규칙
규칙1) if문은 중괄호 {}를 사용하고 들여쓰기해 실행문을 명확히 구분하기.
시작 중괄호 조건식 끝에 붙여도 되고, 생략도 되고(한줄에 쓸 경우), 한줄에 작성도 된다.
하지만 구분해 쓰고 한 방식으로 통일하는 것이 좋다.
규칙2) 실행할 문장이 두 문장 이상이면 반드시 중괄호로 묶기.
if ~ else 문
두 실행문 중 하나만 실행되며, 반드시 하나는 실행되는 구조를 갖음.
if ~ else문의 규칙
규칙1) if ~ else문의 else에는 조건을 사용하지 않음.
즉, 조건을 만족하지 않을 때 무조건 else 부분을 실행하므로 둘 중에 하나는 반드시 실행함.
규칙2) 실행할 문장이 두 문장 이상이면 반드시 중괄호로 묶어야 합니다.
if ~ else문도 기본 if문처럼 실행문이 한 문장인 경우는 다음과 같이 중괄호를 생략할 수 있음.
규칙3 ) 경우에 따라 if문을 두 번 사용하는 것보다 if ~ else문을 한 번 사용하는 것이 좋음.
if ~ else if ~ else 문
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문... 마치 마트료시카
if~else문은 실행문이 많고 형태가 복잡하더라도 전체를 한 문장으로 취급.
그래서
if~else문 밖의 중괄호는 삭제 가능하다.
(하지만 구분을 위해 가능한 한 유지...)
if문을 중첩해서 쓰는 이유
1. 선행조건이 있으면 불필요한 조건 검사를 하지 않음.
if문을 중첩하면 실행 효율을 높일 수 있다.
2. 선행조건이 없어도 실행 효율을 위해 의도적으로 중첩해 사용할 수 있음.
else 결합 문제
if ~else 문 안에 실행문으로 기본s if문이 쓰이면 반드시 중괄호가 필요. (한 문장인 경우에도)
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를 포함. (해당 블록을 탈출할 때 사용)
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문
조건식을 먼저 검사하고 조건식이 참인 동안 실행문 반복
중괄호의 사용법과 들여쓰기
모든 반복문은 실행문을 중괄호로 묶어 반복할 부분을 표시.
다만, 실행문이 한 문장이면 중괄호 생략 가능.
중괄호 안에 들여쓰기 하지 않아도 에러가 나지 않지만, 편의를 위해 들여쓰자.
for문
실행문을 원하는 횟수만큼 반복할 때 사용.
주의1 ) 초기식, 조건식, 증감식은 반복 횟수를 알기 쉽게 작성
주의2 ) 반복 횟수를 세는 변수를 반복문 안에서 바꾸지 않는 것이 좋습니다.
do ~ while문
일단 반복할 문장을 수행한 후에 조건을 검사.
마지막 세미콜론을 잊지 말도록 하자.
확인문제
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
중첩 반복문
중첩 반복문은 반복문 안에 실행할 문장으로 반복문이 포함된 것
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
반복문 안에서 반복을 즉시 끝낼 때 사용.
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. 중첩 반복문을 사용해 다음과 같은 실행결과를 출력하는 프로그램을 작성하세요.