본문 바로가기

Programming/C언어

[C언어] 무한 반복하는 사칙연산 계산기

 C언어에서 제어문을 배우게 되면 그때부터 간단하지만 다양한 프로그램을 만들 수 있습니다. 그 중 자주 사용되는 예제이면서 제어문을 활용할 수 있는 계산기 구구단을 출력하는 프로그램을 만들겠습니다. 그 중 이번 포스트는 계산기 프로그램을 해보겠습니다.



#1 무한 반복하는 사칙연산 계산기

 간단한 사칙연산 계산기는 네 가지의 연산자를 이용해서 계산을 합니다. '피연산자 연산자 피연산자', 이렇게 입력해서 어떤 연산자에 따라서, 앞 피연산자와 뒤 연산자를 계산해서 결과를 출력을 합니다. 그러면 어떤 연산자에 따라서 계산을 하게 할려면 if문이나 switch-case문을 이용해서 쓰면 됩니다.

입력받을 숫자는 int형으로 선언하고 연산자는 '+', '-' 등은 문자니깐 char형으로 선언합니다. printf 함수로 어떤 프로그램인지 설명하는 내용 출력하고 scanf 함수로 계산할 수식을 입력받겠습니다.


연산자 op에 따라서 계산하기 때문에 if문이나 switch-case문으로 조건에 따라서 실행하게 만들면 됩니다. if문인 경우


if(op=='+') 문장1

else if(op=='-') 문장2 ...

이런식으로 다중 if-else문으로 작성하면 됩니다. 하지만 이 프로그램은 if문 말고 switch-case문을 사용하겠습니다.



switch-case문은 조건 변수의 값에 따라 case별로 실행하는 제어문입니다.


switch(변수) ← 변수의 값에 따라서

case (값) : 실행문 ← 그 값에 해당하는 실행문을 실행한다.

default는 변수의 값이 해당하지 않을 때 기본으로 실행하는 실행문입니다.


각 case 뒤에는 break문이 있는데 break문은 해당 블록{ }을 탈출하는 제어문입니다. break문을 쓰는 이유는 case1에 해당하는 문장만 실행하고 넘어가야되는데 break문을 쓰지 않을 경우, case2로 넘어가서 해당 문장을 실행하게 됩니다.


case1 : 문장1;

case2 : 문장2;

 ∴ case1일 경우, 문장1 → 문장2 실행


case1 : 문장1; break;

case2 : 문장2; break;

 case1일 경우, 문장1만 실행

'+', '-', '*', '/' 이렇게 4가지의 case으로 나누면 됩니다. 하지만 나눗셈에서는 조금 다르게 실행해서 작성해야 합니다.


int형끼리 계산을 하면 결과는 int형입니다. 나눗셈일 경우 int형끼리 계산하면 결과는 int형으로 나오게 됩니다.(10/4=2)

결과를 실수형(double)으로 나오게 할려면 처음부터 double형끼리 계산을 하거나 cast 연산자를 이용해서 '명시적 형 변환'을 해 어느 한 자료형을 double형으로 변환하면 됩니다. double형이 하나라도 있으면 결과는 double형으로 계산을 합니다.

(double) x / y = (결과)

x / (double) y = (결과)

(double) x / (double) y = (결과)

∴ 위 셋 중에 하나 골라서 써도 되고 결과는 다 double형으로 나온다.(10/4.0=2.5)

위의 내용을 종합해서 프로그램을 작성하면 아래와 같습니다.



실행하면 다음과 같이 나타납니다. 나눗셈 계산이 잘 나오는걸 확인할 수 있습니다.



하지만 위 프로그램은 딱 1번만 실행되는 단점이 있습니다. 여러 계산을 할 경우 한번 계산하고 끄고 다시 실행해서 계산해야하는 번거로움이 있어서, 무한 반복하게 하기 위해 for문, while문, do-while문을 이용하면 됩니다. 여기서는 while문과 do-while문을 설명하고 for문은 구구단 포스트에서 설명하겠습니다.


while문과 do-while문은 어떤 조건식이 참이 될 때까지 해당 블록 내의 내용을 반복 실행하는 제어문입니다. while문은 보통 반복 횟수를 모를때 사용하고, do-while문도 반복 횟수를 모를때 사용하지만, while문과 다르게 최소 1번 실행을 한다는 차이점이 있습니다.


while(조건식) {

문장...

}


do {

문장....

} while(조건식);

보통 무한 반복할 때는 조건식에 숫자 1을 씁니다. 하지만, 무한 반복을 한다면 계속 무한 반복을 하게 할것인지, 무한 반복하게 되면 프로그램을 어떻게 끝낼것인지 고민해야 합니다. 그래서 어떤 특정 조건이 되면 무한 반복을 끝내게 설정을 해야합니다. 이럴때 if문으로 조건을 걸어 이런 조건식을 만족할때 break해서 반복 루프를 벗어나게 하면 됩니다.


if(num1==0 && op=='+' && num2==0) break;

☞ 위 조건식(0+0)일 때 break해라! (break가 속해 있는 블록을 벗어나라!)

변수 선언 그 이후부터 출력하고 계산하는 부분까지만 반복실행하게 하고, 0+0을 입력했을 때 프로그램을 종료하게 설정을 하면 다음과 같습니다.



실행해 보면 반복적으로 프로그램이 다시 실행되고 0+0을 누르면 프로그램이 종료되는 것을 볼 수 있습니다.




이렇게 해서 완성된 간단한 무한 반복 사칙연산 계산기 프로그램입니다. 제어문을 다시 공부할 때 도움되는 예제이므로 나중에 다시 혼자 만들어 보면 제어문 복습에 도움이 될 것입니다.