5강 · 제4장 · 95~135쪽 · 약 75분
선택 제어문과 반복 제어문
if문 4가지 형태·switch·goto의 선택 제어문, for·while·do~while의 반복 제어문, break·continue까지 교재 예제 4-1~4-21과 예제 프로그램 4-1~4-4로 익힙니다. (교재 제4장 95~135쪽)
학습 목표
- 프로그램의 세 가지 제어 구조(순차·선택·반복)를 구분하고 제어문이 왜 필요한지 설명한다
- if문의 네 가지 형태(단순 if, if~else, 다중 if~else, if~else if~else)를 상황에 맞게 쓴다
- switch~case문에서 break가 빠지면 어떤 일이 생기는지 설명하고, goto문의 제약을 안다
- for·while·do~while문의 형식과 실행 순서를 설명하고 서로 바꿔 쓸 수 있다
- 의도하지 않은 무한 루프(음수 입력, 실수 등가 비교)를 찾아 고친다
- break문과 continue문의 차이를 예제로 확인한다
왜 이 강이 필요한가?
4강까지 배운 프로그램은 모두 위에서 아래로 한 줄씩 실행되었습니다. 그런데 실제 프로그램은 "점수가 90점 이상이면 A", "1부터 100까지 더하기"처럼 조건에 따라 갈라지고, 같은 일을 여러 번 반복해야 합니다. 이렇게 실행 순서를 바꾸는 명령문이 제어문입니다.
이 강은 교재 제4장(선택 제어문과 반복 제어문) 의 95~135쪽 범위이며, LMS 강의내용 순서를 따라 다음과 같이 구성합니다.
- 선택 제어문 —
if문(4가지 형태),switch문,goto문 - 반복 제어문 —
for문,while문,do~while문 - 기타 제어문 —
break문,continue문
교재의 본문 예제(4-1 ~ 4-21), 두 개의 생각해 보기, 장 끝의 예제 프로그램 4-1 ~ 4-4를 모두 실행 가능한 코드로 담았습니다.
본문의 C 예제는 코드 아래에 실행 칸이 붙습니다. 인라인 실행 칸에는 입력 상자가 없어서, scanf가 필요한 예제는 sscanf(고정 문자열 파싱)로 입력을 흉내 내고, 교재 실행 결과처럼 보이도록 입력값을 함께 출력합니다. 코드 속 입력 문자열(예: "75")을 바꿔 다른 경우도 실행해 보세요. 실제 키보드 입력 실습은 맨 아래 종합 실습(입력 상자 있음)에서 합니다.
1. 프로그램의 제어 구조
| 제어 구조 | 의미 | C 언어의 제어문 |
|---|---|---|
| 순차적(sequence) 수행 | 특별히 지정하지 않는 한 위에서 아래로 다음 문장을 수행 | (제어문 없음) |
| 선택적(select) 수행 | 조건에 따라 특정 부분으로 실행을 옮김(분기) | if, switch, goto |
| 반복적(looping) 수행 | 특정 부분을 일정 횟수(또는 조건이 만족되는 동안) 반복 | for, while, do~while |
여기에 반복·분기를 중간에 끊거나 건너뛰는 break, continue가 더해집니다. 이 제어문들 덕분에 C는 구조화된 프로그램(structured program) 을 작성할 수 있습니다.
2. 선택 제어문
선택 제어문은 주어진 조건에 따라 실행이 분기하여 다른 명령문을 수행하게 합니다. C에는 if문, switch문, 무조건 분기를 하는 goto문이 있습니다.
2.1 단순 if문
형식 1) if (조건) 형식 2) if (조건) {
명령문1; 명령문1;
명령문2; ...
명령문n;
}
- 기능: 조건을 만족(참)하면 명령문1(또는 중괄호 안)을 수행하고, 만족하지 않으면 건너뜁니다. 명령문2(중괄호 밖)는 어느 경우든 수행됩니다.
- 조건에 따라 수행할 명령문이 2개 이상이면 반드시 중괄호
{ }로 묶어야 합니다.
교재 4-1 — 단순 if문 [예 1] (입력 75):
이 예제 실행
실행 결과가 여기에 표시됩니다.
120을 넣으면 입력한 정수가 100보다 작음. 줄이 사라지고 a = 120만 출력됩니다.
교재 4-2 — 단순 if문 [예 2] (중괄호 블록):
이 예제 실행
실행 결과가 여기에 표시됩니다.
2.2 if~else문
형식: if (조건)
명령문1;
else
명령문2;
- 기능: 조건이 참이면 명령문1, 거짓이면 명령문2를 수행합니다. 둘 중 정확히 하나만 실행됩니다.
교재 4-3 — if~else문 [예 1] (입력 75):
이 예제 실행
실행 결과가 여기에 표시됩니다.
교재 4-4 — if~else문 [예 2] (짝수·홀수 판별, 입력 7):
이 예제 실행
실행 결과가 여기에 표시됩니다.
2.3 다중 if~else문 (if문 안에 if문)
형식: if (조건1)
if (조건2)
명령문1;
else
명령문2;
else
명령문3;
- 기능: 조건1·조건2가 모두 참 → 명령문1, 조건1 참·조건2 거짓 → 명령문2, 조건1 거짓 → 명령문3.
- 중괄호가 없으면
else는 가장 가까운if와 짝을 이룹니다. 범위를 혼동하기 쉬우므로 중괄호로 범위를 분명히 하는 것이 좋습니다.
교재 4-5 — 다중 if~else문 [예 1] (음수·0·양수, 입력 -5):
이 예제 실행
실행 결과가 여기에 표시됩니다.
교재 4-6 — 다중 if~else문 [예 2] (월의 말일·윤년, 입력 2020 2):
이 예제 실행
실행 결과가 여기에 표시됩니다.
윤년 조건은 (4의 배수이면서 100의 배수가 아님) 또는 (400의 배수) 입니다. 교재는
year % 4 == 0 && year % 100 != 0 || year % 400 == 0처럼 괄호 없이 쓰는데, 4강의 우선순위대로&&가||보다 먼저 묶이므로 결과는 같습니다. 다만 GCC가 "괄호를 넣으라"는 경고(-Wparentheses)를 내므로 여기서는 괄호를 넣었습니다.
2.4 다중 ifelse ifelse문
형식: if (조건1)
명령문1;
else if (조건2)
명령문2;
else if (조건3)
명령문3;
else
명령문4;
- 기능: 조건1부터 차례로 검사해 처음으로 참이 된 조건의 명령문 하나만 실행하고 전체를 빠져나갑니다. 참인 조건이 하나도 없으면 마지막
else를 실행합니다. - 조건이 여러 개인 다중 선택에 자주 쓰입니다.
교재 4-7 — 다중 ifelse ifelse문 (학점, 입력 80):
이 예제 실행
실행 결과가 여기에 표시됩니다.
score >= 80을 검사할 때는 이미 score >= 90이 거짓으로 판정된 뒤이므로 score >= 80 && score < 90처럼 쓸 필요가 없습니다.
생각해 보기: if문의 조건에서 참과 거짓은 어떻게 판별할까? 4강에서 관계 연산자의 결과는 참이면 1, 거짓이면 0이라고 했습니다. 그렇다면 조건에는 1과 0만 올 수 있을까요? 그렇지 않습니다. C는 0만 거짓으로, 0이 아닌 모든 값을 참으로 인식합니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
a를 0이나 -3으로 바꿔 결과를 예측해 보세요.
2.5 switch문
형식: switch (수식) {
case 값1 : 명령문1;
case 값2 : 명령문2;
...
default : 명령문n;
}
- 기능: 수식의 값과 일치하는 case로 분기해 실행합니다. 일치하는 case가 없으면
default를 실행하며,default는 생략할 수 있습니다. if는 참·거짓 두 갈래에 알맞고,switch는 여러 갈래(다중 선택) 를 더 간결하게 표현합니다.- 수식에는 정수형(문자 포함) 만 쓸 수 있습니다. 실수나 문자열은 안 됩니다.
- case 값은 하나의 상수여야 하며, 값과 명령문 사이에는 콜론(
:) 을 씁니다.
가장 주의할 점: 일치하는 case를 찾으면, 그 뒤의 case들은 비교 없이 계속 실행됩니다(fall-through). 이를 막는 것이 break입니다.
교재 4-8 — break문을 사용하지 않은 경우 (입력 10):
이 예제 실행
실행 결과가 여기에 표시됩니다.
나머지가 0이므로 case 0:만 실행되어야 할 것 같지만, 아래의 모든 case가 실행됩니다. 실행 칸에서는 GCC가 this statement may fall through(-Wimplicit-fallthrough) 경고도 함께 보여 줍니다. 컴파일러조차 "여기서 break를 빠뜨린 것 아니냐"고 묻는 셈입니다.
교재 4-9 — break문을 사용한 경우 (입력 10):
이 예제 실행
실행 결과가 여기에 표시됩니다.
교재 4-10 — switch문의 사용 (열거형 값으로 분기):
이 예제 실행
실행 결과가 여기에 표시됩니다.
열거형 상수(Do=0, Re=1, …)는 정수이므로 case 값으로 쓸 수 있습니다. for문은 바로 뒤 3절에서 자세히 배웁니다.
2.6 goto문
형식: 레이블:
...
goto 레이블;
- 기능: 프로그램 수행 도중 레이블이 붙은 곳으로 무조건 제어를 옮깁니다. 레이블 이름 뒤에는 콜론(
:) 을 붙입니다. - 보통 여러 겹 중첩된 루프를 한꺼번에 빠져나올 때 사용합니다.
교재는 다음처럼 반복문·if문의 범위 밖에서 안으로 들어가는 goto를 쓰면 안 된다고 설명합니다.
예 1) for문 안으로 예 2) if문 안으로 예 3) 다른 for문 안으로
for (...) { if (...) { for (...) {
abc: <----+ abc: <----+ goto abc; ----+
} | } | } |
goto abc; -----+ goto abc; -----+ for (...) { |
abc: <-------+
}
표준 C 문법만 보면 위 코드도 컴파일은 됩니다. 하지만 초기식·조건 검사를 건너뛰고 블록 한가운데로 뛰어드는 것이라 동작이 엉망이 되기 쉽고, 가변 길이 배열 같은 경우에는 실제로 컴파일 오류가 납니다. "블록 밖에서 안으로는 goto하지 않는다" 로 기억하세요.
goto문은 원하는 곳으로 마음대로 이동할 수 있어 편리해 보이지만, 실행 순서가 복잡해져 이해·수정이 어렵고 오류의 원인이 되기 쉬우므로 가능하면 사용하지 않는 것이 좋습니다.
교재 4-11 — goto문 [예 1] (입력 2):
이 예제 실행
실행 결과가 여기에 표시됩니다.
교재 4-12 — goto문 [예 2] (중첩 루프를 한 번에 탈출, 입력 6 → 7 → 8):
이 예제 실행
실행 결과가 여기에 표시됩니다.
break는 자신을 둘러싼 루프 하나만 빠져나가므로, for와 while 두 겹을 한 번에 끝내려면 이런 경우에 goto가 쓰입니다.
3. 반복 제어문
반복 제어문은 지정한 문장들을 조건이 만족되는 동안 반복 수행합니다. for문은 주로 반복 횟수가 정해진 경우에, while·do~while문은 반복 횟수를 미리 알기 어려운 경우에 씁니다. 반복되는 부분을 루프(loop) 라고 합니다.
3.1 for문
형식: for (초기식; 조건식; 증감식) {
반복 실행될 문장;
}
실행 순서는 다음과 같습니다.
- 초기식 — for문이 시작될 때 딱 한 번 실행 (반복 횟수를 셀 변수 초기화)
- 조건식 검사 — 참이면 루프 안 문장 실행, 거짓이면 루프를 빠져나감
- 루프 안 문장 실행
- 증감식 실행 (보통 카운트를 1 증가/감소) → 다시 2번으로
반복할 문장이 2개 이상이면 중괄호로 묶어 루프와 상관없는 문장과 구별합니다.
교재 4-13 — for문 (1부터 10까지의 합):
이 예제 실행
실행 결과가 여기에 표시됩니다.
for문의 초기식·조건식·증감식은 여러 개를 쓰거나 생략할 수 있습니다. 단, 가운데 세미콜론 두 개(;)는 반드시 있어야 합니다.
| 형태 | 예 | 설명 |
|---|---|---|
| 초기식·증감식이 여러 개 | for (i = 1, j = 1; i <= 100; i++, j = j + 2) | 콤마(,)로 나열 |
| 초기식 생략 | i = 0; for ( ; i <= 10; i++) | 루프 변수를 for 앞에서 초기화 |
| 조건식 생략 | for (i = 0; ; i++) { if (i <= 10) … else break; } | 루프 안의 if문 + break가 조건식 역할 |
| 증감식 생략 | for (i = 0; i <= 10; ) { …; i = i + 1; } | 루프 안에서 증감 |
| 모두 생략 | for ( ; ; ) { … } | 무한 루프 |
교재의 생략 예들을 한 프로그램에서 실행해 보면 모두 0~10의 합 55를 구합니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
for ( ; ; )처럼 셋 다 생략하면 조건이 항상 참인 무한 루프가 되므로, 안에서 break로 빠져나와야 합니다(4.1절).
다중 for문은 for문 안에 또 다른 for문이 있는 형태입니다. 각 for문의 범위는 서로 교차해서는 안 되고 포함되어야 합니다. 바깥 for가 한 번 돌 때 안쪽 for는 처음부터 끝까지 다 돕니다.
교재 4-14 — 다중 for문 (구구단 표):
이 예제 실행
실행 결과가 여기에 표시됩니다.
3.2 while문
형식: while (조건식) {
반복 실행될 문장;
}
- 기능: 먼저 조건식을 검사해 참이면 루프 안 문장을 실행하고, 다시 조건식으로 돌아가 검사합니다. 거짓이 되면 루프 다음 문장으로 갑니다.
- 초기식과 증감식이 형식에 없으므로, 루프 앞에서 초기화하고 루프 안에서 증감해야 합니다.
교재 4-15 — while문 (1부터 10까지의 합):
이 예제 실행
실행 결과가 여기에 표시됩니다.
반복할 문장이 필요 없을 때는 세미콜론만 있는 공백 문장(null statement) 을 씁니다. 다음은 입력에서 공백 문자를 건너뛰는 코드입니다. 세미콜론을 다음 줄에 따로 쓰면 공백 문장임이 더 잘 드러납니다.
while ((c = getchar()) == ' ')
; /* 공백 문장: 아무 것도 하지 않고 다음 문자를 읽음 */
while ((c = getchar()) == ' ') ; /* 같은 뜻, 한 줄로 */
교재 4-16 — 다중 while문 (구구단 표):
이 예제 실행
실행 결과가 여기에 표시됩니다.
j = 2;를 바깥 while 앞으로 옮기면 어떻게 될지 예측한 뒤 실행해 보세요. (첫 행만 곱셈이 출력되고 나머지 행은 빈 줄이 됩니다. 두 번째 행부터는 j가 이미 10이라 안쪽 while 조건이 처음부터 거짓이기 때문입니다.)
(1) while문의 무한 루프
조건식 자리에 0이 아닌 값(대표적으로 1)을 쓰면 조건이 항상 참이므로 무한 루프가 됩니다. 무한 루프는 실수로만 생기는 것이 아니라, break와 함께 일부러 만들기도 합니다(4.1절 예제 4-20).
while (1) {
...
if (끝낼 조건) break;
}
(2) while문 사용 시 유의 사항 — 의도하지 않은 무한 루프
교재 4-17 — [예 1] 계승(n!) 구하기. 사용자는 어떤 값이든 입력할 수 있다는 점을 잊으면 안 됩니다.
unsigned long int f;
int n = 0;
printf("계승을 구할 수를 입력하세요 : ");
scanf("%d", &n);
f = n;
printf("%d!=", n);
while (--n) /* 양수가 아닌 값이 입력되면 n이 0을 지나쳐 버림 */
f *= n;
printf("%lu\n", f);
5를 넣으면 --n이 4, 3, 2, 1, 0이 되어 0에서 멈추지만, -5를 넣으면 --n은 -6, -7, …로 영원히 0이 되지 않습니다(정수 범위를 넘어가 한 바퀴 돌 때까지 약 42억 번 돌며, 부호 있는 정수의 오버플로는 C에서 정의되지 않은 동작입니다). 교재의 권고대로 조건을 --n > 0으로 고친 버전입니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
교재 4-18 — [예 2] 실수의 등가(==, !=) 비교로 인한 무한 루프:
float x = 0.0;
float sum = 0.0;
while (x != 9.9) { /* x가 정확히 9.9가 되는 순간은 오지 않는다! */
sum += x;
x += 0.1;
}
printf("sum = %f\n", sum);
컴퓨터는 0.1 같은 실수를 정확히 표현하지 못하므로, 0.0에 0.1을 99번 더해도 정확히 9.9가 되지 않습니다. 그래서 x != 9.9는 계속 참이고 루프가 끝나지 않습니다. 실수에는 등가 비교 대신 while (x < 9.9) 처럼 대소 비교를 쓰세요. 아래는 실제로 어떤 값이 되는지 확인하는 코드입니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
99번 더한 뒤의 x는 9.9000015…로 9.9와 아주 조금 다릅니다. 그래서 x != 9.9는 영원히 참이지만 x < 9.9는 여기서 거짓이 되어 루프가 끝납니다. 실수 오차는 경우에 따라 반복이 한 번 더 돌거나 덜 돌게 만들 수도 있으므로, 반복 횟수는 실수가 아닌 정수 카운터로 세는 편이 안전합니다.
3.3 do~while문
형식: do {
반복 실행될 문장;
} while (조건식); <- 세미콜론 필수!
- 기능: 루프 안 문장을 먼저 실행한 뒤 조건을 검사해 반복 여부를 결정합니다.
- 그래서
while문과 달리 최소 한 번은 반드시 실행됩니다. while (조건식)뒤의 세미콜론(;) 을 빼먹으면 컴파일 오류입니다.
교재 4-19 — do~while문 (입력 10):
이 예제 실행
실행 결과가 여기에 표시됩니다.
while과 do~while의 차이는 처음부터 조건이 거짓일 때 드러납니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
생각해 보기: for·while·do~while문의 차이와 용도
- for문 — 초기식·조건식·증감식이 한 줄에 모여 있어 반복 횟수가 정해진 경우(예: 1~100의 합)에 알맞고, for문 한 줄만 보고도 반복 횟수를 파악·변경하기 쉽습니다.
- while문 — 반복 조건만 있고 초기식·증감식은 따로 써야 합니다. 사용자 입력처럼 언제 끝날지 모르는 반복에 많이 씁니다. 조건에 따라 한 번도 실행되지 않을 수 있습니다.
- do~while문 — while과 같지만 실행한 뒤 검사하므로 최소 한 번은 실행됩니다.
세 반복문은 서로 바꿔 쓸 수 있습니다. for문을 while문으로 바꾸면 다음과 같습니다.
for문 같은 뜻의 while문
for (초기식; 조건식; 증감식) { 초기식;
명령문; while (조건식) {
} 명령문;
증감식;
}
예제 4-13(for)과 4-15(while)가 바로 이 관계입니다.
4. 기타 제어문
4.1 break문
- 반복문 실행 도중 강제로 반복문을 빠져나올 때 씁니다.
for,while,do~while루프와switch블록에서 쓸 수 있습니다. - break는 자신이 포함된 루프(블록) 하나만 벗어납니다. 중첩된 루프를 한 번에 모두 빠져나가지는 않습니다(그럴 때 2.6절의 goto 사용).
교재 4-20 — break문 (0이 입력될 때까지 합, 입력 10 → 20 → 30 → 0):
이 예제 실행
실행 결과가 여기에 표시됩니다.
break가 안쪽 루프 하나만 끝낸다는 것을 확인해 봅시다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
4.2 continue문
- 루프 실행 중 이번 회차의 나머지 문장을 건너뛰고 루프의 처음(조건 검사)으로 돌아갈 때 씁니다. break처럼 루프를 빠져나오는 것이 아닙니다.
for문에서는 continue 후 증감식으로 가고,while·do~while에서는 조건식으로 갑니다.- 반복문에서만 쓰며
switch에서는 쓰이지 않습니다. while·do~while에서 잘못 쓰면 무한 루프 위험이 있습니다. 증감식이 continue보다 뒤에 있으면 건너뛰어 버리기 때문입니다.
int i = 0;
while (i < 10) {
if (i % 2 == 1)
continue; /* i가 1이 되는 순간 i++를 영원히 건너뜀 -> 무한 루프 */
printf("%d ", i);
i++;
}
교재 4-21 — continue문 (음수는 건너뛰고 제곱근 출력, 입력 2 → -3 → 0):
이 예제 실행
실행 결과가 여기에 표시됩니다.
-3이 들어오면 continue가 아래 printf(제곱근 출력)를 건너뛰고 조건식 num != 0으로 돌아갑니다. 0이 입력되면 제곱근(0.000000)을 한 번 출력한 뒤 조건이 거짓이 되어 끝납니다.
| break | continue | |
|---|---|---|
| 동작 | 루프(또는 switch)를 완전히 빠져나감 | 이번 회차만 건너뛰고 다음 반복으로 |
| 사용 위치 | for, while, do~while, switch | for, while, do~while (switch ✗) |
| 이후 실행 | 루프 다음 문장 | for: 증감식 → 조건식 / while·do~while: 조건식 |
5. 예제 프로그램
예제 4-1 — 직각삼각형 찾기 (3중 for문)
정수 n을 입력받아 n 이하의 정수 변을 갖는 직각삼각형을 모두 구합니다. 피타고라스 정리 a² = b² + c² 를 만족하는 (a, b, c)를 3중 for문으로 전부 검사합니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
예제 4-2 — 양의 정수 5개의 합 (음수·0이면 재입력)
바깥 while은 5번, 안쪽 while은 양수가 들어올 때까지 반복합니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
num = 0; 줄을 지우면 두 번째부터는 안쪽 while 조건(num <= 0)이 처음부터 거짓이라 입력을 받지 않고 같은 값을 계속 더합니다. 직접 지워 보고 확인해 보세요.
예제 4-3 — 문자열의 숫자·공백·문자 개수 세기
getchar()로 한 글자씩 읽다가 엔터('\n') 를 만나면 멈추고, 각 글자가 숫자인지 공백인지 그 밖의 문자인지 셉니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
while ((ch = getchar()) != '\n')은 읽기 → 대입 → 비교를 한 줄에 하는 C의 대표적인 관용구입니다. 대입식을 괄호로 감싸야 !=보다 먼저 계산됩니다(4강 우선순위).
예제 4-4 — 대각선으로 별 출력하기
행 번호 i와 열 번호 j가 같을 때만 *를 찍으면 대각선이 됩니다. 두 번째 부분은 j를 5에서 거꾸로 세어 반대 방향 대각선을 만듭니다.
이 예제 실행
실행 결과가 여기에 표시됩니다.
6. 교재 예제와 이 사이트가 다른 점
| 교재에서 자주 보임 | 이 사이트 | 이유 |
|---|---|---|
void main() | int main(void) + return 0; | 표준 권장 형태 (1~4강과 동일) |
#pragma warning(disable:4996) | 불필요 | Visual Studio 전용. GCC/clang은 그대로 컴파일 |
본문 예제에서 키보드 scanf | 한 번 입력은 sscanf, 여러 번 입력은 값 목록(inputs[])에서 차례로 꺼냄 | 인라인 실행 칸에 입력 상자가 없음. 실제 입력은 아래 종합 실습 |
| 4-6: 중괄호 짝이 빠진 부분이 있음 | 중괄호를 맞추고 공통 printf를 하나로 합침 | 인쇄상 누락. 동작은 같음 |
4-11: goto TOO;, 레이블 TWO: | goto TWO; | 인쇄 오타. 레이블 이름이 달라 컴파일 오류 |
4-17: while(--n) (음수 입력 시 무한 루프) | 실행 칸은 while (--n > 0)으로 고친 버전 | 교재가 권고한 수정. 원본은 텍스트로만 제시 |
4-18: while(x != 9.9) 무한 루프 | 실행 칸은 while (x < 9.9) 버전 | 원본은 끝나지 않아 실행 칸이 시간 초과됨 |
예제 4-3: char ch;에 getchar() 대입 | int ch; | getchar()는 int를 반환(EOF 구분). 11강 파일 입출력에서 중요 |
| goto 금지 예 1)~3)을 "에러"로 설명 | "하지 말아야 할 코드"로 설명 | 표준 C는 대부분 컴파일은 허용하지만 동작이 망가지기 쉬움 |
7. 지금 실습할 것
아래 종합 실습은 입력 상자가 있는 실행 칸입니다. 이 강의 거의 모든 제어문(while (1) + break, continue, if~else if~else, switch)을 한 프로그램에 담았습니다. 「표준 입력」 칸에 95 82 -3 71 105 58 0처럼 점수를 공백으로 구분해 넣고 실행하세요. (비워 두면 입력이 없다는 안내가 나옵니다.)
- 그대로 실행해 점수별 학점과 평균을 확인
-3,105처럼 범위 밖 값이 continue로 건너뛰어지는 것을 확인0을 빼고 실행하면 어떻게 끝나는지(입력이 끝나scanf가 1이 아닌 값을 돌려줌) 확인switch의break하나를 지우고 실행해 fall-through를 관찰while (1)루프를do~while이나for ( ; ; )로 바꿔 같은 결과가 나오게 고쳐 보기- 위쪽 본문 예제 4-14의 구구단을
while문(4-16)을 보지 않고 직접 바꿔 써 보기
제어문 요약: 선택 — if / if~else / 중첩 if / if~else if~else, switch(case 끝에 break), goto(되도록 쓰지 않기). 반복 — for(횟수가 정해질 때), while(먼저 검사, 0회 가능), do~while(먼저 실행, 최소 1회). 기타 — break(루프 하나 탈출), continue(이번 회차 건너뛰기).
코드 실습 (C)
실행 결과가 여기에 표시됩니다.