对结构体进行排序,根据结构体中某一数据进行排序后对其对应的整个结构体变量进行排序

2024-02-15 10:38

本文主要是介绍对结构体进行排序,根据结构体中某一数据进行排序后对其对应的整个结构体变量进行排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 2
struct ST{char name[10];int num;int age;char addr[5];int s[3];float ave;}stu[M],temp;void save()
{
//借助一个中间变量进行实现int i,j,k;FILE *fp;
//对文件操作,写入if((fp=fopen("t.dat","wb"))==NULL){printf("error");exit(0);}//只输出第1,3,5,7,9个学生的信息
/*for(i=0;i<M;i+=2)
{
//	fseek(fp,i*sizeof(struct s),0);//移动文件标志fread(&stu[i],sizeof(struct s),1,fp);printf("%-10s %4d %4d %-15s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
}fclose(fp);*///实现按学生的平均分的高低进行排序,这里用选择排序来实现吧
for(i=0;i<M-1;i++)
{k=i;for(j=i+1;j<M;j++)if(stu[j].ave>stu[k].ave)k=j;//注意这块进行交换的是结构体数组,不是单个比较的数据项temp=stu[i];stu[i]=stu[k];stu[k]=temp;
}
//排序好的写入磁盘for(i=0;i<M;i++){if((fwrite(&stu[i],sizeof(struct ST),1,fp))!=1)printf("file write error");}//改写对文件的操作形式,读
if((fp=fopen("t.dat","rb"))==NULL)
{printf("error");exit(0);
}
printf("输出排序好的顺序:\n");
for(i=0;i<M;i++)
{fread(&stu[i],sizeof(struct ST),1,fp);printf("%-10s %4d %4d %-15s %4f\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr,stu[i].ave);
}fclose(fp);
}//主函数int main()
{//FILE *fp;
int i,k=0,j;
float sum=0;
printf("输入学生的数据:\n");
for(i=0;i<M;i++)
{  printf("请输入第%d学生的学号和姓名(分别用空格隔开)\n",i+1);scanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);sum=0;for(j=0;j<3;j++){printf("请输入第%d学生的第%d门课程成绩(分别用空格隔开)\n",i+1,j+1);scanf("%d",&stu[i].s[j]);sum+=stu[i].s[j];}
//计算的是每个学生的平均成绩//要求读写到磁盘中,可以在结构体中定义一个ave属性,然后用fwrite一块写入磁盘。stu[i].ave=sum/3;
}save();return 0;
}

 

作几点说明:对结构体中的某一数据进行排序,然后其他的数据跟着变化,其实就是让你对让当前这个结构体进行排序。

所以其中的temp定义成ST.

若有不足,请指正!

这篇关于对结构体进行排序,根据结构体中某一数据进行排序后对其对应的整个结构体变量进行排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/711164

相关文章

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c