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

有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;

 }