2012年10月13日土曜日

簡単な計算機を作成する




括弧がなく与えられる四則演算を計算するソースです。
すべての入力は、空白なしなければ、入力の長さは制限がありません。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(){
   / /結果の値を入れるsum、抗議の値を格納するterm、一時変数xです。
   / /項と言う積や割り算で囲まれた式を指します。
   / /全体はこんな港を加算、減算する役割を果たします。
   int sum = 0、term、x;
   / / opは演算子です。 sopは加算や、ペルセム演算子として
   / /まだ処理置かないいない演算子です。後で現在の港終わってから
   / / sopに応じて、現在の項をよりするか抜いてもくれるようになる。
   char op = 0、sop = 0;
   printf( "======コンバータ====== \ n");
   printf( "式を入力してください:");
   scanf( "%d"、&x);
   / /開始する場合は、まだsopがない。そして現在termは初めて与えられるように定義される。
   / /続いて乗算や除算が出たらtermはその値を乗算したり、分けてくれること
   / /値が決まることになる。
   term = x;
   scanf( "%c"、&op);
   while(op == '*' | | op == '/'){
        scanf( "%d"、&x);
        if(op == '*')term * = x;
        if(op == '/')term / = x;
        scanf( "%c"、&op);
   }
   / /ここで初めて、+演算子や - 演算子が出てきた。
   / /この演算子をsopに保管をする。
   / /最初に救われたtermはsumにその値を与える。
   / /次の項始まる値を取得してtermになった。
   if(op == '+' | | op == ' - '){
        sop = op;
        sum = term;
        scanf( "%d"、&x);
        term = x;
        scanf( "%c"、&op);
   }
 
   / /これで残っているすべての抗たち入手して、これらを加えたり、外してくれれば良い。
   / / =演算子が現れるまで継続して処理をする。
   while(op! = '='){
        / /港続くなら、その値を乗算したり、分けてくれる。
        while(op == '*' | | op == '/'){
             scanf( "%d"、&x);
             if(op == '*')term * = x;
             if(op == '/')term / = x;
             scanf( "%c"、&op);
        }
        / / +演算子や - 演算子に会えば、現在の項をsopの値に応じて
        / / sumに加算、減算する。そして今読ん演算子をsopに与える。
        / /次の数を読んでtermの開始値で与える。
        / /そして、次の演算子を読んでopに与える。
        / /このopが=であれば、大きなwhile文を脱出することになる。
        if(op == '+' | | op == ' - '){
             if(sop == '+')sum + = term;
             if(sop == ' - ')sum-= term;
             sop = op;
             scanf( "%d"、&x);
             term = x;
             scanf( "%c"、&op);
        }
   }
   / /最後に処理していないtermがある場合
   / /イトゥトはs​​opが+や - であれば処理をしてくれる。
   / /もしsopが0であれば、最初読んだもののtermに式終わったことを意味する。
   if(sop == '+')sum + = term;
   if(sop == ' - ')sum-= term;
   if(sop == 0)sum = term;
   printf( "結果:%d \ n"、sum);

   return 0;
}

上記のような方法で理解をすれば良いです。

0 件のコメント:

コメントを投稿