有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,编写如下函数: (1) 输入10个学生 的基本信息(input); (2) 求出每个学生的平均分(average); (3) 求出平均分

欢迎加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;

 }

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值