当前位置: 首页 > news >正文

10名学生成绩排名系统详解

学生单门课程成绩排序

将10个学生的单门课成绩进行从高到低排序,并给出排名。、

#include <stdio.h>

int main()
{
float scores[10];
int id[10];
int i,j;
float t_s;
int t_id;

printf("请输入10个学生的成绩:(用空格隔开)\n");
for (i = 0; i < 10; i++)
{
printf("第%d个学生成绩:", i + 1);
scanf("%f", &scores[i]);
id[i] = i + 1;
}
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9 - i; j++)
{
if (scores[j] < scores[j + 1])
{
t_s= scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = t_s;

t_id = id[j];
id[j] = id[j + 1];
id[j + 1] = t_id;
}
}
}

printf("\n成绩排名如下:\n");
printf("排名\t学生序号\t成绩\n");

int grade = 1;
for (i = 0; i < 10; i++)
{
if (i > 0 && scores[i] != scores[i - 1])
{
grade = i + 1;
}
printf("%d\t第%d个学生\t%.1f\n", grade, id[i], scores[i]);
}
return 0;
}

这段代码实现了一个非常实用的学生成绩排名系统

它有两个显著的特点:

  1. 数据关联:它不仅记录成绩,还记录了学生的序号(学号)。
  2. 智能排名:它能处理分数相同的情况(例如两个第1名,下一个就是第3名,而不是第2名)。

1. 准备与输入阶段(建立档案)

  • 双数组设计:这里用了两个数组。scores存分数,id存学生是第几个输入的。
  • id[i] = i + 1;:这是一个很巧妙的初始化。当你输入第1个分数时,程序自动在id[0]里记下“1号学生”。这样即使后面排序乱了,我们依然知道这个分数原本属于谁。

2. 核心排序阶段(同步交换)

这是代码的精髓所在。它使用了冒泡排序,但做了一个重要的改进:两个数组同时交换

  • 为什么要同步交换
    想象一下,如果只交换分数,不交换序号。排序后,第一名是98分,但对应的序号还是“第5个学生”,这就乱套了。
  • 逻辑:当scores[j]scores[j+1]交换位置时,id[j]id[j+1]必须跟着一起交换。这就像两个人换座位,不仅要换试卷(分数),人(序号)也要一起换过去。

3. 排名计算逻辑(处理并列)

这段逻辑,它解决了“并列排名”的问题。

  • 场景模拟
    • i=0 (第1名)i>0不成立,跳过判断,grade默认为 1。输出:第1名
    • i=1 (第2名):假设分数和第1名一样(scores[1] == scores[0])。scores[i] != scores[i-1]为假,不更新 grade。输出:还是第1名
    • i=2 (第3名):假设分数比第1名低。scores[2] != scores[1]为真,更新grade = 2 + 1 = 3。输出:第3名
💡 效果:如果有两个第1名,下一个名次会自动变成第3名,符合标准的比赛排名规则。

4. 输出展示

  • \t:这是制表符(Tab),用来对齐表格,让输出看起来整齐美观。

📌 总结与运行示例

假设输入成绩:90 100 100 85...

  1. 排序前
    • 成绩:90, 100, 100, 85...
    • 序号:1, 2, 3, 4...
  2. 排序后(内存中)
    • 成绩:100, 100, 90, 85...
    • 序号:2, 3, 1, 4...(注意:100分对应的学生变成了2号和3号)
  3. 最终输出
    • 排名1:第2个学生 (100分)
    • 排名1:第3个学生 (100分) ——并列第一
    • 排名3:第1个学生 (90分) ——自动跳至第三
    • 排名4:第4个学生 (85分)
http://www.jsqmd.com/news/610948/

相关文章:

  • 轻量级安全助手:在2GB内存设备运行OpenClaw+SecGPT-14B
  • 2026年4月市场上新型的球阀供货厂家有哪些,市面上球阀深度剖析助力明智之选 - 品牌推荐师
  • Redis持久化:从AOF到RDB,如何实现数据不丢失?揽
  • OpenClaw多模型支持:千问3.5-9B与本地模型混用方案
  • Jenkins部署java项目 :构建触发器定时更新
  • OpenClaw多任务并行:Qwen3-14b_int4_awq模型高效调度
  • 终极Flash浏览器指南:如何在现代系统中完美运行Flash游戏与网页
  • OpenClaw+Qwen3.5-9B+VSCode:开发者效率提升套件
  • 从攻击到防御:手把手教你用PHP Prepared Statement修复SQL注入漏洞
  • 2025新范式:nomic-embed-text-v1如何碾压传统嵌入模型?实测数据告诉你答案
  • 自学笔记——集成学习
  • 终极鸣潮自动化指南:10个技巧解放双手,一键完成日常任务与声骸刷取
  • 如何使用node-fetch实现GraphQL批量查询:5个减少请求数量的实用技巧
  • 从System.Device.Gpio到AI推理:.NET 9如何让树莓派5跑通Stable Diffusion XL Lite——嵌入式AI新范式
  • 使用adb调试Android技巧
  • CDH在线扩容问题记录
  • COC部落冲突安卓自动搜鱼:Python脚本防封号实战
  • 2026年4月OpenClaw(Clawdbot)如何搭建?京东云快速流程:部署与大模型API、Skill集成指南
  • 从一次Sigar崩溃看Java生态的‘版本地狱’:如何优雅管理JDK与本地库的兼容性矩阵(附jdk1.8.0_241下载与降级实操)
  • 一款基于 .NET 开源、跨平台应用程序自动升级组件露
  • 从Hello World到百万QPS流式AI服务:FastAPI 2.0异步配置黄金5步法,附Grafana监控埋点模板
  • 基于FPGA千兆以太网的开发(1)
  • Sokol动画系统:如何在跨平台C/C++项目中实现流畅的2D与3D动画效果
  • 如何用ok-ww自动化工具彻底解放鸣潮游戏时间:终极保姆级指南
  • ArcGIS Pro/10.x导入JPG/PNG图片颜色失真?三步还原真实色彩(附RGB合成设置详解)
  • 终极指南:如何快速安装 Hollow Knight 模组管理器 Scrab
  • 如何快速掌握大规模移动应用开发:10个核心技巧与最佳实践
  • 如何用IBAnimatable与Swift Concurrency打造流畅异步动画:完整指南
  • 安卓逆向调试必备:5分钟搞定ro.debuggable修改的两种方法(含Magisk重置与模块安装)
  • Git容器化CI/CD终极指南:多阶段构建与缓存策略优化