2

所以我试图编写一个程序来计算一组数字中一个数字的百分比。我可以输入数字,但百分比始终为 0,我在纸上尝试了这个公式,它每次都有效,所以我知道什么似乎成为问题。

#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]/sum)*100;

执行整数除法。整数除法不返回小数部分。

如果(x[i] >= 0)(x[i] < sum),则(x[i]/sum)为零。(100 * 0) 也为零。

要么先乘以 100,然后再除(虽然这样你不会得到百分比的小数部分):

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

或将参数转换为浮点数:

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

或者

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

您得到的结果为零,因为除以 anint将始终导致int. 如果分母变得大于分子,那么它将给出0
利用typecasting,改变

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

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

您也可以通过更改100100.0as

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