*有10个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入10个学生的成绩,要求打印出3门课程的总平均成绩,以及最高分学生的成绩,包括学号,姓名,3门课程成绩,平均分数*/

在这里插入图片描述

/*有10个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入10个学生的成绩,要求打印出3门课程的总平均成绩,以及最高分学生的成绩,包括学号,姓名,3门课程成绩,平均分数*/
#include <stdio.h>
#define N 5
#define M 3
typedef struct student{
 int num;
 char name[20];
 double score[3];
 double aver;
}stu;
void Write(stu ss[]);
void Print(stu ss[]);
void CalMax(stu ss[]);
void main(){
 stu ss[N];
 /*输入数据*/
 Write(ss);
 printf("num\tname\tscore1\tscore2\tscore3\taverage\n");
 Print(ss); 
 CalMax(ss);
 Print(ss); 
}
void Write(stu ss[]){
 int i,j;
 double sum;
 for(i=0;i<N;i++){
  sum=0; 
  scanf("%d%s",&ss[i].num ,ss[i].name);
  for(j=0;j<M;j++){
   scanf("%lf",&ss[i].score[j]);
   sum+=ss[i].score[j];
  }
  ss[i].aver=sum/M;
 } 
}
void Print(stu ss[]){
 int i,j;
 for(i=0;i<N;i++){
  printf("%d\t%s\t ",ss[i].num ,ss[i].name);
  for(j=0;j<M;j++){
   printf("%.1lf\t",ss[i].score[j]);
  }
  printf("%.2lf\n",ss[i].aver);
 } 
}
/*用选择排序法对学生的平均成绩排序,找出平均成绩最高的学生*/
void CalMax(stu ss[]){
 int i,j,max;
 stu temp; 
 for(i=0;i<N-1;i++){//无序区的表头号 ,进行n-1轮选择 
  max=i;//每一轮无序区首位被假设为无序区的最大数 
 /*每一轮扫描:从第无序区首位的下一个数到最后一个数 */ 
  for(j=i+1;j<N;j++){
   if(ss[j].aver>ss[max].aver){
    max=j;//max中保存了这一轮扫描过程中最大元素的下标 
   }    
  }
  //提高运行效率,即是否需要交换,如果刚好是无序区首位在无序区最大,就不需要交换 
  if(max!=i){//如果最大元素的下标和无序区首位的下标不相等 
   temp=ss[max];
   ss[max]=ss[i];
   ss[i]=temp;
  }
 }
 
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高达十几个

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值