方法一(使用结构体做法)#include<stdio.h>#include<string.h>typedef struct namescore//定义结构体,包括姓名和分数 { char name[10]; float score;}NS; main(){ NS s[100];//定义结构体数组变量 ,可以存放100个学生的姓名和分数 NS temp; int i=0,j=0; int n=-1; printf("请输入姓名和分数:(输入exit结束)"); while(1)//设置死循环 { n++; printf("\n请输入姓名:"); scanf("%s",s[n].name);//赋值姓名 if(!strcmp("exit",s[n].name))//当输入exit时退出循环 {//strcmp包含在string.h头文件中,判断两个字符串是否相等 n--;break;//因为输入"exit"会保存到结构体中,所以要n-- } printf("\n请输入分数:"); scanf("%f",&s[n].score);//输入分数 } for(i=0;i<n;i++)//用冒泡法排序 for(j=i+1;j<=n;j++) { if(s[i].score<s[j].score)//如果下一个数比前一个数大,则交换 { temp=s[i]; s[i]=s[j]; s[j]=temp; } } printf("成绩从大到小的排序:\n"); printf("---姓名---------分数---------\n");//输出姓名和分数 for(i=0;i<=n;i++) { printf("%6s",s[i].name); printf(" %5.1f\n",s[i].score); }} //方法二(如果不会结构体的另一种方法)#include<stdio.h>#include<string.h>#define N 100 main(){ char name[N][10];//定义二维数组 char tempname[10]; float score[N]; float tempscore; int i=0,j=0,n=0; printf("请输入姓名和分数:(输入exit结束)"); while(1) { printf("\n请输入姓名:"); scanf("%s",name[n]); if(!strcmp("exit",name[n])) { break; } printf("\n请输入分数:"); scanf("%f",&score[n]); n++; if(n>100)//当将要溢出时,就退出循环 break; } for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) { if(score[i]<score[j])//分数与姓名交换 { tempscore=score[i]; score[i]=score[j]; score[j]=tempscore; strcpy(tempname,name[i]);//strcpy在string.h头文件中 strcpy(name[i],name[j]);//将name[j]的值复制到name[i]中 strcpy(name[j],tempname); } } printf("成绩从大到小的排序:\n"); printf("---姓名---------分数---------\n");//输出姓名和分数 for(i=0;i<n;i++) { printf("%6s",name[i]); printf(" %5.1f\n",score[i]); } getch();}
#include<stdio.h>#include<string.h>#include<math.h>typedef struct student{int score;char name[20];}student;void swap(student * s1,student * s2){char nametemp[20];strcpy(nametemp,s1->name);strcpy(s1->name,s2->name);strcpy(s2->name,nametemp);int temp;temp=s1->score;s1->score=s2->score;s2->score=temp;}void sort(student stu[],int n){int i,j;for(i=0;i<n;i++)for(j=0;j<n-1;j++){if(stu[j].score<stu[j+1].score){swap(&stu[j],&stu[j+1]);}else if(stu[j].score==stu[j+1].score){if(strcmp(stu[j].name,stu[j+1].name)>0){swap(&stu[j],&stu[j+1]);}}}}void input(student * s){char string[30];gets(string);int n,i,j;n=strlen(string);for(i=0;i<n;i++){if(string[i]==','){s->name[i]='\0';break;}s->name[i]=string[i];}s->score=0;int temp;j=n-(i+1)-1;for(i++;i<n;i++,j--){temp=(int)string[i]-48;s->score= s->score+ temp *(int)pow(10.0,j);}}void main(){int n,i;student stu[20];scanf("%d\n",&n);for(i=0;i<n;i++){input(&stu[i]);}sort(stu,n);for(i=0;i<n;i++){printf("%s,%d\n",stu[i].name,stu[i].score);}}