21

このCコードを取得しました。

#include <stdio.h>

int main(void)
{
        int n, d, i;
        double t=0, k;
        scanf("%d %d", &n, &d);
        t = (1/100) * d;
        k = n / 3;
        printf("%.2lf\t%.2lf\n", t, k);
        return 0;
}

変数 't' が (printf 関数で) 常にゼロである理由を知りたいですか?

4

4 に答える 4

31

なぜなら、この表現では

t = (1/100) * d;

1 と 100 は整数値で、整数除算は切り捨てなので、これと同じです

t = (0) * d;

このような浮動小数点定数にする必要があります

t = (1.0/100.0) * d;

あなたもこれで同じことをしたいかもしれません

k = n / 3.0;
于 2010-02-27T01:38:59.930 に答える
0

整数除算を使用しており、1/100 は常に整数除算でゼロに切り捨てられます。

浮動小数点除算を行い、結果を単純に切り捨てたい場合は、代わりに浮動ポインター リテラルを使用していることを確認できます。d は暗黙的に変換されます。

t = (int)((1.0 / 100.0) * d);
于 2010-02-27T01:38:34.960 に答える
0

そのせいだと思います

t = (1/100) * d;

整数除算として 1/100 = 0

0 * d は常に 0 に等しい

1.0/100.0 を実行すると、正しく動作すると思います

于 2010-02-27T01:40:01.970 に答える