整数计算无法按预期工作

时间:2011-01-04 19:48:40

标签: c

#include <stdio.h>
#include <conio.H>
void main()
{
    int a,b,c,d,e,f,g,i,h;
    float p;
    char A[10];
    clrscr();
    printf("Enter the name\n");
    gets(A);
    printf("Enter the ENG marks\n");
    scanf("%d",&a);
    printf("Enter the HIN marks\n");
    scanf("%d",&b);
    printf("Enter the MAR marks\n");
    scanf("%d",&c);
    printf("Enter the MAT marks\n");
    scanf("%d",&d);
    printf("Enter the SCI marks\n");
    scanf("%d",&e);
    printf("Enter the S.S marks\n");
    scanf("%d",&f);
    g=a+b+c+d+e+f;
    p=(g*100)/600; // <<-----
    printf("NAME\t ENG\t HIN\t MAR\t MAT\t SCI\t S.S\t TOTAL\t PERCENTAGE\n");
    printf("%s\t %d\t %d\t %d\t %d\t %d\t %d\t %d\t %f\n",A,a,b,c,d,e,f,g,p);
    getch();
}

除标记的行外,程序运行正常。这有什么问题?

4 个答案:

答案 0 :(得分:3)

在分裂前转换为浮动

h=((float)g)/600;

答案 1 :(得分:2)

这是截断为整数:

 p=(g*100)/600;

将其更改为

 p=(g*100)/600.0;

答案 2 :(得分:2)

由于 h 被声明为int,因此行

h=(g/600);

将使用整数除法,而不是浮点除法。基本上,这意味着将忽略小数点以外的所有内容。例如,给出示例450/600,浮点除法将为您提供0.75,而整数除法将为您提供0

后续行

p=(h*100);

获取 h 的存储值,在本例中为0,并将其乘以 100 。这仍然是0

答案 3 :(得分:1)

此代码中存在很多的问题。

由于您正在使用整数数学进行除法,因此未正确计算百分比;例如,如果g为500,则g/600的结果为0,将其分配给h(也是整数)。

有几种方法:

  1. ah的类型从int更改为floatdouble(并从{{1}更改相应的转化说明符} %d%f来电中的printf;

  2. 在除以600之前将scanf转换为浮点数,将g除以600.0(g仍然需要键入浮点数,或者您可以跳过该步骤,只需编写h

  3. 即可

    至于其他一切:

    1. 在托管实施中,p = ((float) g / 600) * 100.0;返回main,而不是int。除非您的编译器文档明确指出支持void,否则请使用void main()int main(void),否则您将调用未定义的行为;

    2. 永远不会永远不会使用int main(int argc, char **argv); 在您的程序中引入故障点。它已被C99正式弃用,预计将从下一版本的标准中消失。请改用gets()