- ベストアンサー
for文のループがされません
#include <stdio.h> main() { int n, count, c; int d = 50000; printf("整数を入力:"); scanf("%d",&n); for(count = 1; count <= n; count++){ c = d * (16 / 100); d += c; } printf("%d回目の数はは%dです\n",n,d); } というプログラムを作ったのですが、for文のところが実行されずに、 1回目ならば58000となるはずなのに初期値のまま50000と表示されてしまいます。 どなたかご指摘お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
C言語の式とは、数学の式に似ていますが別物です。 整数÷整数 の計算なら、 数学なら正確な結果として有理数が得られますが、 C言語の場合は、結果を整数とするために端数切り捨ての近似値となります。 つまり c = d * (16/100) は c = d * 0 と同義なので、何度ループしても値が変わらないわけです。 以下の様に記載することをオススメします。 c = d * 16 / 100; ← 除算を最後にする c = (int)(d * (16/100f)); ← 整数から実数にして整数に戻す 近代的なスクリプト言語を使っていると犯しがちな間違いですのでご注意ください。
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
>for文のところが実行されず そんなことはありません。 正しく実行した結果、nに何を入れてもdは50000のままなのです。
- mk48a
- ベストアンサー率56% (1133/2007)
>c = d * (16 / 100); これはすべてint型で計算されています。 すると計算結果がどうなるか? (16 / 100)をint型に代入して値を確認してみてください。
- black2005
- ベストアンサー率32% (1968/6046)
16/100の解は? 0.16とか答えちゃダメよ・・・
- Tacosan
- ベストアンサー率23% (3656/15482)
なぜ「実行されず」と思ったのですか? c の値がいくつになっているかわかりますか?
お礼
なるほど、0.16は整数ではないですもんね(^^;) おかげで出来ました。ありがとうございます。