- ベストアンサー
方程式の解をだすプログラム
今日の情報処理演習のテストで {正の整数(float型)aを入力させ、方程式x*x*x*-3*x+a=0の正の解のうち最も小さいxを小数点以下2桁の精度で求め、画面に表示するプログラム。ただし、a>2のときは、「解けません」というメッセージを表示するようにする。} という問題がでたのですが、このプログラムがわかる人は教えてください。ちなみに、使うのはif構文とwhile構文(do~whileは使わない)でつくらなくてはなりません。 for構文とif構文の組み合わせを使えばできるとおもうのですが、whileだけでやるにはどうすればいいのでしょう。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ifとwhileを使った方法です。 #include <stdio.h> #include <string.h> int main() { float a,x,fx; printf("aを入力=>"); scanf ( "%f", &a ); printf("\nf=%f\n",a); if (a < 1.0){ printf("1以上を入力してください\n"); return 0; } if (a > 2.0){ printf("解けません\n"); return 0; } x = 0.0; while(x<100.0){ fx = x*x*x - 3*x + a; if (fx <= 0.0){ /* fx==0.0 でないことに注意*/ printf("解けました。x=%f fx=%f\n",x,fx); return 0; } x = x + 0.01; /* 小数点以下2桁の精度で増加*/ } printf("このマシンではfloat型が期待した結果になりません\n"); printf("a,x,fをdouble型にすれば期待した結果になります\n"); printf("その場合は%%fを%%lfにしてください\n"); return 0; }
その他の回答 (4)
- tatsu99
- ベストアンサー率52% (391/751)
>for構文とif構文の組み合わせを使えばできるとおもうのですが、whileだけでやるにはどうすればいいのでしょう。 whileだけでやるのは、無理でしょう。 「ただし、a>2のときは、「解けません」というメッセージを表示するようにする」為には、if文が必要です。 >ちなみに、使うのはif構文とwhile構文(do~whileは使わない)でつくらなくてはなりません。 ということなので、ifとwhileを使用するのはだめですか。 No2のかたも言ってますが、forとwhileは相互に変換可能です。 for(式1;式2;式3){ } と 式1 while(式2){ 式3 } は等価です。 forとwhileとの違いにこだわる理由が判りません。 forとwhileとの違いが重要であると考える理由を教えていただけませんでしょうか。
- Tacosan
- ベストアンサー率23% (3656/15482)
あ, この問題が正しければ while はいりません. a = 1 のときは 0.35 を, a = 2 のときは 1 を表示するだけで十分だから.
- sismoon
- ベストアンサー率22% (22/97)
whileとforの違いを知っていますか? for(i=0;i<10;i++){ } と i=0; while(i<10){ i++ } は同じ操作です.
- Tacosan
- ベストアンサー率23% (3656/15482)
最初から人に聞くようでは力にならないと思うのであえて不親切に. 「for と if の組み合わせでできると思う」のだから, 一旦 for と if の組 み合わせで書いておいて, あとは for と while の違いを調べて機械的に変換 するだけじゃないかなぁ.
補足
情報処理の授業ではまだ、for構文をやっていないので、while構文のみでできるはずの問題だからです。