用c语言写以下程序【问题描述】给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。 【输入形式】输入在一行中给出正整数。随后N行,每行给出一位学生的信息,格式为“学号姓名"成绩”,中间以空格分隔。 【输出形式】首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。 【样例输入】 5 00001 zhang 70 00002 wang 80 00003 qian 90 10001 li 100 21987 chen 60 【样例输出】 80.00 zhang 00001 chen 21987
时间: 2024-04-02 19:36:32 浏览: 186
以下是一个可能的解答,注释中会详细解释每个步骤的含义:
```
#include <stdio.h>
#include <string.h>
struct student {
char id[6]; // 学号
char name[11]; // 姓名
int score; // 成绩
};
int main() {
int n, i, sum = 0;
double avg;
scanf("%d", &n);
struct student s[n]; // 定义结构体数组
for (i = 0; i < n; i++) {
scanf("%s %s %d", s[i].id, s[i].name, &s[i].score);
sum += s[i].score; // 累加总分
}
avg = (double)sum / n; // 计算平均分
printf("%.2f\n", avg);
for (i = 0; i < n; i++) {
if (s[i].score < avg) {
printf("%s %s\n", s[i].name, s[i].id);
}
}
return 0;
}
```
这个程序中,我们定义了一个结构体`student`,它包含了每个学生的学号、姓名和成绩。在`main()`函数中,我们首先读入学生数量`n`,然后定义了一个包含`n`个`student`类型元素的结构体数组`s`。
接下来,我们使用一个`for`循环,逐个读入每个学生的信息,并累加总分。最后,我们计算平均分并输出。
接着,我们再使用一个`for`循环,逐个遍历学生,如果学生的成绩低于平均分,则输出他的姓名和学号。注意,在输出中,我们先输出了姓名,再输出学号,与输入时的顺序相同。
需要注意的是,我们在输出平均分时使用了格式化字符串`"%.2f\n"`,表示输出一个小数,保留2位小数,并在结尾加上一个换行符。在输出学生信息时,我们只需要输出姓名和学号,不需要输出成绩,因此使用了格式化字符串`"%s %s\n"`。
阅读全文