|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
将学生数据按成绩从低到高排序,如果成绩相同则按姓名字符的字典序由小到大排序,如果姓名的字典序也相同则按照学生的年龄从小到大排序。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct Student
- {
- char name[100]; //姓名
- int age; //年龄
- int grade; //分数
- }student;
- student stu[1000];
- int cmp(const void* s1, const void* s2)//比较结构体成员的大小,s1和s2是指向数组元素的指针
- {
- student *stu1 = (student *) s1;
- student *stu2 = (student *) s2;
- if(stu1 -> grade != stu2 -> grade) //stu1是结构体指针,需要用->访问结构体成员
- return (stu1 -> grade - stu2 -> grade);
- else if(strcmp(stu1 -> name, stu2 -> name) != 0)
- return strcmp(stu1 -> name, stu2 -> name);
- else
- return (stu1 -> age - stu2 -> age);
- }
- int main()
- {
- int n; //一共n名学生
- int i;
- while(scanf("%d", &n) != EOF)
- {
- for(i = 0; i < n; i++)
- {
- scanf("%s %d %d", stu[i].name, &(stu[i].age), &(stu[i].grade));//stu[i]是结构体变量,要用.访问结构体成员
- }//输入信息
- qsort(stu, n, sizeof(stu[0]), cmp); //排序
- for(i = 0; i < n; i++)
- {
- printf("%s %d %d\n", stu[i].name, stu[i].age, stu[i].grade);
- }
- }
-
- return 0;
- }
复制代码
|
|