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

このQ&Aに関連する最新のQ&A

A 回答 (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;
}
    • good
    • 0

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」になって、答えが符号付きの無限大になる。
    • good
    • 0

#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;
}
}
}
    • good
    • 0

仕様を確認させてください:


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報