有10個學生,每個學生的資料包括學號、姓名、3門課的成績,編寫如下函式: (1) 輸入10個學生 的基本資訊(input); (2) 求出每個學生的平均分(average); (3) 求出平均分
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;
}