C 연산자, 조건문, 반복문
C프로그래밍 학습 절입니다.
2장 1절에서는 C 프로그램의 기본 구조를 배웠습니다.
#include <stdio.h>
int main(void) {
printf("Hello");
return 0;
}그리고 변수, 자료형, printf, scanf를 배웠습니다.
2장 2절에서는 이제 변수에 저장된 값을 가지고 계산하고, 비교하고, 판단하고, 반복하는 방법을 배웁니다.
이번 절 범위는 C프로그래밍 출제범위 중 연산자, 연산자 우선순위, 분기 제어문, 반복 제어문, break문, continue문에 해당합니다.
이번 절의 큰 그림
이번 절에서 배울 내용은 크게 세 덩어리입니다.
| 구분 | 핵심 |
|---|---|
| 연산자 | 값을 계산하거나 비교하는 기호 |
| 조건문 | 조건에 따라 실행할 코드를 선택 |
| 반복문 | 같은 코드를 여러 번 실행 |
예를 들어 이런 프로그램을 생각해 보겠습니다.
if (score >= 60) {
printf("합격");
} else {
printf("불합격");
}여기서는 다음과 같습니다.
| 부분 | 의미 |
|---|---|
score >= 60 | 비교 연산 |
if | 조건문 |
printf | 조건에 따라 실행되는 문장 |
또 이런 코드도 있습니다.
for (i = 1; i <= 10; i++) {
sum += i;
}여기서는 다음과 같습니다.
| 부분 | 의미 |
|---|---|
i = 1 | 초기값 |
i <= 10 | 반복 조건 |
i++ | 증감 |
sum += i | 반복 실행 내용 |
이번 절에서는 이런 코드를 읽을 수 있게 만드는 것이 목표입니다.
연산자 기본
연산자란?
연산자는 계산이나 판단을 하는 기호입니다.
a + b여기서 +가 연산자입니다.
score >= 60여기서 >=도 연산자입니다.
C언어의 연산자는 종류가 많습니다.
| 종류 | 예 |
|---|---|
| 산술 연산자 | +, -, *, /, % |
| 관계 연산자 | >, <, >=, <=, ==, != |
| 논리 연산자 | &&, ||, ! |
| 대입 연산자 | =, +=, -=, *=, /= |
| 증감 연산자 | ++, -- |
| 조건 연산자 | 조건 ? 값1 : 값2 |
| 비트 연산자 | &, |, ^, ~, <<, >> |
C프로그래밍 범위에도 산술, 관계, 논리, 대입, 조건, 비트 연산자와 연산자 우선순위가 포함되어 있습니다.
산술·관계·논리 연산
산술 연산자
산술 연산자는 사칙연산을 하는 연산자입니다.
| 연산자 | 의미 | 예 | 결과 |
|---|---|---|---|
+ | 더하기 | 5 + 2 | 7 |
- | 빼기 | 5 - 2 | 3 |
* | 곱하기 | 5 * 2 | 10 |
/ | 나누기 | 5 / 2 | 2 |
% | 나머지 | 5 % 2 | 1 |
주의해야 할 것은 /와 %입니다.
정수 나눗셈
C에서 정수끼리 나누면 결과도 정수입니다.
int a = 5;
int b = 2;
printf("%d", a / b);2왜 2.5가 아니라 2일까?
a와 b가 둘 다 int라서 정수 나눗셈이 되기 때문입니다.
5 / 2 = 2.52가 됩니다.
소수 결과를 원하면 둘 중 하나를 실수로 만들어야 합니다.
printf("%f", 5.0 / 2);2.500000나머지 연산자 %
%는 나눗셈의 나머지를 구합니다.
5 % 25를 2로 나누면 몫은 2, 나머지는 1입니다.
5 = 2 × 2 + 15 % 2 = 1나머지 연산자는 짝수, 홀수 판별에 자주 씁니다.
if (num % 2 == 0) {
printf("짝수");
} else {
printf("홀수");
}num % 2 == 0이면 2로 나누어떨어진다는 뜻입니다.
즉, 짝수입니다.
관계 연산자
관계 연산자는 두 값을 비교합니다.
결과는 참 또는 거짓입니다.
참 = 1
거짓 = 0으로 다룹니다.
| 연산자 | 의미 | 예 |
|---|---|---|
> | 큼 | a > b |
< | 작음 | a < b |
>= | 크거나 같다 | a >= b |
<= | 작거나 같다 | a <= b |
== | 같음 | a == b |
!= | 같지 않음 | a != b |
printf("%d", 5 > 3);1왜냐하면 5 > 3은 참이기 때문입니다.
printf("%d", 5 < 3);0왜냐하면 5 < 3은 거짓이기 때문입니다.
=와 ==는 다릅니다
이것은 진짜 중요합니다.
| 기호 | 의미 |
|---|---|
= | 대입 |
== | 비교 |
a = 10;a에 10을 넣어라.a == 10a가 10과 같은가?조건문에서 실수로 == 대신 =를 쓰면 큰 문제가 됩니다.
if (a = 10) {
printf("same");
}이 코드는 a가 10인가?를 비교하는 것이 아니라, a에 10을 넣는 것입니다.
대부분의 경우 조건이 참처럼 처리되어 의도와 다르게 동작합니다.
if (a == 10) {
printf("same");
}논리 연산자
논리 연산자는 여러 조건을 연결합니다.
1장 3절에서 배운 AND, OR, NOT이 C언어에도 그대로 나옵니다.
| C 연산자 | 의미 | 논리 |
|---|---|---|
&& | 그리고 | AND |
| ` | ` | |
! | 아님 | NOT |
AND &&
둘 다 참이어야 참입니다.
if (age >= 13 && age <= 19) {
printf("청소년");
}나이가 13 이상이고 19 이하이면 청소년둘 중 하나라도 거짓이면 전체가 거짓입니다.
OR ||
하나라도 참이면 참입니다.
if (grade == 'A' || grade == 'B') {
printf("우수");
}grade가 A이거나 B이면 우수NOT !
참과 거짓을 뒤집습니다.
if (!(score >= 60)) {
printf("불합격");
}score가 60 이상이 아니라면 불합격다음과 같은 뜻입니다.
if (score < 60) {
printf("불합격");
}논리 연산 진리표
| A | B | A && B | A || B |
|---:|---:|---:|---:|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 |
NOT은 이렇게 됩니다.
| A | !A |
|---|---|
| 0 | 1 |
| 1 | 0 |
&&는 둘 다 참
||는 하나라도 참
!는 반대대입과 증감
대입 연산자
대입 연산자는 변수에 값을 넣습니다.
가장 기본은 =입니다.
a = 10;복합 대입 연산자도 있습니다.
| 연산자 | 의미 | 같은 표현 |
|---|---|---|
+= | 더해서 대입 | a += 3 → a = a + 3 |
-= | 빼서 대입 | a -= 3 → a = a - 3 |
*= | 곱해서 대입 | a *= 3 → a = a * 3 |
/= | 나누어서 대입 | a /= 3 → a = a / 3 |
%= | 나머지를 대입 | a %= 3 → a = a % 3 |
int sum = 0;
sum += 5;
sum += 3;
printf("%d", sum);sum = 0
sum = sum + 5 → 5
sum = sum + 3 → 88증감 연산자 ++, --
증감 연산자는 값을 1 증가시키거나 1 감소시킵니다.
| 연산자 | 의미 |
|---|---|
++ | 1 증가 |
-- | 1 감소 |
int a = 5;
a++;
printf("%d", a);6a++는 다음과 같습니다.
a = a + 1;a--는 다음과 같습니다.
a = a - 1;전위형과 후위형
++는 앞에 붙을 수도 있고 뒤에 붙을 수도 있습니다.
++a;
a++;단독으로 쓸 때는 둘 다 결과적으로 a가 1 증가합니다.
하지만 다른 연산과 같이 쓰면 차이가 생깁니다.
후위 증가 a++
int a = 5;
int b;
b = a++;먼저 b에 a 값을 넣고,
그다음 a를 1 증가시킵니다.b = 5
a = 6전위 증가 ++a
int a = 5;
int b;
b = ++a;먼저 a를 1 증가시키고,
그 증가된 값을 b에 넣습니다.a = 6
b = 6비교는 다음과 같습니다.
| 코드 | a 최종값 | b 값 |
|---|---|---|
b = a++; | 6 | 5 |
b = ++a; | 6 | 6 |
시험에 자주 나옵니다.
조건 연산자
조건 연산자는 if-else를 짧게 쓴 형태입니다.
조건 ? 참일 때 값 : 거짓일 때 값int max;
max = (a > b) ? a : b;a가 b보다 크면 max에 a를 넣고,
아니면 max에 b를 넣습니다.int a = 10;
int b = 20;
int max;
max = (a > b) ? a : b;
printf("%d", max);20왜냐하면 a > b는 거짓이므로 b가 선택됩니다.
비트 연산자
비트 연산자는 값을 2진수 비트 단위로 계산합니다.
이번 절에서는 깊게 들어가지 않고 기본만 잡습니다.
| 연산자 | 의미 |
|---|---|
& | 비트 AND |
| ` | ` |
^ | 비트 XOR |
~ | 비트 NOT |
<< | 왼쪽 시프트 |
>> | 오른쪽 시프트 |
5 & 35 = 0101
3 = 0011 0101
& 0011
------
0001결과는 1입니다.
5 & 3 = 1&&는 논리 AND
&는 비트 AND다릅니다.
| 연산자 | 의미 |
|---|---|
&& | 참/거짓 조건 연결 |
& | 비트 단위 AND |
연산자 우선순위
C에서는 연산자마다 먼저 계산되는 순서가 있습니다.
1 + 2 * 3곱셈이 덧셈보다 먼저입니다.
1 + 6 = 7그래서 결과는 9가 아니라 7입니다.
대표 우선순위는 이렇게 기억하면 충분합니다.
| 우선순위 | 연산자 |
|---|---|
| 1 | 괄호 () |
| 2 | 증감 ++, --, NOT ! |
| 3 | 곱셈, 나눗셈, 나머지 *, /, % |
| 4 | 덧셈, 뺄셈 +, - |
| 5 | 관계 >, <, >=, <= |
| 6 | 같음 비교 ==, != |
| 7 | 논리 AND && |
| 8 | 논리 OR ` |
| 9 | 대입 =, +=, -=, ... |
가장 안전한 방법은 괄호를 쓰는 것입니다.
result = (a + b) * c;괄호가 있으면 헷갈리지 않습니다.
조건문
조건문이란?
조건문은 조건에 따라 실행할 문장을 고르는 문법입니다.
대표 조건문은 다음과 같습니다.
if
if-else
else if
switchC프로그래밍 범위의 분기 제어문에는 if, switch, goto가 포함되어 있습니다.
if문
if (조건) {
조건이 참일 때 실행할 문장;
}int score = 80;
if (score >= 60) {
printf("합격");
}score >= 60이 참이므로 출력은:
합격만약 score가 50이면 조건이 거짓이므로 아무것도 출력하지 않습니다.
if-else문
조건이 참일 때와 거짓일 때를 나누고 싶으면 else를 씁니다.
if (조건) {
참일 때 실행;
} else {
거짓일 때 실행;
}int score = 50;
if (score >= 60) {
printf("합격");
} else {
printf("불합격");
}불합격else if문
조건이 여러 개일 때는 else if를 씁니다.
int score = 85;
if (score >= 90) {
printf("A");
} else if (score >= 80) {
printf("B");
} else if (score >= 70) {
printf("C");
} else {
printf("F");
}score >= 90 ? 거짓
score >= 80 ? 참
B 출력
나머지는 검사하지 않음Belse if는 위에서부터 차례대로 검사하고,
처음 참인 것 하나만 실행합니다.조건식에서 0과 0이 아닌 값
C언어에서는 조건식에서 0은 거짓, 0이 아닌 값은 참입니다.
if (0) {
printf("A");
} else {
printf("B");
}B왜냐하면 0은 거짓이기 때문입니다.
if (3) {
printf("A");
} else {
printf("B");
}A왜냐하면 3은 0이 아닌 값이라 참으로 처리되기 때문입니다.
0 = 거짓
0이 아닌 값 = 참중첩 if문
if문 안에 if문을 넣을 수 있습니다.
if (score >= 60) {
if (score >= 90) {
printf("우수 합격");
} else {
printf("보통 합격");
}
} else {
printf("불합격");
}score >= 60 참
score >= 90 참
우수 합격 출력score >= 60 참
score >= 90 거짓
보통 합격 출력score >= 60 거짓
불합격 출력switch문
switch문은 하나의 값에 따라 여러 경우 중 하나를 선택할 때 씁니다.
switch (값) {
case 값1:
문장;
break;
case 값2:
문장;
break;
default:
문장;
}int menu = 2;
switch (menu) {
case 1:
printf("김밥");
break;
case 2:
printf("라면");
break;
case 3:
printf("떡볶이");
break;
default:
printf("잘못된 선택");
}라면왜냐하면 menu가 2라서 case 2가 실행됩니다.
break가 중요한 이유
switch문에서 break를 빼먹으면 다음 case까지 계속 실행될 수 있습니다.
int menu = 2;
switch (menu) {
case 1:
printf("김밥");
case 2:
printf("라면");
case 3:
printf("떡볶이");
default:
printf("잘못된 선택");
}라면떡볶이잘못된 선택왜냐하면 case 2에서 시작한 뒤 break가 없어서 아래로 계속 내려가기 때문입니다.
그래서 보통 각 case 끝에는 break를 씁니다.
case 2:
printf("라면");
break;if와 switch 비교
| 구분 | if문 | switch문 |
|---|---|---|
| 조건 형태 | 범위 비교 가능 | 특정 값 비교에 적합 |
| 예 | score >= 60 | menu == 1 |
| 복잡한 조건 | 좋음 | 불편함 |
| case 사용 | 없음 | 있음 |
| break 필요 | 보통 필요 없음 | 보통 필요 |
예를 들어 점수 등급은 if가 자연스럽습니다.
if (score >= 90) ...
else if (score >= 80) ...메뉴 선택은 switch가 자연스럽습니다.
switch (menu) {
case 1:
case 2:
case 3:
}반복문
반복문이란?
반복문은 같은 코드를 여러 번 실행할 때 씁니다.
대표 반복문은 세 가지입니다.
for
while
do~whileC프로그래밍 범위의 반복 제어문에도 for, while, do~while이 포함됩니다.
for문
for문은 반복 횟수가 비교적 분명할 때 많이 씁니다.
for (초기식; 조건식; 증감식) {
반복할 문장;
}int i;
for (i = 1; i <= 5; i++) {
printf("%d ", i);
}i = 1
i <= 5 참 → 1 출력 → i++
i = 2
i <= 5 참 → 2 출력 → i++
i = 3
i <= 5 참 → 3 출력 → i++
i = 4
i <= 5 참 → 4 출력 → i++
i = 5
i <= 5 참 → 5 출력 → i++
i = 6
i <= 5 거짓 → 반복 종료1 2 3 4 5for문 구조 자세히 보기
for (i = 1; i <= 5; i++)| 부분 | 의미 |
|---|---|
i = 1 | 처음에 한 번 실행 |
i <= 5 | 반복할지 검사 |
i++ | 반복 한 번 끝날 때마다 실행 |
반복 순서는 다음과 같습니다.
초기식
→ 조건식 검사
→ 반복문 몸체 실행
→ 증감식
→ 조건식 검사
→ 반복문 몸체 실행
→ 증감식
→ ...조건식이 거짓이 되면 반복이 끝납니다.
1부터 10까지 합 구하기
int i;
int sum = 0;
for (i = 1; i <= 10; i++) {
sum += i;
}
printf("%d", sum);sum = 0
sum = 0 + 1 = 1
sum = 1 + 2 = 3
sum = 3 + 3 = 6
...
sum = 45 + 10 = 5555이 문제는 반복문을 이해하는 기본 중의 기본입니다.
while문
while문은 조건이 참인 동안 반복합니다.
while (조건) {
반복할 문장;
}int i = 1;
while (i <= 5) {
printf("%d ", i);
i++;
}1 2 3 4 5for문과 같은 결과입니다.
for문과 while문 비교
| 구분 | for문 | while문 |
|---|---|---|
| 주로 쓰는 경우 | 반복 횟수가 분명할 때 | 조건 중심 반복 |
| 구조 | 초기식, 조건식, 증감식이 한 줄에 있음 | 조건식만 앞에 있음 |
| 예 | 1부터 10까지 반복 | 입력이 0이 아닐 동안 반복 |
예를 들어 1부터 10까지 더하는 것은 for가 자연스럽습니다.
for (i = 1; i <= 10; i++)반면 사용자가 0을 입력할 때까지 반복하는 것은 while이 자연스럽습니다.
while (num != 0)do~while문
do~while문은 일단 한 번 실행한 다음 조건을 검사합니다.
do {
반복할 문장;
} while (조건);int i = 1;
do {
printf("%d ", i);
i++;
} while (i <= 5);1 2 3 4 5while과 비슷하지만 결정적인 차이가 있습니다.
do~while은 조건이 처음부터 거짓이어도 최소 한 번은 실행됩니다.int i = 10;
do {
printf("%d", i);
} while (i < 5);10왜냐하면 먼저 실행하고 나중에 조건을 검사하기 때문입니다.
반복문 3개 비교
| 구분 | for | while | do~while |
|---|---|---|---|
| 조건 검사 시점 | 실행 전 | 실행 전 | 실행 후 |
| 최소 실행 횟수 | 0번 가능 | 0번 가능 | 최소 1번 |
| 주 사용 상황 | 반복 횟수 명확 | 조건 중심 | 메뉴 입력처럼 최소 한 번 필요 |
for = 횟수 반복
while = 조건 반복
do~while = 일단 한 번흐름 제어와 코드 추적
break
break는 반복문이나 switch문을 즉시 빠져나갑니다.
int i;
for (i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
printf("%d ", i);
}i = 1 출력
i = 2 출력
i = 3 출력
i = 4 출력
i = 5 → break → 반복 종료1 2 3 4break = 반복문 탈출continue
continue는 이번 반복만 건너뛰고 다음 반복으로 넘어갑니다.
int i;
for (i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
printf("%d ", i);
}i = 1 출력
i = 2 출력
i = 3 → continue → 출력 건너뜀
i = 4 출력
i = 5 출력1 2 4 5continue = 이번 한 번만 건너뛰기
break = 아예 반복 종료break와 continue 비교
| 구분 | 의미 | 결과 |
|---|---|---|
break | 반복문 전체 종료 | 반복문 밖으로 나감 |
continue | 현재 반복만 건너뜀 | 다음 반복으로 넘어감 |
예를 들어 1부터 10까지 숫자를 보다가 5에서 멈추려면 break.
if (i == 5) break;1부터 10까지 출력하되 5만 빼고 싶으면 continue.
if (i == 5) continue;중첩 반복문
반복문 안에 반복문을 넣을 수 있습니다.
대표 예는 구구단입니다.
int i, j;
for (i = 2; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%d x %d = %d\n", i, j, i * j);
}
}i = 2일 때 j가 1부터 9까지 반복됩니다.
i = 3일 때 j가 1부터 9까지 반복됩니다.
...
i = 9일 때 j가 1부터 9까지 반복됩니다.총 몇 번 실행될까요?
8단 × 9번 = 72번중첩 반복문은 자료구조에서 2차원 배열, 행렬, 정렬을 배울 때 자주 나옵니다.
코드 추적 예제 1
다음 코드의 출력은?
int i;
for (i = 1; i <= 5; i++) {
printf("%d", i);
}i의 변화는 다음과 같습니다.
| 반복 | i | 조건 i <= 5 | 출력 |
|---|---|---|---|
| 1 | 1 | 참 | 1 |
| 2 | 2 | 참 | 2 |
| 3 | 3 | 참 | 3 |
| 4 | 4 | 참 | 4 |
| 5 | 5 | 참 | 5 |
| 종료 | 6 | 거짓 | 없음 |
12345코드 추적 예제 2
다음 코드의 출력은?
int i;
int sum = 0;
for (i = 1; i <= 5; i++) {
sum += i;
}
printf("%d", sum);계산은 다음과 같습니다.
| i | sum 변화 |
|---|---|
| 1 | 0 + 1 = 1 |
| 2 | 1 + 2 = 3 |
| 3 | 3 + 3 = 6 |
| 4 | 6 + 4 = 10 |
| 5 | 10 + 5 = 15 |
15코드 추적 예제 3
다음 코드의 출력은?
int i;
for (i = 1; i <= 5; i++) {
if (i % 2 == 0) {
printf("%d", i);
}
}i를 하나씩 살펴보겠습니다.
| i | i % 2 == 0 | 출력 |
|---|---|---|
| 1 | 거짓 | 없음 |
| 2 | 참 | 2 |
| 3 | 거짓 | 없음 |
| 4 | 참 | 4 |
| 5 | 거짓 | 없음 |
24짝수만 출력하는 코드입니다.
출제 예시형 코드
C프로그래밍 예시문제에 이런 코드가 나옵니다. 아직 배열은 2장 4절에서 자세히 배우지만, 반복문과 조건문 관점에서 먼저 살펴보겠습니다.
#include <stdio.h>
int moon[] = {1,2,3,4,5,6,7,8,9,10};
void main(void)
{
int a, sum = 0;
for (a = 0; a < 8; ++a)
if (moon[a] % 2 == 0)
sum += moon[a];
printf("%d", sum);
}이 문제의 핵심은 세 가지입니다.
a는 0부터 7까지 반복됩니다.
moon[a] 중 짝수만 더합니다.
moon[0]부터 moon[7]까지만 봅니다.배열 값은 다음과 같습니다.
| a | moon[a] |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 5 | 6 |
| 6 | 7 |
| 7 | 8 |
2, 4, 6, 82 + 4 + 6 + 8 = 2020이 예시문제의 정답도 20입니다.
무한 반복
반복문 조건이 계속 참이면 무한 반복이 됩니다.
int i = 1;
while (i <= 5) {
printf("%d", i);
}이 코드는 위험합니다.
왜냐하면 i가 증가하지 않기 때문입니다.
i는 계속 1
i <= 5는 계속 참
무한 반복int i = 1;
while (i <= 5) {
printf("%d", i);
i++;
}반복문에서는 조건을 언젠가 거짓으로 만드는 변화가 있어야 합니다.
goto문
C에는 goto문도 있습니다.
goto label;
label:
문장;#include <stdio.h>
int main(void) {
goto end;
printf("A");
end:
printf("B");
return 0;
}B왜냐하면 goto end; 때문에 printf("A");를 건너뛰고 end: 위치로 이동하기 때문입니다.
하지만 goto는 프로그램 흐름을 복잡하게 만들기 때문에 일반적으로 자주 쓰지 않습니다.
시험 범위에는 들어 있지만, 실전에서는 다음 정도만 기억해 둡니다.
goto = 지정한 라벨 위치로 강제 이동C 제어 흐름 전체 정리
C 프로그램은 기본적으로 위에서 아래로 실행됩니다.
하지만 제어문을 만나면 흐름이 바뀝니다.
| 제어문 | 역할 |
|---|---|
if | 조건이 참이면 실행 |
if-else | 참/거짓에 따라 선택 |
switch | 값에 따라 case 선택 |
for | 횟수 중심 반복 |
while | 조건 중심 반복 |
do~while | 최소 한 번 실행 후 반복 |
break | 반복문 또는 switch 탈출 |
continue | 현재 반복 건너뛰기 |
goto | 라벨로 강제 이동 |
자주 혼동되는 출제 포인트
혼동 포인트 1. 정수 나눗셈
printf("%d", 5 / 2);22.5가 아닙니다.
혼동 포인트 2. 나머지 연산자
5 % 21짝수 판별에 자주 쓰입니다.
num % 2 == 0혼동 포인트 3. =와 ==
a = 10; // 대입
a == 10; // 비교조건문에서는 보통 ==를 써야 합니다.
혼동 포인트 4. &&와 &
&& = 논리 AND
& = 비트 AND둘은 다릅니다.
혼동 포인트 5. 후위 증가와 전위 증가
b = a++;먼저 b에 a를 넣고, 나중에 a 증가.
b = ++a;먼저 a 증가, 그다음 b에 넣음.
혼동 포인트 6. switch의 break
break가 없으면 다음 case까지 이어서 실행될 수 있습니다.
혼동 포인트 7. do~while은 최소 한 번 실행
do {
실행;
} while (조건);조건이 거짓이어도 일단 한 번은 실행됩니다.
혼동 포인트 8. for문의 범위
for (i = 0; i < 8; i++)0, 1, 2, 3, 4, 5, 6, 7총 8번 반복됩니다.
i = 8은 실행하지 않습니다.
이번 절의 핵심 정리
산술 연산자
+ - * / %관계 연산자
> < >= <= == !=논리 연산자
&& || !조건문
if (조건) {
문장;
} else {
문장;
}switch문
switch (값) {
case 값1:
문장;
break;
default:
문장;
}for문
for (초기식; 조건식; 증감식) {
반복할 문장;
}while문
while (조건) {
반복할 문장;
}do~while문
do {
반복할 문장;
} while (조건);break와 continue
break = 반복 종료
continue = 이번 반복만 건너뜀핵심 한 문장
이번 절의 핵심을 한 문장으로 정리하면 다음과 같습니다.
연산자는 값을 계산하고 비교하며, 조건문은 실행할 길을 선택하고, 반복문은 같은 일을 여러 번 실행하게 해줍니다.
연산자 = 계산
조건문 = 선택
반복문 = 반복확인 문제
문제 1
다음 코드의 출력 결과는?
printf("%d", 7 / 2);① 2 ② 3 ③ 3.5 ④ 4
문제 2
다음 코드의 출력 결과는?
printf("%d", 7 % 2);① 0 ② 1 ③ 2 ④ 3
문제 3
C언어에서 “같습니다”를 비교하는 연산자는?
① =
② ==
③ !=
④ >=
문제 4
다음 조건이 의미하는 것은?
age >= 13 && age <= 19① age가 13보다 작거나 19보다 큽니다 ② age가 13 이상이고 19 이합니다 ③ age가 13이 아니고 19도 아닙니다 ④ age가 무조건 19보다 큽니다
문제 5
다음 코드의 출력 결과는?
int a = 5;
int b;
b = a++;
printf("%d %d", a, b);① 5 5
② 5 6
③ 6 5
④ 6 6
문제 6
다음 코드의 출력 결과는?
int a = 5;
int b;
b = ++a;
printf("%d %d", a, b);① 5 5
② 5 6
③ 6 5
④ 6 6
문제 7
다음 코드의 출력 결과는?
int i;
for (i = 1; i <= 3; i++) {
printf("%d", i);
}① 123
② 012
③ 234
④ 111
문제 8
다음 코드의 출력 결과는?
int i;
int sum = 0;
for (i = 1; i <= 4; i++) {
sum += i;
}
printf("%d", sum);① 4 ② 6 ③ 10 ④ 15
문제 9
다음 코드의 출력 결과는?
int i;
for (i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
printf("%d", i);
}① 12345
② 1245
③ 12
④ 345
문제 10
다음 중 do~while문의 특징으로 맞는 것은?
① 조건이 거짓이면 절대 실행되지 않습니다 ② 반드시 정확히 한 번만 실행됩니다 ③ 조건 검사 전에 최소 한 번은 실행됩니다 ④ 반복문 안에서만 switch를 사용할 수 있습니다
정답과 해설은 절별 확인문제 정답해설에서 확인합니다.
다음 2장 3절은 함수, 변수 범위, 재귀입니다. 2장 2절에서 반복으로 여러 번 실행하는 법을 배웠다면, 2장 3절에서는 코드를 덩어리로 묶어서 다시 사용하는 법을 배웁니다.