单链表简单选择排序

单链表  存储下的简单选择排序

  • <span style="font-size:18px;"><strong style="background-color: rgb(204, 255, 255);">#include<stdio.h>
  • #include<string.h>
  • #define m 3
  • #define NULL 0

  • typedef struct stnode
  • {   
  •  char id;
  •  char name[16];
  •  int cls[3];
  •  float ave;
  •  struct stnode *next;
  • }students;

  • students *head;
  • int n;
  • void average1() // 求平均成绩函数
  • {
  •  int i,j;
  •  float sum,aver;
  •  students *p;
  •  printf("\n\t**********平均成绩***********\n");
  •  for(i=0;i<1;i++) // i<1只求数学平均成绩;i<m则可以统计各课地平均成绩
  •  {
  •   j=0;
  •   sum=0;
  •   p=head;
  •   while(p->next)
  •   {
  •    sum=sum+p->cls[i];
  •    p=p->next;
  •    j++;
  •   }
  •   aver=sum/j;
  •   printf("\n\t 数学平均成绩:%5.2f\n",aver);

  •  }
  • }
  • void average2() // 求平均成绩函数
  • {
  •  int i,j;
  •  float sum,aver;
  •  students *p;
  •  printf("\n\t**********平均成绩***********\n");
  •  for(i=1;i<2;i++) // i<1只求英语平均成绩;i<m则可以统计各课地平均成绩
  •  {
  •   j=0;
  •   sum=0;
  •   p=head;
  •   while(p->next)
  •   {
  •    sum=sum+p->cls[i];
  •    p=p->next;
  •    j++;
  •   }
  •   aver=sum/j;
  •     printf("\n\t 英语平均成绩:%5.2f\n",aver);

  •  }
  • }
  • void average3() // 求平均成绩函数
  • {
  •  int i,j;
  •  float sum,aver;
  •  students *p;
  •  printf("\n\t**********平均成绩***********\n");
  •  for(i=2;i<3;i++) // i<1只求计算机平均成绩;i<m则可以统计各课地平均成绩
  •  {
  •   j=0;
  •   sum=0;
  •   p=head;
  •   while(p->next)
  •   {
  •    sum=sum+p->cls[i];
  •    p=p->next;
  •    j++;
  •   }
  •   aver=sum/j;
  •   printf("\n\t 计算机平均成绩:%5.2f\n",aver);

  •  }
  • }


  • void nopass() // 不及格学生函数
  • {
  •  int i,t;
  •  students *p;
  •  p=head;// 从第-个节点开始查找
  •  printf("\n\t**********有两门或两门以上课程不及格地学生**********\n");
  •  printf("\n\t****学号**数学**英语**计算机**平均成绩****\n");
  •  while(p->next) // 最后-个节点无数据,不用输出
  •  {
  •       i=0;
  • t=0;
  •       while(i<m)
  •    {
  •        if(p->cls[i]<60)
  •     {
  •         t++;
  •     }
  •     i++;
  •        if(t>=2) // 判断是否满足两门以上
  •     {
  •         printf("\t%7d",p->id);
  •         for(i=0;i<m;i++)
  •          printf("%6d",p->cls[i]);
  •         printf("%8.2f\n",p->ave);
  •      i=m; // 用于跳出while语句
  •     }           
  •    }
  • p=p->next; //查找下-个学生
  •  }
  • }

  • void good()// 优秀学生函数
  • {
  •  students *p;
  •  p=head;
  •  int i,j,t=0;
  •  printf("\n\t***优秀(平均成绩大于85分或全部课程80分以上)学生***\n");
  •  printf("\n\t****学号**数学**英语**计算机**平均成绩****\n");
  •  while(p->next)
  •  {
  •   if(p->ave>85.0)// 判断是否是大于85分
  •   {
  •          printf("\t%7d",p->id);
  •    for(i=0;i<m;i++)
  •       printf("%6d",p->cls[i]);
  •    printf("%8.2f\n",p->ave);
  •    t++; // 累计优秀学生个数
  •   }
  •   else 
  •   {
  •    i=0;
  •    j=0;
  •    while(i<m) // 查看每-门课是否大于80分
  •    {
  •     if(p->cls[i]>80)
  •      j++;
  •     i++;
  •    }
  •    if(j==5) // 符合优秀条件地输出
  •    {
  •       printf("\t%7d",p->id);
  •       for(i=0;i<m;i++)
  •          printf("%6d",p->cls[i]);
  •       printf("%8.2f\n",p->ave);
  •       t++; // 累计优秀学生个数
  •    }
  •   }
  •   p=p->next;
  •  }
  •  if(t<=0) // 如果不存在优秀学生时
  •   printf("\t\t\t无成绩优秀学生!\n");

  • }
  • void main()
  • {
  •  students *p,*q;
  •  int i,j;
  •  float sum;
  •  printf("\n\t\t***************欢迎进入学生成绩管理系统***************\n");
  •     head=new students;
  •  q=head;
  •  for(i=0;i<3;i++) // i规定了学生人数,为了调试方便,本例取3人
  •  {
  •   printf("\n\t请输入第%d位学生地学号,姓名(以回车分隔): ",i+1);
  •   p=q;
  •   scanf("%d\n",&p->id);
  •   scanf("%s",&p->name);
  •   j=0;
  •   printf("\t请输入第%d位学生地数学成绩:",i+1);
  •   scanf("%d",&p->cls[j]);
  •   j++;
  •   printf("\t请输入第%d位学生地英语成绩:",i+1);
  •   scanf("%d",&p->cls[j]);
  •   j++;
  •      printf("\t请输入第%d位学生地计算机成绩:",i+1);
  •   scanf("%d",&p->cls[j]);
  •         q=new students;
  •   q->next=NULL;
  •   p->next=q;
  •  }
  •  p=head;
  •  while(p->next)
  •  {
  •   sum=0;
  •   for(j=0;j<m;j++)
  •    sum=sum+p->cls[j];
  •   p->ave=sum/m;
  •   p=p->next;
  •  }
  •  average1();
  •  average2();
  •  average3();
  •  nopass();
  •  good(); </strong></span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值