2

それで、数字のグループ内の数字の 1 つのパーセンテージを計算するプログラムを作成しようとしています。問題になる。

#include <stdio.h>

int main() {
    int x[10];
    int i,sum;
    float perc;
    sum=0;

    for(i = 0; i < 10; ++i) {
        scanf("%d",&x[i]);
        sum=sum+x[i];
    }

    printf("n            percentage of total\n");

    for(i = 0; i < 10; ++i) {
        perc=(x[i]/sum)*100;
        printf("%d          %.2f\n",x[i],perc);
    }
    return (0);
}
4

3 に答える 3

5

宣言部分を次のように変更します

   int i;
   float sum,perc;
   sum=0;

これは、c の型キャストが原因です。結果変数が整数の場合の結果を示す図の左側の部分と、結果変数が浮動小数点数の場合の結果を示す右側の部分。

ここに画像の説明を入力

于 2013-09-06T11:17:11.590 に答える
2

この表現

perc=(x[i]/合計)*100;

整数除算を実行します。整数除算は小数部を返しません。

(x[i] >= 0)と の場合(x[i] < sum)(x[i]/sum)はゼロです。(100 * 0) もゼロです。

最初に 100 を掛けてから割ります (ただし、この方法ではパーセンテージの小数部分は得られません)。

perc=(x[i]*100/sum);

または、引数を float に変換します。

perc=((float)x[i]*100.0/(float)sum);

また

perc = x[i] * 100.0f / sum;
于 2013-09-06T12:28:58.330 に答える
0

を割るintと結果は常に になるため、結果はゼロになりますint。分母が分子よりも大きくなると、 が得られ0ます。
を利用するtypecasting、変更する

perc=(x[i]/sum)*100;

perc= ((float)x[i]/sum)*100; //Typecasting 

as に変更100することでこれを行うこともできます100.0

perc= (x[i]*100.0/sum);
于 2013-09-06T13:02:46.687 に答える