c - 为什么我的 C 程序不适用于评分?
问题描述
我编写了一个 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;
}
解决方案
您的程序有两个主要的语法问题:
1.
double marks = (double)((sum / 500) * 100);
(sum / 500)
使用整数算术。小数部分被截断为零。显式转换为double
只是将整个算术表达式的结果值转换为 a double
。
要么使用
double marks = ((double) sum / 500) * 100);
或者
sum
只需指定类型的变量double
。有了它,您还可以double
在marks
.
double sum;
....
double marks = ((sum / 500) * 100);
2.
if (marks >= 90) printf("%d%%: Grade A", marks);
您使用%d
转换说明符来打印 的double
值marks
,这会调用未定义的行为。
使用%f
, 或者,如果您想遵守约定/共识,%.2lf
就像您在所有其他printf()
s 中所做的那样。
注意:因为printf()
您可以使用%f
转换说明符来打印一个double
值,而不是%lf
像scanf()
使用double
.
边注:
- 要符合标准,请更改
int main()
为int main(void)
.
推荐阅读
- python - 在 Windows 10 执行之间释放 Tensorflow GPU 2.x 内存 python
- python - spark-nlp:DocumentAssembler 初始化失败,出现“java.lang.NoClassDefFoundError: org/apache/spark/ml/util/MLWritable$class”
- azure - Azure 应用服务中的多层应用的身份验证问题
- reactjs - this.state.projects.map 不是一个函数 - React
- javascript - 删除带有索引js jquery的对象数组
- azure - 在 VSCODE 活动栏上丢失了我的 Azure 图标
- html - MIME 类型不匹配
- java - 动态创建队列并将其绑定到单个 Exchange
- .net-core - Fluent NhiberNate .net core 3.1 with sql server
- linux - 每个线程的套接字描述符