중간고사 코드는 사칙연산 계산기다.
사용자가 10+20, 7/2처럼 연산식을 입력하면 연산자를 판단해 결과를 출력하고,0/0을 입력하면 프로그램을 종료한다.
1. 문제 핵심
| 요구 | 코드에서 필요한 처리 |
|---|---|
| 반복 입력 | while 반복 |
| 종료 조건 | 0/0 입력 검사 |
| 연산자 판단 | +, -, *, / 조건 분기 |
| 나눗셈 예외 | 두 번째 정수가 0인지 검사 |
| 출력 형식 | 정수 연산과 실수 나눗셈 출력 구분 |
2. 실행 흐름
반복 시작
연산식 입력
0/0이면 종료
연산자에 따라 계산
오류가 있으면 오류 메시지 출력
정상 계산이면 결과 출력
반복 종료
이 코드에서 iFlag는 "정상 계산이 되었는가"를 표시하는 변수다. 오류가 난 경우에는 결과 출력 단계로 넘어가지 않게 막아준다.
3. 핵심 코드 구조
while (TRUE)
{
printf("연산식을 입력 하시오 : ");
scanf("%d%c%d", &iNo1, &chOper, &iNo2);
if (chOper == '/' && iNo1 == 0 && iNo2 == 0)
{
printf("[END]프로그램종료");
break;
}
iFlag = 0;
iRes = 0;
if (chOper == '+')
{
iRes = iNo1 + iNo2;
iFlag = 1;
}
else if (chOper == '-')
{
iRes = iNo1 - iNo2;
iFlag = 1;
}
}
입력, 종료 판단, 연산 처리, 출력이 순서대로 배치되어 있어 손으로 실행 흐름을 따라가기 좋다.
4. 나눗셈 처리
나눗셈은 다른 연산보다 조건이 하나 더 필요하다. 두 번째 정수가 0이면 계산하면 안 된다.
else if (chOper == '/')
{
if (iNo2 != 0)
{
dRes = (double)iNo1 / iNo2;
iFlag = 1;
}
else
{
printf("[ERROR] 두 번째 정수가 0임\n");
}
}
(double)iNo1 형변환을 통해 정수 나눗셈이 아니라 실수 나눗셈을 수행한다.
5. 리뷰 포인트
좋았던 점:
- 종료 조건을 계산 전에 먼저 검사했다.
- 나눗셈의 0 예외를 따로 처리했다.
- 정상 계산 여부를
iFlag로 관리해 출력 조건을 분리했다. - 나눗셈 결과만
%.2lf로 출력하도록 구분했다.
보완하면 좋은 점:
scanf("%d%c%d", ...)는 공백 입력에 약할 수 있으므로" %d %c %d"처럼 공백을 허용하는 방식도 고려할 수 있다.TRUE를 직접 정의했다면FALSE도 같이 정의하면 의미가 더 균형 잡힌다.- 연산 처리 부분을
calculateResult()같은 함수로 분리하면 모듈화 연습이 된다. - 시간을 정해놓고 코드를 짤 때 완성도가 너무 낮다.
6. 정리
이 중간고사 문제는 조건문과 반복문을 함께 확인하기 좋은 문제다. 특히 중요한 지점은 종료 판단을 먼저 하고, 오류 가능성을 걸러낸 뒤, 정상 계산일 때만 출력한다는 흐름이다.
'language > c' 카테고리의 다른 글
| [C언어] 10. 구조체와 동적할당 (0) | 2026.09.07 |
|---|---|
| [C언어] 09. 포인터 (Pointer) (0) | 2026.08.31 |
| [C언어] 08. 문자열 (String) (0) | 2026.08.24 |
| [C언어] 07. 배열 (Array) (0) | 2026.08.17 |
| [C언어] 06. 함수 (Function) (0) | 2026.08.10 |