解题思路:
首先通过结构体来存储这些数据
struct student{ char name[200]; int age; int score; }stu[1005];
之后再依次进行排序,我这里选用的是冒泡排序,这样才更容易组合
冒泡排序(Bubble Sort),是一种较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
// 冒泡排序<参考代码> void BubbleSort(int arr[], int length) { for (int i = 0; i < length; i++) { for (int j = 0; j < length - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp; temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } //位置1 } } } //这样子就是从小到大的冒泡排序
知道这些后,就解这道题的时候,就只需要在冒泡排序的位置1处加上题目的额外要求就可以了
注意事项:
这道题的比较名字可以用strcmp函数来进行比较
原型:int strcmp(const char *s1, const char *s2); 头文件:#include <string.h> 功能:用来比较两个字符串 参数:s1、s2为两个进行比较的字符串 返回值:若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。 说明:strcmp()函数是根据ACSII码的值来比较两个字符串的;strcmp()函数首先将s1字符串的第一个字 符值减去s2第一个字符,若差值为零则继续比较下去;若差值不为零,则返回差值。
本题的排序规律:
1、成绩低的在上面
2、成绩相同时,名字小的在上面(用strcmp比较)
3、名字也相同时,年龄小的在上面
参考代码:
#include <stdio.h> #include <string.h> struct student{ char name[200]; int age; int score; }stu[1005]; int main() { int n; struct student t; while(~scanf("%d", &n)) { for (int i = 0; i < n; i++) scanf("%s%d%d", stu[i].name, &stu[i].age, &stu[i].score); for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - 1 - i; j++) { if (stu[j].score > stu[j + 1].score) { t = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = t; } else if (stu[j].score == stu[j + 1].score) { if (strcmp(stu[j].name,stu[j + 1].name) > 0) { t = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = t; } else if (strcmp(stu[j].name,stu[j+1].name) == 0) { if (stu[j].age > stu[j + 1].age) { t = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = t; } } } } for (int i = 0; i < n; i++) printf("%s %d %d\n", stu[i].name, stu[i].age, stu[i].score); } return 0; }
0.0分
37 人评分
为什么是用n-1,n不行吗
dotcpp0631211 2022-12-23 19:39:07 |
数组的定义是1到n,但是数组的下标是0到n-1
童蒙 2023-05-14 11:47:59 |
可以,但是冒泡排序不需要
结构体数组大小低于994会显示运行错误
简单的a+b (C语言代码)浏览:572 |
时间转换 (C语言代码)浏览:698 |
勾股数 (C语言代码)浏览:830 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:545 |
C二级辅导-温度转换 (C语言代码)浏览:575 |
1074(纳闷了,答案错误,求指教)浏览:384 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:405 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:581 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:935 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:494 |