【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

C言語を勉強していた所わからなかった点があったのでぜひお力を貸して頂けると助かります。参考書には演習問題しかのっておらず解答がのっていなくて・・・(明解C言語 入門編 著者:柴田望洋)

p.77 演習4-14
問題
例のように、身長と標準体重の対応表を表示するプログラムを作成せよ。なお、表示する身長の範囲(開始値、終了値、増分)は、整数値として読み込み、標準体重は小数点以下を2桁だけ表示すること。

(例)このように表示。標準体重は (身長-100)*0.9で求めるとする
何cmから:150 (←数字の部分を入力として受け付けます)
何cmまで:190
何cmごと:5

150cm:45.00kg
155cm:49.50kg
...(190cmまで以下略)

自分で記述してみたプログラムが↓です。実行したところ無限ループしてしまいます。なぜだか原因がつかめませんので教えていただけると助かります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 + z)
printf("標準体重=%.2f",(x - 100)*0.9);



return 0;
}

以上が演習4-14の問題です。

A 回答 (4件)

>for(; x <= y;x + z)


xとzを足し算するのは良いとして、足した結果はどこに代入を?

足した結果を正しい変数に代入できれば、このプログラムはちゃんと動きます。
    • good
    • 0
この回答へのお礼

回答有難うございます!
x + zをxに代入するのを忘れていました!だから無限ループしていたんですね・・・納得しました。有難うございました!!m(__)m

お礼日時:2006/11/04 16:47

訂正。



No.3で「~れば、このプログラムはちゃんと動きます。」って書いたけど、代入のトコを直しただけでは、ちゃんと動きませんね。

実行結果の画面出力は
標準体重=45標準体重=45.5標準体重=46標準体重=46.5標準体重=47標準体重=47.5標準体重=48標準体重=48.5(略)
となってしまい、設問で要求している
150cm:45.00kg
155cm:49.50kg
と言う出力が得られません。
    • good
    • 0
この回答へのお礼

回答有難うございます!

実行した際に出力画面が例の通りにならなかったので訂正してみました。
下記に完成したプログラムを貼ってみました^^;
多分これで出来たと自分では思っています。有難うございましたm(__)m

お礼日時:2006/11/04 16:52

forを括弧で囲んでそれぞれの変数がどんな値を保持しているか


printfで出力し確認してみて下さいな。
    • good
    • 0
この回答へのお礼

回答有難うございます!
なんとかわかりました。有難うございます
一応、最終的に完成したプログラムです!
有難うございました。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;
}

お礼日時:2006/11/04 16:50

とりあえず、変数の初期化をして下さい。

この回答への補足

変数の初期化はこのような場合でもやはり必要なのでしょうか?
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;
}

補足日時:2006/11/04 16:41
    • good
    • 0

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


おすすめ情報