输入5个学生3门课的成绩存入结构体数组中;(2)输出学生信息;(3)求每个学生的平均分;(4)按平均分从高到低排列;(5)按平均分求每个学生的名次。要求:用结构体数组存放学生信息,每个功能都用函数实现。
时间: 2023-05-16 13:07:42 浏览: 120
好的,这是一个典型的学生成绩管理系统,我可以帮你解决这个问题。首先,我们需要定义一个结构体来存储学生信息和成绩,代码如下:
```
struct student {
char name[20];
int score[3];
float average;
int rank;
};
```
接下来,我们可以编写一个函数来输入学生信息和成绩:
```
void input(struct student stu[], int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入该学生的三门课成绩:");
for (int j = 0; j < 3; j++) {
scanf("%d", &stu[i].score[j]);
}
}
}
```
然后,我们可以编写一个函数来输出学生信息:
```
void output(struct student stu[], int n) {
printf("姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
for (int i = 0; i < n; i++) {
printf("%s\t%d\t%d\t%d\t%.2f\n", stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average);
}
}
```
接下来,我们可以编写一个函数来求每个学生的平均分:
```
void average(struct student stu[], int n) {
for (int i = 0; i < n; i++) {
float sum = 0;
for (int j = 0; j < 3; j++) {
sum += stu[i].score[j];
}
stu[i].average = sum / 3;
}
}
```
然后,我们可以编写一个函数来按平均分从高到低排列:
```
void sort(struct student stu[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (stu[j].average < stu[j + 1].average) {
struct student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
}
```
最后,我们可以编写一个函数来按平均分求每个学生的名次:
```
void rank(struct student stu[], int n) {
for (int i = 0; i < n; i++) {
int r = 1;
for (int j = 0; j < n; j++) {
if (stu[j].average > stu[i].average) {
r++;
}
}
stu[i].rank = r;
}
}
```
现在,我们可以在主函数中调用这些函数来实现学生成绩管理系统:
```
int main() {
int n = 5;
struct student stu[n];
input(stu, n);
average(stu, n);
sort(stu, n);
rank(stu, n);
output(stu, n);
return 0;
}
```
这样,我们就完成了这个问题的解答。
阅读全文