欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。
1、 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,编写如下函数:
(1) 输入10个学生 的基本信息(input);
(2) 求出每个学生的平均分(average);
(3) 求出平均分最高的学生信息(high_score);
(4) 输出每个学生的信息(output);
(5) 按平均分从高到低的顺序排序(sort)。
#include<stdio.h>
#define N 10
typedef struct student{
int num;
char name[20];
float score[3];
float aver;
}S;
void input(S *ps,int n){
int i;
S *p_end;
printf("输入学生的学号、姓名、三门课的成绩:\n");
p_end=ps+n;
for(;ps<p_end;ps++){
scanf("%d%s",&(ps->num),ps->name);
for(i=0;i<3;i++)
scanf("%f",&(ps->score[i]));
}
}
void average(S *ps,int n){
int i;
S *p_end;
p_end=ps+n;
for(;ps<p_end;ps++){
ps->aver=0;
for(i=0;i<3;i++)
ps->aver+=ps->score[i];
ps->aver/=3;
}
}
S *high_score(S *ps,int n){
int i;
float high=0;
S *p;
S *p_end;
p_end=ps+n;
p=ps;
for(;ps<p_end;ps++)
if((ps->aver)>high){
high=ps->aver;
p=ps;
}
printf("平均分最高的学生为:\n");
printf("%8d%10s",p->num,p->name);
for(i=0;i<3;i++){
printf("%7.1f",p->score[i]);
}
printf("%7.1f",p->aver);
printf("\n");
return p;
}
void output(S *ps,int n){
int i;
S *p_end;
p_end=ps+n;
printf("学生的基本信息:\n");
for(;ps<p_end;ps++){
printf("%8d%10s",ps->num,ps->name);
for(i=0;i<3;i++){
printf("%7.1f",ps->score[i]);
}
printf("%7.1f",ps->aver);
printf("\n");
}
}
void sort(S *ps,int n){
int i,j,k;
S t;
S *p_end;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if((ps+k)->aver<(ps+j)->aver)
k=j;
if(k!=i){
t=*(ps+i); *(ps+i)=*(ps+k); *(ps+k)=t;
}
}
printf("排序后:\n");
p_end=ps+n;
for(;ps<p_end;ps++){
printf("%8d%10s",ps->num,ps->name);
for(i=0;i<3;i++){
printf("%7.1f",ps->score[i]);
}
printf("%7.1f",ps->aver);
printf("\n");
}
}
int main()
{
int i,n;
S a[N];
printf("输入学生个数:\n");
scanf("%d",&n);
input(a,n);
average(a,n);
output(a,n);
high_score(a,n);
sort(a,n);
return 0;
}