user-0 提问: 差个成绩排序和成绩统计功能，有大佬懂的嘛？弄了一下午实在是不会用链表排序。

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-0
content: 引用 5 楼 自信男孩 的回复:[quote=引用 4 楼 weixin_51970786 的回复:][quote=引用 3 楼 weixin_51970786 的回复:][quote=引用 2 楼 自信男孩 的回复:][quote=引用 1 楼 自信男孩 的回复:]static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;      p = q = phead;      for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                  case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                  case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                  case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                  case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }              if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }  void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);      bubble_sort(g_pHead, score_cmp, b);     } 排序逻辑，供参考～  没测试，建议用这个代码试一下，之前写过类似的，测试过没问题。先试试吧，这个有问题可以继续提问～[/quote]         请问如果排序完要按顺序输入该怎么写[/quote]打错了，是输出该怎么写[/quote]  那就是链表遍历的操作，如果不会网上搜搜。其实很简单  Node *p = g_head;  while(p) {     printf("%s %dxxxxx", p->stu.name,xxxx);     p = p->pNext; }  自己完善一下，封装成函数就好了 [/quote] #include<stdio.h> #include<conio.h> #include<stdlib.h> #define M 100  #define N 1000 //定义一个学生的信息 typedef struct _Student { 	char name[20];  //姓名 	int studid;//学号 	int math;       //数学成绩 	int english;    //英语成绩 	int c;          //C语言成绩 	int pe;         //体育成绩 	int total;      //总成绩 }Student; //定义一个节点 typedef struct _Node {    Student stu;//学生     struct _Node* pNext; }Node; Node*g_pHead=NULL;             //头结点  char password[20]="4396";            //管理员密码 void Menu();//声明菜单界面函数  void Input();//声明成绩录入函数  void Print();//声明成绩显示函数  void Save();//声明成绩保存函数 void Order();//声明成绩排序函数  void Modify();//声明成绩修改函数 void Sta();//声明成绩统计函数  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt); int main(){ 	int a;  	while(1){  //while循环使程序持续运行  	Menu(); 	scanf("%d",&a); 	switch(a)//**用户进行选择**// { case 1: 	Input(); //成绩录入  	break; case 2: 	Print();//成绩显示  	break; case 3: 	Save();//成绩保存  	break; case 4: 	Order();//成绩排序  	break; case 5: 	Modify();//成绩修改  	break; case 6: 	printf("成绩统计\n"); 	break; case 7: 	printf("您已成功退出系统，欢迎下次使用！\n"); 	return 0; default: 	printf("无效选择，请重新输入\n"); 	break;  } }	 	return 0; }  void Menu()//菜单界面函数  {	         printf("\t\t\t欢迎使用学生班级成绩管理系统！\n");         printf("\t\t=============================================\n");         printf("\t\t==\t          主菜单                   ==\n");         printf("\t\t=============================================\n");         printf("\t\t==\t\t1.成绩录入                 ==\n");         printf("\t\t==\t\t2.成绩显示                 ==\n");         printf("\t\t==\t\t3.成绩保存                 ==\n");         printf("\t\t==\t\t4.成绩排序                 ==\n");         printf("\t\t==\t\t5.成绩修改                 ==\n");         printf("\t\t==\t\t6.成绩统计                 ==\n");         printf("\t\t==\t\t7.系统退出                 ==\n");         printf("\t\t=============================================\n");         printf("\t\t===========请选择相应的功能列表==============\n");      } void Input()//成绩录入函数 { 	Node* pNewNode =(Node*)malloc(sizeof(Node));//创建一个新节点  	pNewNode->pNext=NULL; 	if(g_pHead==NULL) 	{ 		g_pHead=pNewNode; 	} 	else 	{ 		pNewNode->pNext=g_pHead; 		g_pHead=pNewNode; 	} 	printf("请输入学生的姓名：\n"); 	scanf("%s",pNewNode->stu.name); 	printf("请输入学生的学号：\n"); 	scanf("%d",&pNewNode->stu.studid); 	printf("请输入学生的数学成绩：\n"); 	scanf("%d",&pNewNode->stu.math); 	printf("请输入学生的英语成绩：\n"); 	scanf("%d",&pNewNode->stu.english); 	printf("请输入学生的C语言成绩：\n"); 	scanf("%d",&pNewNode->stu.c); 	printf("请输入学生的体育成绩：\n"); 	scanf("%d",&pNewNode->stu.pe); pNewNode->stu.total=pNewNode->stu.math+pNewNode->stu.english+pNewNode->stu.c+pNewNode->stu.pe; //总成绩  	printf("学生成绩录入成功！\n"); 	system("pause");      //暂停执行 	system("cls");        //清屏 	 	 	 	 	 }  void Print()//成绩显示函数  { 	system("cls"); 	printf("                     学生成绩表                         \n"); 	printf("========================================================\n"); 	printf("姓名\t学号\t数学\t英语\tC语言\t  体育\t  总成绩\n"); 	//遍历链表，一次打印出学生的成绩 	Node* p=g_pHead; 	while(p!=NULL) 	{ 		 		printf("%s      %d    %d    %d    %d     %d    %d\n", 		p->stu.name,p->stu.studid,p->stu.math,p->stu.english,p->stu.c,p->stu.pe,p->stu.total); 		p=p->pNext;//指向下一个，少了这个会无限循环  	 }  	system("pause"); } void Save()//成绩保存函数 {   //打开文件  	FILE* fp=fopen("StuInformation.data","w"); 	if(fp==NULL) 	{ 		printf("文件打开失败.\n"); 		return; 	} 	//再次遍历链表，保存学生的成绩 	Node* p=g_pHead; 	while(p!=NULL) 	{ 	  fwrite(&p->stu,1,sizeof(Student),fp); 	  p=p->pNext; 	}  	//关闭文件 	fclose(fp); 	printf("\n学生成绩保存成功！");      system("cls"); 	system("fause");//'fause' 不是内部或外部命令，也不是可运行的程序或批处理文件??	  }  static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }   void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;       p = q = phead;       for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                   case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                   case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                   case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                   case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }               if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }   void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);       bubble_sort(g_pHead, score_cmp, b);	     Node *p =g_pHead;  while(p) {     printf("%d\n", p->stu.total);     p = p->pNext; } }    void Modify()//成绩修改函数   {   	int studid,c;   	char d[20];   	printf("请输入管理员密码：");   	scanf("%s",d);   	if(strcmp(password,d)==0)   	{   		printf("管理员登陆成功.\n");   		printf("请输入学生的学号:\n");    	scanf("%d",&studid);   	Node* p=g_pHead;   	while(p!=NULL)   	{   		if(p->stu.studid==studid)   		{   			printf("请输入要修改成绩的科目：1.数学  2.英语  3.C语言  4.体育\n");   			scanf("%d",&c);   			printf("请输入你要改的分数：\n");   			switch(c) 			  { 			  	case 1: 				scanf("%d",&p->stu.math); 				break; 				case 2: 				scanf("%d",&p->stu.english); 				break;			 				case 3: 				scanf("%d",&p->stu.c); 				break;								 				case 4: 				scanf("%d",&p->stu.math); 				break;			 			  } 			  system("cls"); 			  printf("成绩修改成功\n"); 			  system("pause");  			  break;      			   			 		  } 		  p=p->pNext;   		 	  } 	  if(p==NULL) 	  { 	  	printf("没有找到该学生的信息.\n"); 	  	system("pause"); 		system("cls"); 	  }   	 	  } 	while(strcmp(password,d)!=0) 	  { 	  	system("cls"); 	    printf("密码错误,返回主菜单\n"); 	    system("pause"); 	    break;  	 }   	    } 这是我已经改了的，为什么运行后打印出来的总分数还是乱序的？

user: user-2
content: 引用 4 楼 weixin_51970786 的回复:[quote=引用 3 楼 weixin_51970786 的回复:][quote=引用 2 楼 自信男孩 的回复:][quote=引用 1 楼 自信男孩 的回复:]static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;      p = q = phead;      for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                  case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                  case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                  case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                  case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }              if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }  void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);      bubble_sort(g_pHead, score_cmp, b);     /*     switch(b)     {         case 1:for(i=0;i<=M;i++)//数学成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].math>stu[i].math)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                         }                      }                }                for(;j<=M;j--)                {                    printf("%d",stu[j].math);                }                break;         case 2:for(i=0;i<=M;i++)//英语成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].english>stu[i].english)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 3:for(i=0;i<=M;i++)//C语言成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].c>stu[i].c)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 4:for(i=0;i<=M;i++)//体育成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].pe>stu[i].pe)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                }                break;         case 5:for(i=0;i<=M;i++)//总成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].total>stu[i].total)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                  }                break;         default: printf("无效操作，请重新输入.");     } */ } 排序逻辑，供参考～  没测试，建议用这个代码试一下，之前写过类似的，测试过没问题。先试试吧，这个有问题可以继续提问～[/quote]         请问如果排序完要按顺序输入该怎么写[/quote]打错了，是输出该怎么写[/quote]  那就是链表遍历的操作，如果不会网上搜搜。其实很简单  Node *p = g_head;  while(p) {     printf("%s %dxxxxx", p->stu.name,xxxx);     p = p->pNext; }  自己完善一下，封装成函数就好了

user: user-0
content: 引用 3 楼 weixin_51970786 的回复:[quote=引用 2 楼 自信男孩 的回复:][quote=引用 1 楼 自信男孩 的回复:]static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;      p = q = phead;      for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                  case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                  case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                  case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                  case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }              if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }  void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);      bubble_sort(g_pHead, score_cmp, b);     /*     switch(b)     {         case 1:for(i=0;i<=M;i++)//数学成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].math>stu[i].math)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                         }                      }                }                for(;j<=M;j--)                {                    printf("%d",stu[j].math);                }                break;         case 2:for(i=0;i<=M;i++)//英语成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].english>stu[i].english)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 3:for(i=0;i<=M;i++)//C语言成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].c>stu[i].c)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 4:for(i=0;i<=M;i++)//体育成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].pe>stu[i].pe)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                }                break;         case 5:for(i=0;i<=M;i++)//总成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].total>stu[i].total)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                  }                break;         default: printf("无效操作，请重新输入.");     } */ } 排序逻辑，供参考～  没测试，建议用这个代码试一下，之前写过类似的，测试过没问题。先试试吧，这个有问题可以继续提问～[/quote]         请问如果排序完要按顺序输入该怎么写[/quote]打错了，是输出该怎么写

user: user-0
content: 引用 2 楼 自信男孩 的回复:[quote=引用 1 楼 自信男孩 的回复:]static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;      p = q = phead;      for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                  case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                  case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                  case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                  case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }              if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }  void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);      bubble_sort(g_pHead, score_cmp, b);     /*     switch(b)     {         case 1:for(i=0;i<=M;i++)//数学成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].math>stu[i].math)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                         }                      }                }                for(;j<=M;j--)                {                    printf("%d",stu[j].math);                }                break;         case 2:for(i=0;i<=M;i++)//英语成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].english>stu[i].english)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 3:for(i=0;i<=M;i++)//C语言成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].c>stu[i].c)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 4:for(i=0;i<=M;i++)//体育成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].pe>stu[i].pe)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                }                break;         case 5:for(i=0;i<=M;i++)//总成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].total>stu[i].total)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                  }                break;         default: printf("无效操作，请重新输入.");     } */ } 排序逻辑，供参考～  没测试，建议用这个代码试一下，之前写过类似的，测试过没问题。先试试吧，这个有问题可以继续提问～[/quote]         请问如果排序完要按顺序输入该怎么写

user: user-2
content: 引用 1 楼 自信男孩 的回复:static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;      p = q = phead;      for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                  case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                  case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                  case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                  case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }              if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }  void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);      bubble_sort(g_pHead, score_cmp, b);     /*     switch(b)     {         case 1:for(i=0;i<=M;i++)//数学成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].math>stu[i].math)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                         }                      }                }                for(;j<=M;j--)                {                    printf("%d",stu[j].math);                }                break;         case 2:for(i=0;i<=M;i++)//英语成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].english>stu[i].english)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 3:for(i=0;i<=M;i++)//C语言成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].c>stu[i].c)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 4:for(i=0;i<=M;i++)//体育成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].pe>stu[i].pe)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                }                break;         case 5:for(i=0;i<=M;i++)//总成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].total>stu[i].total)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                  }                break;         default: printf("无效操作，请重新输入.");     } */ } 排序逻辑，供参考～  没测试，建议用这个代码试一下，之前写过类似的，测试过没问题。先试试吧，这个有问题可以继续提问～

user: user-2
content: static int score_cmp(int s1, int s2) {     if (s1 > s2)         return 1;     else if (s1 == s2)         return 0;     else         return -1; }  void bubble_sort(Node *phead, int (*pcmp)(int, int), int opt) {     struct _Student stu;     Node *p, *q;     int flag = 0;     if (!phead)         return;      p = q = phead;      for (;p;p = p->pNext)         for (;q;q = q->pNext) {             flag = 0;             switch (opt) {                 case 1:                 if (pcmp(p->stu.math, q->stu.math) > 0)                     flag = 1;                 break;                  case 2:                 if (pcmp(p->stu.english, q->stu.english) > 0)                     flag = 1;                 break;                  case 3:                 if (pcmp(p->stu.c, q->stu.c) > 0)                     flag = 1;                 break;                  case 4:                 if (pcmp(p->stu.pe, q->stu.pe) > 0)                     flag = 1;                 break;                  case 5:                 if (pcmp(p->stu.total, q->stu.total) > 0)                     flag = 1;                 break;             }              if (flag) {                 stu = p->stu;                 p->stu = q->stu;                 q->stu = stu;             }         } }  void Order()//成绩排序函数 {     struct _Student stu[N];     int b,i,j;     system("cls");     printf("请选择你想要排序的科目:1.数学  2.英语  3.C语言  4.体育  5.总成绩\n");     scanf("%d",&b);      bubble_sort(g_pHead, score_cmp, b);     /*     switch(b)     {         case 1:for(i=0;i<=M;i++)//数学成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].math>stu[i].math)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                         }                      }                }                for(;j<=M;j--)                {                    printf("%d",stu[j].math);                }                break;         case 2:for(i=0;i<=M;i++)//英语成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].english>stu[i].english)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 3:for(i=0;i<=M;i++)//C语言成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].c>stu[i].c)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                    }                 }                break;         case 4:for(i=0;i<=M;i++)//体育成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].pe>stu[i].pe)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                }                break;         case 5:for(i=0;i<=M;i++)//总成绩排序                {                    for(j=i+1;j<=M;j++)                    {                        if(stu[j].total>stu[i].total)                        {                            x=stu[j];                            stu[j]=stu[i];                            stu[i]=x;                        }                     }                  }                break;         default: printf("无效操作，请重新输入.");     } */ } 排序逻辑，供参考～