用C语言代码实现对一份成绩单的排序(成绩单包过姓名,成绩,年龄,学号4个内容)要求能根据用户的需要(选择),提供4种排序模式:
1,成绩由大到小。
2,姓名首字母由A到Z
3,年龄由小到大
4,学号由小到大
下面是我写的程序,出错了的
#include <stdio.h>#include <stdlib.h>struct student{ char name[20]; float score; int age; int num;}; void mode1( struct student stu[],int n)//参考书上307页(比较模式一){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].score>stu[k].score)//两两比较成绩,由高到低排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode2(struct student stu[],int n)//(比较模式二){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].name<stu[k].name)//两两比较姓名首字母,由A到Z排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode3(struct student stu[],int n)//(比较模式三){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].age<stu[k].age)//两两比较年龄,由小到大排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode4(struct student stu[],int n)//(比较模式四), int n=4;//定义变量n为学生人数4{ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].num<stu[k].num)//两两比较学号数字大小,由小到大排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} int main(){ struct student stu[4]={{"zhangsan",65,18,211301}, {"qiqi",89.5,17,211302}, {"wanger",75.3,15,211303}, {"mazi",93.7,19,211304}};//定义结构体数组,我理解为填写学生信息 int m,i,n; scanf("%d",&m); for(i=0;i<n;i++) {printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);} printf("\n"); if(m==1) mode1; else if(m==2) mode2; else if(m==3) mode3; else if(m==4) mode4; for(i=0;i<n;i++) {printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);} return 0;}