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

学生成绩统计系统

实验内容

问题描述:

输入n个学生的考试成绩,每个学生信息由姓名与分数组成;试设计一种算法:

(1)按分数高低次序,打印出每个学生的名次,分数相同的为同一名次;

(2)按名次输出每个学生的姓名与分数。

基本要求:

(1)学生的考试成绩必须通过键盘输入数据而建立。

(2)测试数据由同学们根据实际情况指定。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 学生结构体,包含姓名和成绩
typedef struct {char name[50];int score;
} Student;// 打印学生成绩和名次
void printStudentRanks(Student arr[], int length) {int rank = 1;  // 初始名次for (int i = 0; i < length; i++) {// 对于成绩相同的学生,分配相同的名次if (i > 0 && arr[i].score != arr[i-1].score) {rank = i + 1;  // 如果成绩不同,更新名次//i 是从 0 开始的,而名次是从 1 开始的,所以需要加 1}printf("Rank %d: %s - %d\n", rank, arr[i].name, arr[i].score);}
}// 合并函数:将两个有序的子数组合并成一个有序数组
void merge(Student arr[], Student tempArr[], int left, int mid, int right) {int l_pos = left;    // 左半区起始位置int r_pos = mid + 1; // 右半区起始位置int pos = left;      // 临时数组的起始位置// 合并两个子数组while (l_pos <= mid && r_pos <= right) {if (arr[l_pos].score > arr[r_pos].score) { // 左半区第一个剩余元素更小tempArr[pos++] = arr[l_pos++];} else { // 右半区第一个剩余元素更小tempArr[pos++] = arr[r_pos++];}}// 将左半区剩余的元素添加到临时数组while (l_pos <= mid) {tempArr[pos++] = arr[l_pos++];}// 将右半区剩余的元素添加到临时数组while (r_pos <= right) {tempArr[pos++] = arr[r_pos++];}// 将排序后的临时数组复制回原数组for (int i = left; i <= right; i++) {arr[i] = tempArr[i];}
}// 递归分治排序函数
void msort(Student arr[], Student tempArr[], int left, int right) {if (left < right) {int mid = (left + right) / 2;msort(arr, tempArr, left, mid);         // 递归排序左半部分msort(arr, tempArr, mid + 1, right);    // 递归排序右半部分merge(arr, tempArr, left, mid, right);  // 合并排序结果}
}// 归并排序的入口函数
void mergeSort(Student arr[], int length) {Student* tempArr = (Student*)malloc(length * sizeof(Student));if (tempArr) {msort(arr, tempArr, 0, length - 1);free(tempArr);  // 释放临时数组} else {printf("Memory allocation failed.\n");}
}int main() {int n;// 输入学生数量printf("Enter the number of students: ");scanf("%d", &n);// 动态分配学生数组Student* students = (Student*)malloc(n * sizeof(Student));if (students == NULL) {printf("Memory allocation failed.\n");return -1;}// 输入学生姓名和成绩for (int i = 0; i < n; i++) {printf("Enter the name and score of student %d: ", i + 1);scanf("%s %d", students[i].name, &students[i].score);}// 排序学生数组mergeSort(students, n);// 输出排序结果和学生名次printf("\nSorted students by score:\n");printStudentRanks(students, n);// 释放动态分配的内存free(students);return 0;
}

 

1.学生名次的分配:

rank 应该从 1 开始,而不是从 0 开始。

2.输入格式:

程序中使用 scanf 函数读取学生姓名和成绩时,scanf("%s %d", students[i].name, &students[i].score) 假设输入的姓名不含空格。如果学生的姓名中包含空格,则需要修改输入处理方式(例如使用 fgets 来读取包含空格的姓名)。

使用 fgets 来读取学生姓名(scanf 读取到第一个空格时会停止),例如:

fgets(students[i].name, sizeof(students[i].name), stdin);

3.内存分配失败:

动态分配内存时,应检查返回的指针是否为NULL,确保内存分配成功。

4.数组越界:

在使用数组时,特别是循环和数组索引操作时,要注意避免数组越界。

在 merge 函数中,注意确保 l_pos 和 r_pos 不会超出左右子数组的边界,否则会发生数组越界访问。

归并过程中,保证 tempArr 的长度与原数组相等,避免因数组越界而引发未定义的行为。

5.名次处理:

在打印名次时,要正确处理成绩相同的情况,确保相同成绩的学生获得相同的名次。

6.临时数组大小:

确保临时数组的大小与待排序数组的大小相同,以避免复制数据时越界。

相关文章:

学生成绩统计系统

实验内容 问题描述: 输入n个学生的考试成绩&#xff0c;每个学生信息由姓名与分数组成;试设计一种算法: (1)按分数高低次序&#xff0c;打印出每个学生的名次&#xff0c;分数相同的为同一名次; (2)按名次输出每个学生的姓名与分数。 基本要求: (1)学生的考试成绩必须通过…...

【Spring项目】图书管理系统

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;项目实现准备 1&#xff1a;需求 &#xff08;1&#xff09;登录 2&#xff1a;准备…...

Vivado ILA数据导出MATLAB分析

目录 ILA数据导出 分析方式一 分析方式二 有时候在系统调试时&#xff0c;数据在VIVADO窗口获取的信息有限&#xff0c;可结合MATLAB对已捕获的数据进行分析处理 ILA数据导出 选择信号&#xff0c;单击右键后&#xff0c;会有export ILA DATA选项&#xff0c;将其保存成CS…...

【开源免费】基于SpringBoot+Vue.JS高校学科竞赛平台(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 075 &#xff0c;文末自助获取源码 \color{red}{T075&#xff0c;文末自助获取源码} T075&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

【机器学习】——windows下安装anaconda并在vscode上进行配置

一、安装anaconda 1.进入清华的镜像网站&#xff0c;下载自己电脑对应的anaconda版本。网站&#xff1a;https://repo.anaconda.com/archive/ 这里我下载的版本是anaconda3-2024.10-1-Windows-x86-64 2.下载完毕后开始安装anaconda 3.配置anaconda环境变量 在设置中找到编…...

【H2O2|全栈】Node.js与MySQL连接

目录 前言 开篇语 准备工作 初始配置 创建连接池 操作数据库 封装方法 结束语 前言 开篇语 本节讲解如何使用Node.js实现与MySQL数据库的连接&#xff0c;并将该过程进行函数封装。 与基础部分的语法相比&#xff0c;ES6的语法进行了一些更加严谨的约束和优化&#…...

汽配行业数字化解决方案(一)

汽配行业数字化解决方案&#xff0c;是通过整合云计算、大数据、人工智能、物联网等先进技术&#xff0c;构建一个全面、高效、智能的数字化生态系统&#xff0c;以实现汽配供应链的全程可视化与智能化管理。该解决方案涵盖了从供应商管理、库存优化、订单处理、物流跟踪到客户…...

前端路径“@/“的使用和配置

环境&#xff1a;vitets 需要安装types/node npm install types/node --save-dev在tsconfig.json中添加 如果有tsconfig.app.json和tsconfig.node.json文件&#xff0c;则在app.json中添加 "compilerOptions": {"baseUrl":".","paths&q…...

动态规划子序列问题系列一>最长递增子序列

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int lengthOfLIS(int[] nums) {int n nums.length;int[] dp new int[n];int ret 1;//最坏情况为1//初始化for(int i 0; i < n; i) dp[i] 1;for(int i 1; i < n; i){for(int j 0; j < i-1; j)if(…...

链表头文件大更新!!!

引言 原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。 此次更新添加了更多功能&#xff0c;让改头文件更 人性化 。 安装教程见原文章。 介绍 linked_list.h 头文件 linked_list.h 是一个 C 头文件&#xff0c;定义了一个模板类 LinkedList&#xff…...

力扣3381.长度可被K整除的子数组的最大元素和

力扣3381.长度可被K整除的子数组的最大元素和 题目 题目解析及思路 题目要求返回一段长度为K的倍数的最大子数组和 同余前缀和 代码 class Solution { public:long long maxSubarraySum(vector<int>& nums, int k) {int n nums.size();vector<long long>…...

http.ServeMux多路复用器的设置

package mainimport ("fmt""net/http" )func first(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "多函数-first") }func second(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "多函数-second") }func ma…...

优化器与优化方法:在现代科学与工程中的应用

目录 ​编辑 优化器&#xff1a;机器学习中的参数调整 1. 梯度下降系列 2. 动量法&#xff08;Momentum&#xff09; 3. Adagrad 4. RMSprop 5. Adam 优化方法&#xff1a;寻找系统最优解 线性规划 非线性规划 凸优化 非凸优化 结论 在当今的科学和工程领域&#…...

笔记本外接显示屏没声音

1、笔记本正常有声音&#xff0c;但是外接显示屏后没有声音了怎么回事呢&#xff1f;原来外接显示屏后笔记本的声音输出会自动选择显示屏的音频输出&#xff0c;但是显示屏可能没有声音输出所以导致笔记本没有声音。 2、解决办法&#xff1a;打开笔记本设置&#xff0c;选择声…...

vue框架

Vue.js是一种用于构建用户界面的JavaScript框架。它是一个轻量级框架&#xff0c;被设计为逐渐采用的渐进式框架&#xff0c;可以与现有项目集成&#xff0c;也可以作为一个完整的单页应用程序框架使用。 Vue.js具有以下特点&#xff1a; 简单易学&#xff1a;Vue.js的API简单…...

Vue指令(一)--v-html、v-show、v-if、v-else、v-else-if、v-on、v-bind、v-for、v-model

目录 &#xff08;一&#xff09;初识指令和内容渲染指令v-html 1.v-html 案例&#xff1a; 官网的API文档 &#xff08;二&#xff09;条件渲染指令v-show和v-if 1. v-show 2. v-if &#xff08;三&#xff09;条件渲染指令v-else和v-else-if 案例 &#xff08;四…...

ElK 8 收集 MySQL 慢查询日志并通过 ElastAlert2 告警至飞书

文章目录 1. 说明2. 启个 mysql3. 设置慢查询4. filebeat 设置5. 触发慢查询6. MySQL 告警至飞书 1. 说明 elk 版本&#xff1a;8.15.0 2. 启个 mysql docker-compose.yml 中 mysql&#xff1a; mysql:# restart: alwaysimage: mysql:8.0.27# ports:# - "3306:3306&q…...

QT通过在线安装器安装【详细】

在线安装器地址&#xff1a; 官方在线安装器&#xff1a;Index of /official_releases/online_installers (qt.io) 通过命令行启动安装页面 直接双击qt安装程序&#xff0c;在线安装会非常慢&#xff0c;甚至安装失败&#xff0c;所以通过命令行页面启动安装页面。点击wind…...

34.1 uber开源的m3db简介

本节重点介绍 : m3db自己的定位m3db自己的架构m3db自己的组件 两句话简介 M3最初是在优步开发的&#xff0c;目的是提供对优步业务运营&#xff0c;微服务和基础架构的可视性由于M3具有轻松进行水平扩展的能力&#xff0c;因此它为所有监视用例提供了一个集中式存储解决方案…...

MATLAB 最小二乘点云拟合球 (89)

MATLAB 最小二乘点云拟合球 (89) 一、算法介绍二、算法实现1.代码2.结果这是缘,亦是最美的相见 一、算法介绍 球面拟合算法是一种通过数学方法将一组三维点(通常在三维空间中分布)拟合到一个理想的球形表面上。这个过程通常涉及使用最小二乘法来最小化实际数据点与拟合的…...

线程与进程的区别与联系:操作系统入门详解(含 Python 示例)

、先搞懂&#xff1a;进程与线程到底是什么&#xff1f;&#xff08;通俗类比官方定义&#xff09; 1.1 生活化类比&#xff1a;快速建立认知 如果把计算机的操作系统比作一个大型工厂&#xff1a; 进程&#xff1a;就是工厂里的一个个独立车间。每个车间有自己专属的生产资…...

Cadence启动文件背后的设计哲学:为什么.cdsinit总覆盖不了.cdsenv的设置?

Cadence启动文件背后的设计哲学&#xff1a;为什么.cdsinit总覆盖不了.cdsenv的设置&#xff1f; 当你在Cadence Virtuoso中反复调整波形显示参数&#xff0c;却发现每次重启后设置都被重置时&#xff0c;背后隐藏的是一套精妙的EDA工具配置体系。这个看似简单的"设置失效…...

小白也能玩转DeepSeek-R1:Ollama一键部署推理模型实战

小白也能玩转DeepSeek-R1&#xff1a;Ollama一键部署推理模型实战 还在为复杂的AI模型部署而烦恼吗&#xff1f;DeepSeek-R1-Distill-Llama-8B作为一款强大的文本生成模型&#xff0c;现在通过Ollama平台可以轻松实现一键部署。本文将带你从零开始&#xff0c;只需3个简单步骤…...

CST中利用SPICE语言自定义复杂lumped element电路的实战指南

1. 突破CST自带元件的限制&#xff1a;为什么需要SPICE语言 刚开始用CST做电路仿真时&#xff0c;我也觉得自带的RLC元件够用了——直到遇到一个带滤波功能的耦合器项目。当时需要模拟一个包含寄生参数的复杂匹配网络&#xff0c;自带的并联RLC元件死活调不出理想的频响曲线。这…...

Obsidian插件终极汉化指南:obsidian-i18n让英文插件秒变中文界面

Obsidian插件终极汉化指南&#xff1a;obsidian-i18n让英文插件秒变中文界面 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 你是否因为Obsidian插件的英文界面而头疼&#xff1f;面对"Backlink"、"Graph …...

三相永磁同步电机FOC控制实战:从霍尔传感器配置到SVPWM调参避坑指南

三相永磁同步电机FOC控制实战&#xff1a;从霍尔传感器配置到SVPWM调参避坑指南 当你在深夜的实验室里盯着示波器上跳动的波形&#xff0c;试图让一台三相永磁同步电机平稳启动时&#xff0c;是否经历过这样的场景&#xff1a;明明按照手册配置了所有参数&#xff0c;电机却像喝…...

探索Ryujinx:Nintendo Switch模拟器全解析

探索Ryujinx&#xff1a;Nintendo Switch模拟器全解析 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 在游戏技术不断发展的今天&#xff0c;模拟器技术为玩家提供了跨平台体验游戏的可…...

多模态融合避坑手册:为什么你的跨模态模型总掉进‘语义鸿沟’?

多模态融合避坑手册&#xff1a;为什么你的跨模态模型总掉进‘语义鸿沟’&#xff1f; 当你兴奋地将精心设计的跨模态模型投入训练&#xff0c;却发现验证集指标像过山车一样剧烈波动时&#xff0c;问题往往出在那些容易被忽视的工程细节里。上周有位工程师向我展示了他的视频…...

破局 AIGC 检测重围:PaperXie 如何让论文从 “机器量产“ 回归 “学术原创“——3000 字深度解构双效降重新范式

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/weight?type1https://www.paperxie.cn/weight?type1 引言&#xff1a;当学术写作撞上 AIGC 检测&#xff0c;毕业与投稿的双重困局凌晨两点的图书馆&#xff0c;屏幕上刺眼…...

CVAT:让计算机视觉标注效率提升80%的开源数据引擎

CVAT&#xff1a;让计算机视觉标注效率提升80%的开源数据引擎 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/…...