c语言从键盘输入某一门课程m个学生的成绩,然后统计出学生的平均分和最低分的后3名的成绩。其中,0<m<50,成绩为百分制,用-1结束输入,并由程序自动剔除无效数据。
时间: 2024-01-01 15:06:13 浏览: 30
好的,这是一个关于C语言的问题,我会尽力回答。
首先,我们可以使用一个循环来接收键盘输入的成绩,直到输入-1为止。在每次输入时,我们可以检查输入的值是否为有效值(在0~100之间),如果不是则提示用户重新输入,否则将其保存到一个数组中。最后,我们可以遍历数组,计算出平均分和最低分的后三名,并输出结果。
以下是一个示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 50
int main() {
int scores[MAX_SIZE] = {0}; // 存储输入的成绩
int count = 0; // 输入的成绩个数
int sum = 0; // 学生的总分
int min_scores[3] = {100, 100, 100}; // 最低分的后三名
int i, score;
printf("请输入学生成绩(输入-1结束):\n");
while (1) {
scanf("%d", &score);
if (score == -1) {
break;
}
if (score < 0 || score > 100) {
printf("请输入有效成绩(0~100):\n");
continue;
}
scores[count++] = score;
}
if (count == 0) {
printf("没有输入成绩!\n");
return 0;
}
// 计算平均分和总分
for (i = 0; i < count; i++) {
sum += scores[i];
}
printf("学生的平均分为:%.2f\n", (float)sum / count);
// 找出最低分的后三名
for (i = 0; i < count; i++) {
if (scores[i] < min_scores[0]) {
min_scores[2] = min_scores[1];
min_scores[1] = min_scores[0];
min_scores[0] = scores[i];
} else if (scores[i] < min_scores[1]) {
min_scores[2] = min_scores[1];
min_scores[1] = scores[i];
} else if (scores[i] < min_scores[2]) {
min_scores[2] = scores[i];
}
}
printf("最低分的后三名为:%d, %d, %d\n", min_scores[0], min_scores[1], min_scores[2]);
return 0;
}
```
希望这个示例对您有帮助!