- ベストアンサー
C言語の基礎を学ぶ際にわからなかった点とは?
- C言語の基礎を学ぶ際に、参考書には演習問題しか載っておらず解答がなかったため、質問をしました。
- 具体的には、演習4-14の問題で無限ループが発生してしまい、その原因が分からないため解決方法を教えてほしいです。
- プログラムの内容は身長と標準体重の対応表を表示するもので、身長の範囲を入力として受け取り、標準体重を計算して表示します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>for(; x <= y;x + z) xとzを足し算するのは良いとして、足した結果はどこに代入を? 足した結果を正しい変数に代入できれば、このプログラムはちゃんと動きます。
その他の回答 (3)
- chie65536
- ベストアンサー率41% (2512/6032)
訂正。 No.3で「~れば、このプログラムはちゃんと動きます。」って書いたけど、代入のトコを直しただけでは、ちゃんと動きませんね。 実行結果の画面出力は 標準体重=45標準体重=45.5標準体重=46標準体重=46.5標準体重=47標準体重=47.5標準体重=48標準体重=48.5(略) となってしまい、設問で要求している 150cm:45.00kg 155cm:49.50kg と言う出力が得られません。
お礼
回答有難うございます! 実行した際に出力画面が例の通りにならなかったので訂正してみました。 下記に完成したプログラムを貼ってみました^^; 多分これで出来たと自分では思っています。有難うございましたm(__)m
- tyome2
- ベストアンサー率21% (28/132)
forを括弧で囲んでそれぞれの変数がどんな値を保持しているか printfで出力し確認してみて下さいな。
お礼
回答有難うございます! なんとかわかりました。有難うございます 一応、最終的に完成したプログラムです! 有難うございました。m(__)m #include <stdio.h> int main (void){ int x;/*何センチから*/ int y;/*何センチまで*/ int z;/*何センチごと*/ printf("何センチから:"); scanf("%d",&x); printf("何センチまで:"); scanf("%d",&y); printf("何センチごと:"); scanf("%d",&z); for(; x <= y;x = x + z) printf("%dcm=%.2f\n",x,(x - 100)*0.9); return 0; }
- tyome2
- ベストアンサー率21% (28/132)
とりあえず、変数の初期化をして下さい。
補足
変数の初期化はこのような場合でもやはり必要なのでしょうか? scanfで読み込んだ値がx,y,zに代入されるので必要ないと考えていたのですが僕の勘違いのようでしたね;;このような場合にはどう初期化すればいいのか僕にはまだわかりませんので、下記のようにdo~while文で記述し実行したところ問題なく表示されました。 参考書見ると、ループはforでもdo~whileでも全く同じことが出来ると書いてあるので当然うまく記述できればfor文でも出来るのですよね。 forでも実行できるようにしたいので、どうすればいいのかもう少し考えて見ます。アドバイス有難うございますm(__)m #include <stdio.h> int main (void){ int x;/*何センチから*/ int y;/*何センチまで*/ int z;/*何センチごと*/ printf("何センチから:"); scanf("%d",&x); printf("何センチまで:"); scanf("%d",&y); printf("何センチごと:"); scanf("%d",&z); do{ printf("%dcm:%.2f\n",x,(x - 100)*0.9); x = x + z; }while(x <= y); return 0; }
お礼
回答有難うございます! x + zをxに代入するのを忘れていました!だから無限ループしていたんですね・・・納得しました。有難うございました!!m(__)m