题目描述:
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
解题思路:
设一个结构体A存储姓名、年龄和成绩,录入数据后分别按照条件遍历结构体数组,对于与排序要求相悖的数据单元进行交换。
水题一条,弄明白存储体与字符串处理的一些基本的语句即可。
1 #include<stdio.h> 2 #include<string.h> 3 struct A 4 { 5 char name[50]; 6 int age; 7 int score; 8 } A[1000]; 9 int main() 10 { 11 int n=0,i,j; 12 while(scanf("%d",&n)!=EOF) 13 { 14 char name[100]; 15 int age; 16 int score; 17 for(i=0; i<n; i++) 18 { 19 scanf("%s%d%d",A[i].name,&A[i].age,&A[i].score); 20 } 21 for(i=0; i<n; i++) 22 { 23 for(j=i; j<n; j++) 24 { 25 if(A[i].score>A[j].score) 26 { 27 age=A[j].age; 28 strcpy(name,A[j].name); 29 score=A[j].score; 30 31 A[j].age=A[i].age; 32 A[j].score=A[i].score; 33 strcpy(A[j].name,A[i].name); 34 35 A[i].age=age; 36 A[i].score=score; 37 strcpy(A[i].name,name); 38 } 39 } 40 } 41 for(i=0; i<n; i++) 42 { 43 for(j=i; j<n; j++) 44 { 45 if(A[i].score==A[j].score) 46 if(strcmp(A[i].name,A[j].name)>0) 47 { 48 age=A[j].age; 49 strcpy(name,A[j].name); 50 score=A[j].score; 51 52 A[j].age=A[i].age; 53 A[j].score=A[i].score; 54 strcpy(A[j].name,A[i].name); 55 56 A[i].age=age; 57 A[i].score=score; 58 strcpy(A[i].name,name); 59 } 60 else if(strcmp(A[i].name,A[j].name)==0) 61 { 62 if(A[i].age>A[j].age) 63 { 64 age=A[j].age; 65 strcpy(name,A[j].name); 66 score=A[j].score; 67 68 A[j].age=A[i].age; 69 A[j].score=A[i].score; 70 strcpy(A[j].name,A[i].name); 71 72 A[i].age=age; 73 A[i].score=score; 74 strcpy(A[i].name,name); 75 } 76 } 77 } 78 79 } 80 for(i=0; i<n; i++) 81 { 82 printf("%s %d %d ",A[i].name,A[i].age,A[i].score); 83 } 84 } 85 return 0; 86 }