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

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

相关文章

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines