c语言:成绩排名(结构体)
题目详情
定义结构体struct stu,编写成绩排名函数:void sort(struct stu *ps,int n),对结构体数组按成绩排名。 程序功能为读入整数N(N<100),再读入N个学生的学号(整型)和成绩(实数)。按样例输出排名。
输出格式
第一列是名次,注意并列情况;
第二列是学号,第三列是成绩(2位小数)。
输入样例
5
101 99
102 100
103 50
104 80
105 99
输出样例
1 102 100.00
2 101 99.00
2 105 99.00
4 104 80.00
5 103 50.00
题目分析
怎么来分析这个题目呢?
我觉得这道题难得不是排序,难顶的是这该死的并列排名还有一些细节!细节!细节!
先说说这个并列排名吧 我是真真的在这磕了好久 提交了好多次 就是不能够通过测试点1 就是不能完全对... 那种感觉真的是太难受了。(最后是一个好朋友救了我)
直接说说我的思路吧。
无非就是两种情况
所以我们可以考虑使用 if (s[i].score == s[i-1].score) 具体代码可以看下面
第一种就是该学生的成绩与前面一个的学生不相同 这个时候我们就可以直接用 i+1 来表示排名就可以了 最关键的一步就是我们要将这个名次用一个变量存储起来 (至于为什么呢 看了第2种情况就悟了)。
第二种就是成绩并列的情况了 这个时候的名次就和前一个的是一样的了 这个时候我们就可以直接用上边的那个存储名次的变量了。
大致就是这样了。
代码展示
静态构建结构体数组
# include <stdio.h>struct stu
{int num;//学号 float score;//成绩
};void sort(struct stu * ps, int n)
{int i, j;struct stu t;/* 定义中间变量 *//* 冒泡排序法 这里就不具体解释了*/for (i=0; i<n; i++){for (j=0; j<n-1-i; j++){if (ps[j].score < ps[j+1].score){t = ps[j];ps[j] = ps[j+1];ps[j+1] = t;}}}}int main(void)
{struct stu s[100]; int N, i;int k = 0; /* 记录排名 (呜呜呜 定义这个变量真的太有必要了)*/ scanf("%d", &N); /* 输入N个学生个数 */for (i=0; i<N; i++)/* 逐个输入学生的信息 */ {scanf("%d%f", &s[i].num, &s[i].score);}sort(s, N);/* 将学生信息排列 */for (i=0; i<N; i++)/* 遍历所有学生 逐个输出 */{/* 与前一个学生成绩进行比较 在这里是与前一个学生的信息进行对比 具体分析可以参考题目分析里的 */if (s[i].score == s[i-1].score){ printf("%d %d %.2f", k, s[i].num, s[i].score); /* 注意题目要求成绩要保留两位小数 */}else { /* 如果与前面的成绩不相等的话 就直接用i+1来表示排名再好不过了 */printf("%d %d %.2f", i+1, s[i].num, s[i].score);k = i+1;/* 把这个排名保存在K中 如果后面的成绩与这个成绩相同 排名就相同 直接就用K来表示了 */ }if (i < N-1) /* 呜呜呜 我们这里还要满足人类的要求 输出最后一名时不能加换行符 */{printf("\n");} } return 0;
}
动态构建结构体数组
思路都一样就不注释了
# include <stdio.h>
# include <stdlib.h>
# define LEN sizeof(struct stu)struct stu
{int num;float score;
};void sort(struct stu * ps, int n)
{int i, j;struct stu t;for (i=0; i<n; i++){for (j=0; j<n-1-i; j++){if (ps[j].score < ps[j+1].score){t = ps[j];ps[j] = ps[j+1];ps[j+1] = t;}}}}int main(void)
{struct stu * s; int N, i;scanf("%d", &N);s = (struct stu *)malloc(N*LEN);for (i=0; i<N; i++){scanf("%d%f", &s[i].num, &s[i].score);}sort(s, N);int t; for (i=0; i<N; i++){if (s[i].score == s[i-1].score){printf("%d %d %.2f", t, s[i].num, s[i].score);}else {printf("%d %d %.2f", i+1, s[i].num, s[i].score);t = i+1;}if (i < N-1){printf("\n");} }return 0;
}
运行展示
c语言:成绩排名(结构体)相关推荐
- 6-2 综合成绩排名-结构体二 (100分)
6-2 综合成绩排名-结构体二 (100分) 众所周知,计算机院要对申请转入计算机大类的学生进行考核,考核方式包括机试和面试.学生综合成绩采取百分制,其中50%由机试成绩核算,另50%由学生已获得的加 ...
- C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分
4 C语言编程题--结构体 **设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中.请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有 ...
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct)C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- c语言 结构体ppt,C语言知识学习结构体.ppt
C语言知识学习结构体.ppt Chap 9 结构,9.1 输出平均分最高的学生信息 9.2 学生成绩排序 9.3 修改学生成绩,本章要点,什么是结构结构与数组有什么差别 有几种结构的定义形式,它们之间 ...
- Go语言学习、结构体
最近疫情比较严重,过年也不能出门,闲来无事,继续更新博客吧. 武汉加油! 我们来继续说下go语言中的结构体 比如我们现在想存储一个学生信息,如:学号.姓名.年龄.性别,等信息,按照我们以前的存储习惯, ...
- C语言中的结构体定义和使用例子
C语言中的结构体定义和使用例子 一.结构体定义的三种方式 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对 问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共 ...
- Go语言基础之结构体
转载地址:https://www.liwenzhou.com/posts/Go/10_struct/ Go语言中没有"类"的概念,也不支持"类"的继承等面向对象 ...
- C语言小记:结构体及其在内存中的储存形式
C语言小记:结构体及其在内存中的储存形式 1.结构体 结构体的作用:自定义一个包含多种不同数据类型的变量. 语法: struct 结构体名称 {结构体成员1:结构体成员2:结构体成员3:... } 定 ...
- C语言中的结构体,结构体中数组初始化与赋值
最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...
- Linux结构体变量报错,C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
最新文章
- Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)
- hdu3870 基于最短路的最小割
- 【区块链:超级账本】Win10 Hyperledger环境搭建
- TCPDUMP/LIBPCAP 3-PCAP's MAN手册(1)
- 依赖注入模式中,为什么用对象而不是用数组传递?
- ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)
- mysql数据库information_schema库中的表说明
- webpack打包后的文件夹是空的_webpack打包Vue工程
- 从后台获取的数据渲染到页面中的dom操作
- Hadoop的eclipse1.1.2插件的安装和配置
- erc20钱包下载_【重要公告】VNT Chain主网钱包使用指南
- python语音地图定位_python 利用高德地图定位小区名字
- 谷歌学术Google Scholar超实用干货(拒绝翻墙/插件)
- mysql中使用order by 排序时使用if()函数应用场景。
- 人工智能学习-传教士-15数码-拟合-逻辑推理
- [转]仙剑4破解方法详解[图]
- 在3D城市模型中添加不同的纹理
- 零基础Matlab Note9--离散数据绘图set(gca, )
- win10下卸载office2010(测试多种方法后,成功实现)
- c语言中最大公约数的编程,C语言中最大公约数求法