单链表 存储下的简单选择排序 <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>