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

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

相关文章

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模