みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語 基礎の勉強をしています。

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の問題です。

投稿日時 - 2006-11-04 16:14:18

QNo.2517397

困ってます

質問者が選んだベストアンサー

>for(; x <= y;x + z)
xとzを足し算するのは良いとして、足した結果はどこに代入を?

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

投稿日時 - 2006-11-04 16:40:26

お礼

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

投稿日時 - 2006-11-04 16:47:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

訂正。

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

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

投稿日時 - 2006-11-04 16:48:02

お礼

回答有難うございます!

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

投稿日時 - 2006-11-04 16:52:27

ANo.2

forを括弧で囲んでそれぞれの変数がどんな値を保持しているか
printfで出力し確認してみて下さいな。

投稿日時 - 2006-11-04 16:31:55

お礼

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

ANo.1

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

投稿日時 - 2006-11-04 16:23:09

補足

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

あなたにオススメの質問