• ベストアンサー

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と表示されてしまいます。 どなたかご指摘お願いします。

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.4

C言語の式とは、数学の式に似ていますが別物です。 整数÷整数 の計算なら、 数学なら正確な結果として有理数が得られますが、 C言語の場合は、結果を整数とするために端数切り捨ての近似値となります。 つまり c = d * (16/100) は c = d * 0 と同義なので、何度ループしても値が変わらないわけです。 以下の様に記載することをオススメします。 c = d * 16 / 100; ← 除算を最後にする c = (int)(d * (16/100f)); ← 整数から実数にして整数に戻す 近代的なスクリプト言語を使っていると犯しがちな間違いですのでご注意ください。

bloly
質問者

お礼

なるほど、0.16は整数ではないですもんね(^^;) おかげで出来ました。ありがとうございます。

その他の回答 (4)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.5

>for文のところが実行されず そんなことはありません。 正しく実行した結果、nに何を入れてもdは50000のままなのです。

  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.3

>c = d * (16 / 100); これはすべてint型で計算されています。 すると計算結果がどうなるか? (16 / 100)をint型に代入して値を確認してみてください。

  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.2

16/100の解は? 0.16とか答えちゃダメよ・・・

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

なぜ「実行されず」と思ったのですか? c の値がいくつになっているかわかりますか?