输入5个学生3门课的成绩存入结构体数组中;(2)输出学生信息;(3)求每个学生的平均分;(4)按平均分从高到低排列;(5)按平均分求每个学生的名次。要求:用结构体数组存放学生信息,每个功能都用函数实现。【分析】根据题意,学生信息包含:学号、姓名、3门课成绩、平均分、名次,故定义结构体类型struct student表示学生信息,定义结构体数组stu[5]存放5个学生的信息。用c语言写。
时间: 2023-05-18 19:05:35 浏览: 203
#include <stdio.h>
#include <string.h>
// 定义结构体类型
struct student {
char id[10]; // 学号
char name[20]; // 姓名
float score[3]; // 3门课成绩
float average; // 平均分
int rank; // 名次
};
// 输入学生信息
void input(struct student stu[]) {
int i, j;
for (i = 0; i < 5; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%s", stu[i].id);
printf("姓名:");
scanf("%s", stu[i].name);
for (j = 0; j < 3; j++) {
printf("第%d门课成绩:", j+1);
scanf("%f", &stu[i].score[j]);
}
}
}
// 输出学生信息
void output(struct student stu[]) {
int i, j;
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
for (i = 0; i < 5; i++) {
printf("%s\t%s\t", stu[i].id, stu[i].name);
for (j = 0; j < 3; j++) {
printf("%.1f\t", stu[i].score[j]);
}
printf("%.1f\n", stu[i].average);
}
}
// 计算每个学生的平均分
void calc_average(struct student stu[]) {
int i, j;
for (i = 0; i < 5; i++) {
float sum = 0;
for (j = 0; j < 3; j++) {
sum += stu[i].score[j];
}
stu[i].average = sum / 3;
}
}
// 按平均分从高到低排列
void sort(struct student stu[]) {
int i, j;
struct student temp;
for (i = 0; i < 4; i++) {
for (j = i+1; j < 5; j++) {
if (stu[i].average < stu[j].average) {
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
}
// 按平均分求每个学生的名次
void calc_rank(struct student stu[]) {
int i, j;
for (i = 0; i < 5; i++) {
int rank = 1;
for (j = 0; j < 5; j++) {
if (stu[j].average > stu[i].average) {
rank++;
}
}
stu[i].rank = rank;
}
}
int main() {
struct student stu[5];
input(stu);
calc_average(stu);
sort(stu);
calc_rank(stu);
output(stu);
return 0;
}
阅读全文