case 5:if (pm->score[2]
case 6:if (pm->score[3]
}
if (pm!=p1)
{
mid=*pm; *pm=*p1; *p1=mid; px=pm->next; pm->next=p1->next;
p1->next=px; } }
void sort_2(Student *head)/* 最值及平均值函数 */ {
Student *p=head->next;
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4; /* 最值声明 */ int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0; float aver_1,aver_2,aver_3,aver_4,aver_sum; if (!p)
return; /* 链表非空 */
max_1=min_1=p->score[0];max_2=min_2=p->score[1];
max_3=min_3=p->score[2];max_2=min_2=p->score[3]; /* 初始时以表头的值域中各值为最值 */ max_sum=min_sum=p->sum; for(;p;p=p->next) { }
printf(\排序后的成绩表为:\\n\print(head); /* 打印排序后的链表 */ return head;
if (max_1
else if (min_1>p->score[0]) min_1=p->score[0]; /* 最值的转换 */ if (max_2
else if (min_sum>p->sum) min_sum=p->sum; }
aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n; aver_sum=aver_1+aver_2+aver_3+aver_4; /*求平均值 */ printf(\总共%d名学生,具体数据为:\\n\
printf(\语文最高分为%d,最低分为%d,平均分为%.2f\\n\ printf(\数学最高分为%d,最低分为%d,平均分为%.2f\\n\printf(\英语最高分为%d,最低分为%d,平均分为%.2f\\n\ printf(\计算机最高分为%d,最低分为%d,平均分为%.2f\\n\printf(\总分最高分为%d,最低分位%d,平均分为%.2f\\n\
sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];
max_sum,min_sum,aver_sum); }
void find(Student *head)/* 查找节点 */ {
Student *p; int choose,fnum; char tem[20];
if (n==0) {printf(\当前系统没有任何学生数据!\\n \for(;;)
{
printf(\请输入您要查询学生的方式:\\n\\n\
printf(\、按学号查询;2、按姓名查询;0、不查询了。\\n\\n\ printf(\请选择:\ scanf(\
while(getchar()!='\\n'); if (choose==1)
下查找*/
{ printf(\请输入你要查询的学生的学号,输入0退出学号查询:\ scanf(\ for(;fnum;) {
for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);/*节点的下一个部位空且输入还不是0,顺着指针向
if (!p) {
printf(\找不到你要查询的学号,请重新输入,输入0表示结束:\
scanf(\
}
else if (p->num==fnum)
{
printf(\学号为%d学生的数据为:\\n\
printf(\学号\\t姓名\\t语文成绩 数学成绩 英语成绩 计算机\\成绩 总分\\n\ printf(\ %d %d %d %d \\%d\\n\ p->name,p->score[0],p->score[1],p->score[2],p->score[3], p->sum);
printf(\请输入你还要查询的学生的学号,输入0表示不按学\\号查询了:\ scanf(\输入还要查询的学生的学号,输入0表示退出按学号查询*/ } } }
else if (choose==2) {
printf(\请输入你要查询的学生的姓名,输入0退出姓名查询:\ scanf(\
for(;strcmp(tem,\ /* 字符串比较函数,不是输入0则进行该循环*/ {
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next); if (!p) {
printf(\找不到你要查询的姓名,请重新输入,输入0表\\示结束:\ scanf(\ }
else if (!strcmp(p->name,tem)) {
printf(\姓名为%s学生的数据为:\\n\
printf(\学号\\t姓名\\t语文成绩 数学成绩 英语成绩 \\计算机成绩 总分\\n\ printf(\ %d %d %d \\%d %d\\n\ p->num,p->name,p->score[0],p->score[1],p->score[2], p->score[3],p->sum);
printf(\请输入你还要查询的学生的姓名,输入0表\\示不按姓名查询了:\ scanf(\ } } }
else if (choose==0) {printf(\你选择了不查询!\\n\
else {printf(\输入有误,默认选择了不查询!\\n\ } }
Student *add_new(Student *head)/* 加入节点 */
{ { } }
head=sort_1(head,1); /*返回上一级 */ printf(\加入后的成绩表为:\\n\print(head); /* 打印加入后的成绩表 */ return head;
p=(Student *)malloc(LEN); p->num=flag;
printf(\请输入新加入学生的姓名:\
scanf(\
Student *p; int flag;
printf(\请输入你要新加入学生的学号(学号为0表示结束输入):\ scanf(\ /* 学号为0表示结束输入 */ while(getchar()!='\\n'); for(;flag;)
printf(\请输入新加入学生的语文成绩:\
scanf(\
printf(\请输入新加入学生的数学成绩:\
scanf(\
printf(\请输入新加入学生的英语成绩:\
scanf(\
printf(\请输入第%d名学生的计算机成绩:\
scanf(\
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]; p->next=head->next;
head->next=p;
n++;
printf(\请输入还要加入学生的学号,没有此学生则输入0表示结束:\ scanf(\学号为0表示结束输入 */