c·c++/c 프로그래밍

간단한 계산기

바로이순간 2012. 10. 19. 15:35

이번 버전은 정수대신 실수(double)을 사용하였으면, 

수와 연산자 사이에 빈칸이 올 경우 이를 처리할 수 있도록 하였다.


#include<stdio.h> 

#include<stdlib.h> 

#include<conio.h> 

int main(){

   // 결과값을 담을 sum, 항의 값을 저장하는 term, 임시 변수 x입니다.

   // 항이란 곱이나 나눗셈으로 묶여진 식을 말합니다.

   // 전체 식은 이런 항들을 더하거나 빼 주는 역할을 하게 됩니다. 

   double sum=0, term, x; 

   // op는 연산자 입니다. sop는 덧셈이나, 뺄샘 연산자로써 

   // 아직 처리히지 않은 연산자 이다. 나중에 현재 항이 끝나고 나면

   // sop에 따라서 현재의 항을 더하든지 빼든지 해주게 된다.

   char op=0, sop=0; 

   printf("======계산기======\n"); 

   printf("식을 입력해주세요: "); 

   scanf("%lf", &x); 

   // 시작할 경우는 아직 sop가 없다. 그리고 현재 term은 처음 주어지는 수로 정의 된다.

   // 계속해서 곱셈이나 나눗셈이 나온다면 term은 그 값들을 곱하거나 나누어 줌으로써

   // 값이 정해지게 된다.

   term=x; 

   op=getchar(); if(op==' ') op=getchar(); 

   while(op=='*'||op=='/') { 

        scanf("%lf", &x); 

        if(op=='*') term*=x; 

        if(op=='/') term/=x; 

        op=getchar(); while(op==' ') op=getchar(); 

   } 

   // 이제 최초로 +연산자나 -연산자가 나왔다.

   // 이 연산자를 sop에 보관을 한다. 

   // 처음에 구해진 term은 sum에 그 값을 준다.

   // 다음 항의 시작되는 값을 구하여 term에 주었다.

   if(op=='+'||op=='-') { 

        sop=op; 

        sum=term; 

        scanf("%lf", &x); 

        term=x; 

        op=getchar(); while(op==' ') op=getchar(); 

   } 

   

   // 이제 남아 있는 모든 항들을 구해서 이들을 더해주거나 빼주면 된다.

   // =연산자가 나올때 까지 계속해서 처리를 한다.

   while(op!='\n'){ 

        // 항이 계속된다면 그 값을 곱하거나 나누어 준다.

        while(op=='*'||op=='/') { 

             scanf("%lf", &x); 

             if(op=='*') term*=x; 

             if(op=='/') term/=x; 

             op=getchar(); while(op==' ') op=getchar(); 

        } 

        // +연산자나 -연산자를 만나면 현재의 항을 sop의 값에 따라서

        // sum에 더하거나 빼준다. 그리고 지금 읽은 연산자를 sop에 준다.

        // 다음 수를 읽어서 term의 시작값으로 준다.

        // 그리고 다음 연산자를 읽어서 op에 준다.

        // 이 op가 = 이면 큰 while문을 탈출하게 된다.

        if(op=='+'||op=='-') { 

             if(sop=='+') sum+=term; 

             if(sop=='-') sum-=term; 

             sop=op; 

             scanf("%lf", &x); 

             term=x; 

             op=getchar(); while(op==' ') op=getchar(); 

        } 

   } 

   // 마지막에 처리하지 않은 term이 있다면

   // 이뜻은 sop가 +나 -라면 처리를 해준다.

   // 만약 sop가 0이라면 처음 읽은 한개의 term으로 식이 끝났다는 것을 의미한다.

   if(sop=='+') sum+=term; 

   if(sop=='-') sum-=term; 

   if(sop==0) sum=term; 

   printf("결과: %g\n", sum); 


   return 0; 

}  


수식을 다 넣고 나서 [엔터]를 눌러주면 결과가 나온다.


'c·c++ > c 프로그래밍' 카테고리의 다른 글

큰정수의 덧셈과 뺄셈(진행중)  (0) 2012.11.05
피보나치-어린토끼,어른토끼  (0) 2012.10.20
Newton-Raphson Method  (0) 2012.10.13
진법변환  (0) 2012.10.11
달력출력  (0) 2012.10.10