括弧がなく与えられる四則演算を計算するソースです。
すべての入力は、空白なしなければ、入力の長さは制限がありません。
#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がある場合
/ /イトゥトはsopが+や - であれば処理をしてくれる。
/ /もしsopが0であれば、最初読んだもののtermに式終わったことを意味する。
if(sop == '+')sum + = term;
if(sop == ' - ')sum-= term;
if(sop == 0)sum = term;
printf( "結果:%d \ n"、sum);
return 0;
}
上記のような方法で理解をすれば良いです。
0 件のコメント:
コメントを投稿