プロが教えるわが家の防犯対策術!

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

A 回答 (5件)

C言語の式とは、数学の式に似ていますが別物です。



整数÷整数 の計算なら、
数学なら正確な結果として有理数が得られますが、
C言語の場合は、結果を整数とするために端数切り捨ての近似値となります。

つまり
c = d * (16/100)

c = d * 0
と同義なので、何度ループしても値が変わらないわけです。

以下の様に記載することをオススメします。

c = d * 16 / 100; ← 除算を最後にする
c = (int)(d * (16/100f)); ← 整数から実数にして整数に戻す

近代的なスクリプト言語を使っていると犯しがちな間違いですのでご注意ください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/28 20:32

>for文のところが実行されず



そんなことはありません。
正しく実行した結果、nに何を入れてもdは50000のままなのです。
    • good
    • 0

>c = d * (16 / 100);


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

16/100の解は?


0.16とか答えちゃダメよ・・・
    • good
    • 0

なぜ「実行されず」と思ったのですか?



c の値がいくつになっているかわかりますか?
    • good
    • 0

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