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

解決済みの質問

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

投稿日時 - 2013-05-28 15:43:55

QNo.8108875

すぐに回答ほしいです

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

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

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

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

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

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

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

近代的なスクリプト言語を使っていると犯しがちな間違いですのでご注意ください。

投稿日時 - 2013-05-28 16:45:47

お礼

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

投稿日時 - 2013-05-28 20:32:11

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

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

回答(5)

ANo.5

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

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

投稿日時 - 2013-05-28 16:50:32

ANo.3

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

投稿日時 - 2013-05-28 16:43:44

ANo.2

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

投稿日時 - 2013-05-28 16:01:20

ANo.1

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

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

投稿日時 - 2013-05-28 15:54:50