2017-06-07 2 views
-1

私は町の人口が毎年10%増えるが、ループで変数popが増えていないCでプログラムを書いていた。増分がforループ内で起こっていない

これは私のコードです:

#include <stdio.h> 

int main() { // B main 
    int pop = 100000, year, popatend; 
    printf("\nyear\t\t\tpopulation\n\n"); 
    for (year = 1; year <= 10; year++) { // B loop 
     popatend = pop * (10/100); 
     pop = pop + popatend; 

     printf("%d\t\t\t %d\n", year, pop); 
    } // B loop 
} // B main 

そして、これが出力されます。

year   population 

    1    100000 
    2    100000 
    3    100000 
    4    100000 
    5    100000 
    6    100000 
    7    100000 
    8    100000 
    9    100000 
    10    100000 

私はUbuntuのチームメイトには、Eclipseでこのプログラムを作りました。

+1

'popatend'は整数であり、1より小さい数値でそれをmutiplyしようとしています。結果は何でしょうか? –

答えて

4

10/100は、整数除算である、あなたは整数の除算を行うとその0

+0

私は12分で答えることができます。 –

4

(10/100)0と評価されますので、

popatend=pop*(10/100); 

popatendは、0の値を持つことになります。

popに追加すると、popの値は変更されません。

私はあなたが整数の除算を持っている、これは

popatend=pop*(10f/100f); 
5

にそれを変更することで修正される可能性が信じて、10/100はゼロに切り捨てられます。代わりに10.0/100.0(またはプレーン0.1)を使用してください。

1

10/100を実行するときに整数除算を使用しているため、0.1を返すのではなく、実際には0に切り捨てられます。したがって、すべてのループ(popatend = pop * 0)を0に設定し、毎回popに0を追加すると、popatendがゼロに設定されます。

これを修正するには、poppopatendの型をキャストまたは変更するか、10f/100fを使用します。

-2

あなたは(year = 1; year <= 10; year++)ですが、ここではyearは決して計算の要因にはなりません。そのためです。

+2

これは間違っています - 計算はループの繰り返しごとに適用されます。年はループカウンタです。計算にはまったく必要はありません。 –

+0

よく調べてください、変数 'year'は全く新しい値の計算に使用されていませんでした。そのため、彼は何も 'インクリメント'を見ません。 – vivi

+2

Mattは正しいです - tは計算に使用されることを意味します。もし整数の除算からそれを変更するならば、 'year' – josephmbustamante

関連する問題