编写一个程序,要求用户输入不超过3名学生的成绩(范围从 0 到 100),直到用户输入成绩为 -1 为止。程序统计并输出有效成绩的数量、总和、平均值以及最高和最低成绩。不用循环,用c语言
时间: 2024-10-06 22:05:29 浏览: 52
在C语言中,我们可以利用递归函数来实现这个需求,因为题目要求不使用循环。下面是一个示例代码:
```c
#include <stdio.h>
// 函数声明
void input_score(int *scores, int count, int total, int* max, int* min);
int main() {
int scores[3] = {0}; // 存放成绩数组
int count = 0; // 成绩的有效计数
int total = 0; // 总和
int max = 0; // 最高分
int min = 101; // 最低分(初始值大于实际最大值)
// 递归获取成绩
input_score(scores, count, total, &max, &min);
if (count > 0) {
float avg = (float)total / count; // 平均值
printf("有效成绩数量: %d\n", count);
printf("总和: %d\n", total);
printf("平均值: %.2f\n", avg);
printf("最高成绩: %d\n", max);
printf("最低成绩: %d\n", min);
} else {
printf("没有输入有效的成绩。\n");
}
return 0;
}
// 递归输入分数
void input_score(int *scores, int count, int total, int* max, int* min) {
int score;
printf("请输入第%d名学生的成绩(-1结束):", count + 1);
scanf("%d", &score);
if (score == -1) { // 结束条件
return;
} else if (score >= 0 && score <= 100) {
scores[count] = score;
count++;
total += score;
// 更新最高分和最低分
if (score > *max) {
*max = score;
}
if (score < *min) {
*min = score;
}
} else {
printf("无效的成绩, 请输入0到100之间的数字。\n"); // 拒绝无效输入
input_score(scores, count, total, max, min); // 继续请求输入
}
}
```
在这个程序中,`input_score`函数通过递归的方式获取用户输入的成绩,并更新相关的统计数据。当用户输入 `-1` 时,递归停止。
阅读全文