输入5个学生3门课的成绩存入结构体数组中;(2)输出学生信息;(3)求每个学生的平均分;(4)按平均分从高到低排列;(5)按平均分求每个学生的名次。要求:用结构体数组存放学生信息,每个功能都用函数实现。【分析】根据题意,学生信息包含:学号、姓名、3门课成绩、平均分、名次,故定义结构体类型struct student表示学生信息,定义结构体数组stu[5]存放5个学生的信息。#define N 5 /*N个学生*/struct student{ int num; char name[20]; float s[3]; float avg; int rank; };struct student stu[N];结构体数组示意图如下:numname[ ]s[0]s[1]s[2]avgrankstu[0]1张99859091.3stu[1]3李90957787.3stu[2]5王80909086.7stu[3]7赵78688075.3stu[4]9杨100879794.7可以定义如下几个子函数实现每个功能:void input(struct student a[N] )//输入学生信息存入结构体数组a中。void output(struct student a[N] )//输出学生信息。void average(struct student a[N])//求每个学生平均分。void sort(struct student a[N])// 按平均分从高到低排序。void rank(struct student a[N])// 按平均分求每个学生的名次
时间: 2023-05-18 09:05:33 浏览: 71
1. 定义结构体类型struct student表示学生信息:
struct student{
int id; //学号
char name[20]; //姓名
float score[3]; //3门课成绩
float average; //平均分
int rank; //名次
};
2. 定义结构体数组stu[5]存放5个学生的信息:
struct student stu[5];
3. 输入5个学生3门课的成绩存入结构体数组中:
void input(){
for(int i=0;i<5;i++){
printf("请输入第%d个学生的信息:\n",i+1);
printf("学号:");
scanf("%d",&stu[i].id);
printf("姓名:");
scanf("%s",stu[i].name);
printf("3门课成绩:");
for(int j=0;j<3;j++){
scanf("%f",&stu[i].score[j]);
}
}
}
4. 输出学生信息:
void output(){
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\t名次\n");
for(int i=0;i<5;i++){
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].rank);
}
}
5. 求每个学生的平均分:
void average(){
for(int i=0;i<5;i++){
float sum=0;
for(int j=0;j<3;j++){
sum+=stu[i].score[j];
}
stu[i].average=sum/3;
}
}
6. 按平均分从高到低排列:
void sort(){
for(int i=0;i<4;i++){
for(int j=i+1;j<5;j++){
if(stu[i].average<stu[j].average){
struct student temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}
7. 按平均分求每个学生的名次:
void rank(){
for(int i=0;i<5;i++){
int r=1;
for(int j=0;j<5;j++){
if(stu[i].average<stu[j].average){
r++;
}
}
stu[i].rank=r;
}
}
8. 主函数调用以上函数:
int main(){
input();
average();
sort();
rank();
output();
return 0;
}
阅读全文