为什么我的 C 程序不适用于评分?
Why my C program is not working for Grading points?
我编写了一个 C 程序来查找 5 个学生的成绩点。如果学生失败,我会显示正确的结果,但当所有学生都通过时,它不会显示任何答案。请帮我解决。
代码:
#include <stdio.h>
int main()
{
int mark[5], failed = 0, sum = 0;
for (int i = 0; i < 5; i++) scanf("%d", &mark[i]);
for (int i = 0; i < 5; i++)
{
sum = sum + mark[i];
if (mark[i] < 40) failed++;
}
double marks = (double)((sum / 500) * 100);
if (failed > 0) printf("Ops! Failed\n");
else
{
if (marks >= 90) printf("%d%%: Grade A", marks);
else if (marks >= 80 && marks <= 89) printf("%.2lf%%: Grade B\n", marks);
else if (marks >= 70 && marks <= 79) printf("%.2lf%%: Grade C\n", marks);
else if (marks >= 60 && marks <= 69) printf("%.2lf%%: Grade C\n", marks);
else if (marks >= 40 && marks <= 59) printf("%.2lf%%: Grade D\n", marks);
}
return 0;
}
输出图像错误:
在下面的代码中,我还更改了上限(否则如果 marks=79.8
则不会显示任何内容):
#include <stdio.h>
int main()
{
int mark[5], failed = 0, sum = 0;
for (int i = 0; i < 5; i++) scanf("%d", &mark[i]);
for (int i = 0; i < 5; i++)
{
sum = sum + mark[i];
if (mark[i] < 40) failed++;
}
double marks = (((double)sum / 500) * 100);
printf("marks=%f\n", marks);
if (failed > 0) printf("Ops! Failed\n");
else
{
if (marks >= 90) printf("%.2f%%: Grade A\n", marks);
else if (marks >= 80 && marks < 90) printf("%.2f%% Grade B\n", marks);
else if (marks >= 70 && marks < 80) printf("%.2f%% Grade C\n", marks);
else if (marks >= 60 && marks < 70) printf("%.2f%% Grade C\n", marks);
else if (marks >= 40 && marks < 60) printf("%.2f%% Grade D\n", marks);
}
return 0;
}
您的程序有两个主要的语法问题:
1.
double marks = (double)((sum / 500) * 100);
(sum / 500)
使用整数运算。小数部分被截断为零。显式转换为 double
只是将整个算术表达式的结果值转换为 double
.
要么使用
double marks = ((double) sum / 500) * 100);
或
只需指定 double
类型的变量 sum
。这样,您还可以在 marks
.
的初始化时省略对 double
的强制转换
double sum;
....
double marks = ((sum / 500) * 100);
2.
if (marks >= 90) printf("%d%%: Grade A", marks);
您使用 %d
转换说明符打印 marks
的 double
值,它调用 undefined behavior.
使用 %f
,或者,如果您想坚持使用 convention/consensus,%.2lf
就像您在所有其他 printf()
中所做的那样。
注意:对于 printf()
,您可以使用 %f
转换说明符来打印 double
值,而不是像 scanf()
那样需要 %lf
] 消耗 double
.
旁注:
- 要符合标准,请将
int main()
更改为 int main(void)
。
我编写了一个 C 程序来查找 5 个学生的成绩点。如果学生失败,我会显示正确的结果,但当所有学生都通过时,它不会显示任何答案。请帮我解决。 代码:
#include <stdio.h>
int main()
{
int mark[5], failed = 0, sum = 0;
for (int i = 0; i < 5; i++) scanf("%d", &mark[i]);
for (int i = 0; i < 5; i++)
{
sum = sum + mark[i];
if (mark[i] < 40) failed++;
}
double marks = (double)((sum / 500) * 100);
if (failed > 0) printf("Ops! Failed\n");
else
{
if (marks >= 90) printf("%d%%: Grade A", marks);
else if (marks >= 80 && marks <= 89) printf("%.2lf%%: Grade B\n", marks);
else if (marks >= 70 && marks <= 79) printf("%.2lf%%: Grade C\n", marks);
else if (marks >= 60 && marks <= 69) printf("%.2lf%%: Grade C\n", marks);
else if (marks >= 40 && marks <= 59) printf("%.2lf%%: Grade D\n", marks);
}
return 0;
}
输出图像错误:
在下面的代码中,我还更改了上限(否则如果 marks=79.8
则不会显示任何内容):
#include <stdio.h>
int main()
{
int mark[5], failed = 0, sum = 0;
for (int i = 0; i < 5; i++) scanf("%d", &mark[i]);
for (int i = 0; i < 5; i++)
{
sum = sum + mark[i];
if (mark[i] < 40) failed++;
}
double marks = (((double)sum / 500) * 100);
printf("marks=%f\n", marks);
if (failed > 0) printf("Ops! Failed\n");
else
{
if (marks >= 90) printf("%.2f%%: Grade A\n", marks);
else if (marks >= 80 && marks < 90) printf("%.2f%% Grade B\n", marks);
else if (marks >= 70 && marks < 80) printf("%.2f%% Grade C\n", marks);
else if (marks >= 60 && marks < 70) printf("%.2f%% Grade C\n", marks);
else if (marks >= 40 && marks < 60) printf("%.2f%% Grade D\n", marks);
}
return 0;
}
您的程序有两个主要的语法问题:
1.
double marks = (double)((sum / 500) * 100);
(sum / 500)
使用整数运算。小数部分被截断为零。显式转换为 double
只是将整个算术表达式的结果值转换为 double
.
要么使用
double marks = ((double) sum / 500) * 100);
或
只需指定 double
类型的变量 sum
。这样,您还可以在 marks
.
double
的强制转换
double sum;
....
double marks = ((sum / 500) * 100);
2.
if (marks >= 90) printf("%d%%: Grade A", marks);
您使用 %d
转换说明符打印 marks
的 double
值,它调用 undefined behavior.
使用 %f
,或者,如果您想坚持使用 convention/consensus,%.2lf
就像您在所有其他 printf()
中所做的那样。
注意:对于 printf()
,您可以使用 %f
转换说明符来打印 double
值,而不是像 scanf()
那样需要 %lf
] 消耗 double
.
旁注:
- 要符合标准,请将
int main()
更改为int main(void)
。