用C语言编写一个程序找出学分加权绩点最高学生 假设百分制课程成绩和4分制绩点对应计算方法如下: 90-100 4.0 ; 85-89 3.7 ; 82-84 3.3 ; 78-81 3.0 ; 75-77 2.7 ; 72-74 2.3 ; 68-71 2.0 ; 64-67 1.5 ; 60-63 1.0 ; 60分以下0 学分加权平均绩点为:[(学分1* 绩点1)+(学分2* 绩点2)...]/(学分1+学分2...) 假设有1001,1002,1003,1004 共计4名学生,输入学生学号(4位数字)和若干门课的百分制成绩和对应学分(以-1为结束记号),输出学分加权平均绩点最高的学生学号和绩点。 输入格式: 学号 百分制成绩 学分 每个一行 以-1为结束记号 输出格式: 加权平均绩点最高的学生学号和平均绩点(2位小数)
时间: 2024-03-30 16:37:59 浏览: 89
好的,下面是用C语言编写的程序,可以实现找出学分加权绩点最高学生的功能:
```c
#include <stdio.h>
int main() {
int i, j, n, id, score, credit, sum_credit;
float point, sum_point, avg_point, max_point;
int max_id;
printf("请输入学生人数:");
scanf("%d", &n);
max_point = -1.0; // 初始化最高绩点为-1.0
for (i = 1; i <= n; i++) {
printf("请输入第%d个学生的学号:", i);
scanf("%d", &id);
sum_credit = 0; // 初始化学分总和为0
sum_point = 0.0; // 初始化绩点总和为0
printf("请输入该学生的成绩和学分(以-1为结束记号):\n");
while (1) {
scanf("%d", &score);
if (score == -1) {
break;
}
scanf("%d", &credit);
// 根据成绩计算绩点
if (score >= 90) {
point = 4.0;
} else if (score >= 85) {
point = 3.7;
} else if (score >= 82) {
point = 3.3;
} else if (score >= 78) {
point = 3.0;
} else if (score >= 75) {
point = 2.7;
} else if (score >= 72) {
point = 2.3;
} else if (score >= 68) {
point = 2.0;
} else if (score >= 64) {
point = 1.5;
} else if (score >= 60) {
point = 1.0;
} else {
point = 0.0;
}
// 计算该门课程的绩点和学分的乘积,累加到总和中
sum_point += point * credit;
sum_credit += credit;
}
// 计算该学生的平均绩点
avg_point = sum_point / sum_credit;
// 如果该学生的平均绩点比之前的最高绩点还要高,则更新最高绩点和对应的学生学号
if (avg_point > max_point) {
max_point = avg_point;
max_id = id;
}
}
// 输出平均绩点最高的学生学号和平均绩点
printf("加权平均绩点最高的学生学号是:%d,平均绩点是:%.2f\n", max_id, max_point);
return 0;
}
```
程序的基本思路是:首先读入学生人数,然后对于每个学生,读入该学生的学号和所有课程的成绩和学分,计算该学生的加权平均绩点,如果该学生的加权平均绩点比之前的最高绩点还要高,则更新最高绩点和对应的学生学号。最后输出平均绩点最高的学生学号和平均绩点。
注意,为了方便起见,本程序中并没有对输入的数据进行任何错误检查,例如输入的学号必须是4位数字,输入的成绩必须在0到100之间等等。如果需要,可以在程序中添加相应的错误检查代码。
阅读全文