涉及结构体的排序问题

news2025/1/17 14:06:15

简单举一个例子来介绍涉及结构体的排序问题。
例:输入若干学生姓名、语文成绩、数学成绩、英语成绩,根据三科成绩总分由高到低进行排序。
输入数据:

小明 78 89 90
小红 87 88 77
小华 91 92 96

输出样例:

小华 91 92 96 279
小明 78 89 90 257
小红 87 88 77 252

这个问题就需要用到结构体来存放各科成绩及其总分,然后根据总分进行排序。
输入学生的数量可以通过用户输入得到,然后根据用户输入的值动态分配内存空间,当然也可以不用这样,直接定义一个已知的结构体类型的数组。
本例的代码如下。

#include<stdio.h>
#include<stdlib.h>

typedef struct{
	char name[20];
	int score_1;
	int score_2;
	int score_3;
	int sum_score;
}Stu;

void input_info(Stu stu_stru[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("学生%d姓名:",i+1);
		scanf("%s", &stu_stru[i].name);
		printf("语文成绩:");
		scanf("%d", &stu_stru[i].score_1);
		printf("数学成绩:");
		scanf("%d", &stu_stru[i].score_2);
		printf("英语成绩:");
		scanf("%d", &stu_stru[i].score_3);
		stu_stru[i].sum_score = stu_stru[i].score_1 + stu_stru[i].score_2 + stu_stru[i].score_3;
	}
}

void print_info(Stu stu_stru[],int n)
{
	printf("姓名  语文  数学  英语  总分\n");
	for(int i=0;i<n;i++)
	{
		printf("%4s ",stu_stru[i].name);
		printf("%4d ",stu_stru[i].score_1);
		printf("%4d ",stu_stru[i].score_2);
		printf("%4d ",stu_stru[i].score_3);
		printf("%4d\n",stu_stru[i].sum_score);
	}
}

void sort_score(Stu stu_stru[],int n)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n-i-1;j++)
		{
			if(stu_stru[j].sum_score < stu_stru[j+1].sum_score)
			{
				Stu temp;
				temp = stu_stru[j];
				stu_stru[j] = stu_stru[j+1];
				stu_stru[j+1] = temp;
			}
		}
	}
}

void main()
{
	int n;
	Stu *stu_info;   //这里也可以直接定义为  Stu stu_info[50];
    printf("输入学生数量:");
    scanf("%d",&n);
    stu_info = (Stu *)malloc(n*sizeof(Stu));  //动态分配内存
    input_info(stu_info,n);
	printf("\n输入序列:\n");
	printf("----------------------------------\n");
    print_info(stu_info,n);
	sort_score(stu_info,n);
	printf("----------------------------------\n");
	printf("\n按总分排序后:\n");
	printf("----------------------------------\n");
	print_info(stu_info,n);
	printf("----------------------------------\n");
	free(stu_info);
}

上面的代码在函数中是以结构体数组直接访问各成员的,下面的代码通过指针来访问结构体中的各成员。

#include<stdio.h>
#include<stdlib.h>

typedef struct{
	char name[20];
	int score_1;
	int score_2;
	int score_3;
	int sum_score;
}Stu;

void input_info(Stu *p,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("学生%d姓名:",i+1);
		scanf("%s", &(p+i)->name);
		printf("语文成绩:");
		scanf("%d", &(p+i)->score_1);
		printf("数学成绩:");
		scanf("%d", &(p+i)->score_2);
		printf("英语成绩:");
		scanf("%d", &(p+i)->score_3);
		(p+i)->sum_score = (p+i)->score_1 + (p+i)->score_2 + (p+i)->score_3;
	}
}

void print_info(Stu *p,int n)
{
	printf("姓名  语文  数学  英语  总分\n");
	for(int i=0;i<n;i++)
	{
		printf("%4s ",(p+i)->name);
		printf("%4d ",(p+i)->score_1);
		printf("%4d ",(p+i)->score_2);
		printf("%4d ",(p+i)->score_3);
		printf("%4d\n",(p+i)->sum_score);
	}
}

void sort_score(Stu *p,int n)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n-i-1;j++)
		{
			if((p+j)->sum_score < (p+j+1)->sum_score)
			{
				Stu temp;
				temp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp;
			}
		}
	}
}

void main()
{
	int n;
	Stu *stu_info;
    printf("输入学生数量:");
    scanf("%d",&n);
    stu_info = (Stu *)malloc(n*sizeof(Stu)); 
    input_info(stu_info,n);
	printf("\n输入序列:\n");
	printf("----------------------------------\n");
    print_info(stu_info,n);
	sort_score(stu_info,n);
	printf("----------------------------------\n");
	printf("\n按总分排序后:\n");
	printf("----------------------------------\n");
	print_info(stu_info,n);
	printf("----------------------------------\n");
	free(stu_info);
}

程序运行后输入及输出结果如下图所示。
在这里插入图片描述
上面的输出结果是根据总分由高到低排列的,符合题目要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通义千问本地化部署不调用GPU只调用CPU的检查方法

今天部署本地版通义千问的时候遇到一个问题。 启动他的cli_demo.py调用的一直都是CPU模式的。 检查cuda已经正确安装&#xff0c;后面发现是torch即PyTorch的安装问题。 我安装torch的时候&#xff0c;用的是默认指令&#xff0c;没有增加别的参数。 检测一下&#xff0c;输出…

正中优配:创业板指大涨3.47%!减速器等概念板块掀涨停潮!

周二&#xff08;8月29日)&#xff0c;三大股指团体涨超1%。截至上午收盘&#xff0c;上证指数涨1.39%&#xff0c;报3141.82点&#xff1b;深证成指和创业板指别离涨2.41%和3.47%&#xff1b;沪深两市算计成交额6264.51亿元&#xff0c;总体来看&#xff0c;两市个股涨多跌少&…

教会你怎么玩转 文件下载

&#x1f600;前言 教会你怎么玩转 文件下载 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f609; 在csdn获奖荣誉: …

使用apifox前置数据base64编码并添加一个字段

具体前置脚本如下&#xff1a; // pm.request.body.update 处理 body 参数里的变量 let bodyStr pm.request.body.raw; // base64 编码数据 let bodyEncode btoa(bodyStr); console.log(bodyEncode) let newBody {"data": bodyEncode,"sendTime": &qu…

MySQL8.xx 解决1251 client does not support ..解决方案

MySQL8.0.30一主两从复制与配置(一)_蜗牛杨哥的博客-CSDN博客 MySQL8.xx一主两从复制安装与配置 MySQL8.XX随未生成随机密码解决方案 一、客户端连接mysql&#xff0c;问题&#xff1a;1251 client does not support ... 二、解决 1.查看用户信息 备注&#xff1a;host为 % …

智慧水产养殖方案,守护养殖水产品安全!

水产品在人们的饮食文化中占据着举足轻重的地位&#xff0c;更是人们摄入蛋白质的重要来源。因此&#xff0c;保障食品安全&#xff0c;提升养殖水产品的品质至关重要然。而传统的人工观察水产养殖方式较为单一&#xff0c;难以及时发现水质问题和投喂情况&#xff0c;容易导致…

Springboot2.0快速入门(第一章)

目录 一&#xff0c;SpringBoot简介1.1&#xff0c;回顾什么是Spring1.2&#xff0c;Spring是如何简化Java开发的1.3&#xff0c;什么是SpringBoot 二&#xff0c;Hello&#xff0c;World2.1&#xff0c;准备工作2.2&#xff0c;创建基础项目说明2.3&#xff0c;创建第一个Hell…

计算机网咯——性能指标

常见性能指标 1.速率 2.带宽 3.吞吐量 4.时延 [外链图片转存失败,源站可 5.时延带宽积 6.往返时间 7.利用率 8.丢包率

win10安装Docker Desktop,并修改存储目录

安装之前先看看自己电脑c盘剩余容量&#xff0c;如果小于30G&#xff0c;建议先配置下再安装 因为docker 安装时不提供指定安装路径和数据存储路径的选项&#xff0c;且默认是安装在C盘的。C盘比较小的&#xff0c;等docker运行久了&#xff0c;一大堆的东西放在上面容易导致磁…

Mysql B+树索引

一、联合索引 内节点中存储的是 目录项 记录 &#xff0c;叶子节点中存储的是 用户记录 &#xff08;由于不是聚簇索引&#xff0c;所以用户记录是不完整的&#xff0c;缺少 country 列的 值&#xff09;。这个 idx_name_birthday_phone_number 索引对应的 B 树中页面和记录的排…

Apifox下载安装步骤

我们先访问网址 https://apifox.com/?utm_sourcebaidu&utm_mediumsem&utm_campaign251430236&utm_content7810722111&utm_termapifox%E6%9F%A5%E7%9C%8B%E7%89%88%E6%9C%AC&bd_vid8323327349775096324 然后 这里这个免费下载已经写的这么明显了 那就直接点…

UVM知识点3

Vim 中如何去掉 ^M 字符&#xff1f; 基于 DOS/Windows 的文本文件在每一行末尾有一个 CR&#xff08;回车&#xff09;和 LF&#xff08;换行&#xff09;&#xff0c;而 UNIX 文本只有一个换行,即win每行结尾为\r\n&#xff0c;而linux只有一个\n如果win下的文档上传到linux…

时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比

时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比。 1.Matlab实现PSO-BiLSTM和BiLSTM…

无涯教程-Android - Activity

Activity代表具有用户界面的单个屏幕&#xff0c;就像Java的窗口或框架一样。Android Activity 是ContextThemeWrapper类的子类。 如果您使用过C&#xff0c;C或Java编程语言&#xff0c;那么您一定已经看到您的程序从 main()函数开始。与之非常相似&#xff0c;Android系统以 …

五、多表查询-4.3子查询-列子查询

一、概述 子查询返回的结果是一列&#xff08;可以是多行&#xff09;&#xff0c;这种子查询称为列子查询。 常用的操作符&#xff1a;in、not in、any、some、all 二、演示 【例1】查询“销售部”和“市场部”的所有员工信息 1、查询销售部和市场部的部门ID 返回的结果是…

highcharts 修改 箱线图每个箱子的颜色

在js中添加以下代码 plotOptions: {series: {colorByPoint: true},boxplot: {fillColor:null,colorBorPoint:true,colors: [red,#000000]),}}, 综合网上多方材料&#xff0c;得出

Linux之超强16进制命令:xxd(三十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于ssm+vue汽车售票网站源码和论文

基于ssmvue汽车售票网站源码和论文088 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让…

英文科技论文写作与发表-论文结构(第1章)

第1章 论文结构 不同科技领域论文的组织结构不尽相同。 各专业领域专家公认的一个要点是&#xff1a;论文的前一页半到两页最为重要&#xff0c;决定了读者是否愿意继续读下去&#xff0c;也是审稿人得出初步结论的依据。 着手之前&#xff0c;先组织论文结构&#xff0c;把…

基于web的仓库管理系统jsp商品进销存java源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的仓库管理系统 系统有2权限&#xff1a;管理…