成绩排序

题目描述:

有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 }
原文地址:https://www.cnblogs.com/AKsnoopy/p/8422828.html