#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();
}
除标记的行外,程序运行正常。这有什么问题?
答案 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
(也是整数)。
有几种方法:
将a
到h
的类型从int
更改为float
或double
(并从{{1}更改相应的转化说明符} %d
和%f
来电中的printf
;
在除以600之前将scanf
转换为浮点数,或将g除以600.0(g
仍然需要键入浮点数,或者您可以跳过该步骤,只需编写h
至于其他一切:
在托管实施中,p = ((float) g / 600) * 100.0;
返回main
,而不是int
。除非您的编译器文档明确指出支持void
,否则请使用void main()
或int main(void)
,否则您将调用未定义的行为;
永远不会永远不会使用int main(int argc, char **argv)
; 将在您的程序中引入故障点。它已被C99正式弃用,预计将从下一版本的标准中消失。请改用gets()
。