• 締切済み

ほかの人のも参考にしたいのでよろしくお願いします

if文、for文、switch文、while文、do-while文、配列、バブルソートをなるべく使用し四則演算ができる電卓を作成せよ. 出力例のように 1.数字を入力 2.演算子を入力 3.数字を入力 4.演算子を入力 のように'='を入力するまで演算を続けるようにせよ. また,実数で演算できるようにせよ. ソースファイル名はprog06.c,データファイル名はprog06.datとしなさい。 <実行結果例> 数値を入力せよ 3.4 演算子を入力せよ(+,-,*,/) + 数値を入力せよ(Ans=3.400000) 1.25 演算子を入力せよ(+,-,*,/) - 数値を入力せよ(Ans=4.650000) 1.6 演算子を入力せよ(+,-,*,/) 1 演算子が違います 演算子を入力せよ(+,-,*,/) * 数値を入力せよ(Ans=3.050000) 2.9 演算子を入力せよ(+,-,*,/) / 数値を入力せよ(Ans=8.845000) 4 演算子を入力せよ(+,-,*,/) = Ans=2.211250

みんなの回答

回答No.4

C++で書いてみた。 入力部分をまとめて関数に追い出したりすると、main()の見かけがすっきりしたりする。 数値入力の際のチェックはサボった。 #include <iostream> double getValue(double *dispResult, bool isForDiv = false) { double result; RETRY: std::cout << "数値を入力せよ"; if (dispResult) std::cout << "(Ans = " << (*dispResult) << ")"; std::cout << "\n"; std::cin >> result; if (isForDiv && (result == 0)) { std::cout << "ゼロでは割れないので、もう一度\n"; goto RETRY; } return result; } int main() { double result = getValue(0); char c; do { std::cout << "演算子を入力せよ(+,-,*./)\n"; std::cin >> c; switch(c) { case '+' : result += getValue(&result); break; case '-' : result -= getValue(&result); break; case '*' : result *= getValue(&result); break; case '/' : result /= getValue(&result, true); break; case '=' : break; default: std::cout << "演算子が違います\n"; } }while (c != '='); std::cout << "Ans = " << result; return 0; }

回答No.3

if (inp == 0.0) printf("ゼロでは割れない\n"); else ans /= inp; の2行を /*if (inp == 0.0) printf("ゼロでは割れない\n);*/ /*else ans /= inp;*/ if (inp == 0.0) { if (ans >= 0.0) ans = 1e+300 / 1e-300; else ans = -1e+300 / 1e-300; } else ans /= inp; に入れ替えると面白いかも知れない。 こうすると、ゼロ除算すると答えが「INF」か「-INF」になって、答えが符号付きの無限大になる。

回答No.2

#include <stdio.h> int main(void) { float ans,inp; char exp; printf("数値を入力せよ\n"); scanf("%f%*[^\n]%*c",&ans); for(;;) { printf("演算子を入力せよ(+,-,*./)\n"); scanf("%c%*[^\n]%*c",&exp); switch (exp) { case '=': printf("Ans=%f",ans); return 0; case '+': case '-': case '*': case '/': break; default: printf("演算子が違います\n"); continue; } printf("数値を入力せよ(Ans=%f)\n",ans); scanf("%f%*[^\n]%*c",&inp); switch (exp) { case '+': ans += inp; break; case '-': ans -= inp; break; case '*': ans *= inp; break; case '/': if (inp == 0.0) printf("ゼロでは割れない\n"); else ans /= inp; break; } } }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

仕様を確認させてください: ・数値や演算子は各行に 1つずつあるのですか? ・数値を入力する際に「*0.5」とか「3+4i」とか入力されたらどのように処理すればいいのですか? ・演算子として = が入力された後はどうすればいいのですか? ・「実数」の精度はどのくらいが要求されるのですか? ・「データファイル名」はプログラム中に書き込んでしまっていいのですか, それとも何らかの形で実行時に与えるものなのですか? 実行時に与えるとしたら, どのように与えるのですか? しかし「演算子を入力せよ」と「演算子が違います」の口調の違いが興味深い.

関連するQ&A