班级共有 m个人,该班C语言的成绩存放在score(score为整数)数组中,计算该班成绩的平均分,并将小于平均分的成绩存储在一个数组中,并打印该数组的值。 要求: 1. 请编写函数fun, 它的功能是:计算平均分,并将低于平均分的成绩和相应的数组下标分别存在不同的数组中(打印语句放在主函数中),声明如下: int fun(int score[], int m, int below_score[], int below_index[]); 2. 请编写函数ReadScore,读入成绩,返回输入的有效人数,声明如下: int ReadScore(int score[]); 3. 需要对数组越界做判断,如:在输入时,直接输入-1的情况,此时显示“there are no valid scores”,并终止程序。 4. 班机最多有40人,用宏定义数组的所含最多的元素数量。 输入:每一行输入一个人的成绩,直到输入值为负数时,结束成绩的输入,并将此时拥有的成绩数量,作为班机人数,如: 45 67 98 -1 输出:打印班机的总人数,低于平均分的,低于平均分的成绩及该成绩在输入时的序号,从1开始计数,如: the number of the class:3 the number under the average score: 2 the 1th score is: 45 the 2th score is: 67
时间: 2024-02-18 14:59:04 浏览: 101
好的,以下是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 40
int ReadScore(int score[]);
int fun(int score[], int m, int below_score[], int below_index[]);
int main() {
int score[MAX_NUM];
int below_score[MAX_NUM];
int below_index[MAX_NUM];
int m, num_below, i;
m = ReadScore(score);
if (m == 0) {
printf("there are no valid scores\n");
return 0;
}
num_below = fun(score, m, below_score, below_index);
printf("the number of the class:%d\n", m);
printf("the number under the average score: %d\n", num_below);
for (i = 0; i < num_below; i++) {
printf("the %dth score is: %d\n", below_index[i], below_score[i]);
}
return 0;
}
int ReadScore(int score[]) {
int i, s, count = 0;
printf("please input the score of each student:\n");
for (i = 0; i < MAX_NUM; i++) {
scanf("%d", &s);
if (s < 0) {
break;
}
score[i] = s;
count++;
}
if (count == 0) {
return 0;
}
return count;
}
int fun(int score[], int m, int below_score[], int below_index[]) {
int i, sum = 0, count = 0;
double avg;
for (i = 0; i < m; i++) {
sum += score[i];
}
avg = ((double) sum) / m;
for (i = 0; i < m; i++) {
if (score[i] < avg) {
below_score[count] = score[i];
below_index[count] = i + 1;
count++;
}
}
return count;
}
```
代码的思路是先通过 `ReadScore` 函数读入成绩并返回有效人数 `m`,然后通过 `fun` 函数计算平均分并将低于平均分的成绩和相应的数组下标分别存在 `below_score` 和 `below_index` 数组中,并返回低于平均分的成绩数量 `num_below`。最后在主函数中打印班级总人数 `m` 和低于平均分的成绩及相应下标。同时,还需要对数组越界做判断,如输入 -1 的情况。
阅读全文