language/c

[C언어] 중간고사 Review - 사칙연산 계산기

렁치 2026. 9. 14. 15:30

중간고사 코드는 사칙연산 계산기다.
사용자가 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