利用动态排序,对学生结构体的各类信息进行排序

#import <Foundation/Foundation.h>

//创建一个学生变量

typedef struct student{

char name[20];  //姓名

int  age;       //年龄

float  weight;  //体重

float  height;  //身高

float  score;   //分数

}Stu;

//为什么使用动态排序,动态排序的好处:所有的排序函数if语句之后的比较条件不一样,其余的所有代码都是相同的,把相同的内容放在一个函数里,只写一遍即可,把if语句后面不同条件写个一个个的条件函数 以供回调即可,

BOOL sortStudentByAge(Stu stu1,Stu stu2);

BOOL sortStudentByAge(Stu stu1,Stu stu2){

return stu1.age > stu2.age;

}

//根据体重判定

BOOL sortStudentByWeight(Stu stu1,Stu stu2);

BOOL sortStudentByWeight(Stu stu1,Stu stu2){

return stu1.weight > stu2.weight;

}

//根据身高判定

BOOL sortStudentByHeight(Stu stu1,Stu stu2);

BOOL sortStudentByHeight(Stu stu1,Stu stu2){

return stu1.height > stu2.height;

}

//根据分数判定

BOOL sortStudentByScore(Stu stu1,Stu stu2);

BOOL sortStudentByScore(Stu stu1,Stu stu2){

return stu1.score > stu2.score;

}

typedef BOOL(*SORT)(Stu,Stu);//重定义

void sortStudent(Stu *p,int count,SORT p2){

for (int i = 0; i < count - 1; i++) {

for (int j = 0; j < count - 1 - i; j++) {

//函数指针调用相应的函数

if (p2(*(p + j),*(p + j + 1))) {

Stu temp = *(p + j);

*(p + j) = *(p + j + 1);

*(p + j + 1) = temp;

}

}

}

}

//输出排序后学生的顺序

void printAllSortStudent(Stu *p,int count){

for (int i = 0; i < count; i++) {

printf("姓名:%s 年龄:%d 体重:%.2f 身高:%.2f 分数:%.2f \n",(p + i) -> name,(p + i) -> age,(p + i) -> weight,(p + i) -> height,(p + i) -> score);

}

}

int main(int argc, const char * argv[]) {

Stu stus[5] ={

{"HaiFeng",21,130,175,89},

{"ShiYang",12,190,155,18},

{"YaNan " , 38,90,200,60},

{"JangTao",49,49,188,99},

{"XiaoLong",5,30,160,100}

};

sortStudent(stus, 5, sortStudentByHeight);

printf("按照身高排序好的学生的顺序:\n");

printAllSortStudent(stus, 5);

sortStudent(stus, 5, sortStudentByWeight);

printf("按照体重排序好的学生的顺序:\n");

printAllSortStudent(stus, 5);

sortStudent(stus, 5, sortStudentByAge);

printf("按照年龄排序好的学生的顺序:\n");

printAllSortStudent(stus, 5);

sortStudent(stus, 5, sortStudentByScore);

printf("按照分数排序好的学生的顺序:\n");

printAllSortStudent(stus, 5);

return 0;

}

时间: 2024-10-14 18:19:52

利用动态排序,对学生结构体的各类信息进行排序的相关文章

C语言-对一个结构体中的字段进行排序

这是帮别人做的一个题目,好久没有接触过C语言了.有点发怵,只是似乎找回点当时学C语言,做课程设计的感觉. 题目:定义一个数组(学生结构体数组),里面包括学号.姓名.身份证和三科学生成绩.要求写一个函数,依据学生不论什么一个字段(如学号.姓名.身份证),进行排序. 源代码: //// stu.cpp : Defines the entry point for the console application. //// // #include "stdafx.h" //----------

C#调用C/C++动态库 封送结构体,结构体数组

因为公司一直都是做C++开发的,因客户需要要提供C#版本接口,研究了一下C#,发现其强大简洁, 在跨语言调用方面封装的很彻底,提供了强大的API与之交互.这点比JNA方便多了. Java与C#都只能调用C格式导出动态库,因为C数据类型比较单一,容易映射. 两者都是在本地端提供一套与之映射的C#/java描述接口,通过底层处理这种映射关系达到调用的目的. 一. 结构体的传递 Cpp代码   #define JNAAPI extern "C" __declspec(dllexport) /

程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据。

程序通过定义学生结构体变量,存储学生的学号.姓名和3门课的成绩.函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据.例如,若b所指变量t中的学号.姓名和三门课的成绩一次是:10002."ZhangQi".93.85.87,修改后输出t中的数据应为:10004."Lijie".93.85.87. #include <stdio.h>#include <string.h>struct student { lo

C#调用C/C++动态库 封送结构体,结构体数组

因为实验室图像处理的算法都是在OpenCV下写的,还有就是导航的算法也是用C++写的,然后界面部分要求在C#下写,所以不管是Socket通信,还是调用OpenCV的DLL模块,都设计到了C#和C++数据类型的对应,还有结构体的封装使用.在夸语言调用方面,Java和C#都只能调用C格式导出的动态库,因为C数据类型比较单一,容易映射,两者都是在本地端提供一套与之映射的C#或者Java的描述接口,通过底层处理这种映射关系达到调用的目的. 5月19日学习内容: http://www.cnblogs.co

C语言:SWUST OJ,程序设计C 实验六 结构体 题目三 学生结构体链表(0068)

Description: 用结构体建立学生信息,学生信息包括学号.姓名.成绩,建立一个有 n 名学生的链表, 并将链表输出. Input: 一次输入学生信息包括学号.姓名.0 0 0结束程序. Sample Input: C1001 Li 70 M1002 He 89 E1003 Xie 83 M1004 Wu 92 E1005 Bao 80 Sample Output: C1001 Li 70 M1002 He 89 E1003 Xie 83 M1004 Wu 92 E1005 Bao 80

C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合

#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{//定义Data数据项 std::string name; long num; }Data; struct Link{//定义结构体 Data data[ml+1]; int length; }L; void initLink(Link *p){//初始化,即便有数据可以覆盖写入增加效率 p->length

用结构体练习 考生信息录入

机试题目:1.输入3个学生的信息:学号,姓名,五门课成绩(语文,数学,英语,化学,物理),要求输出学生成绩的最高分最低分总分和平均分,若有不及格的成绩,输出其科目及成绩. 2.编写程序实现某大奖赛现场打分.共有10位评委打分,最高分为100分,去掉一个最高分和一个最低分后的平均分是最终得分.请用户输入评委姓名和该评委给出的分数,然后提示哪个评委的分数最高,最高分是多少:哪个评委的分数最低,最低分是多少:最后去掉最高分和最低分计算最终平均得分.3.按如下要求编程: 一.语言和环境A.实现技术:C#

杭电 1862 EXCEL排序(sort+结构体)

Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号.以下有 N 行,每行包含一条学生纪录.每条学生纪录由学号(6位数字,同组测试中没有重复的学号).姓名(不超过8位且不包含空格的字符串).成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开.当读到 N=0 时,全部输入结束,相应的结果不

【基础练习】结构体定义比较函数双关键字排序

题目好长显得很高大上的样子其实一点也不是这样= = 再次感谢里奥同学的友情支持,没有他我现在还在一片云里雾里. 之前看ruka上一直说:可以自定义排序,但必须自定义小于号或者是比较函数,一直苦于如何实践,今天请教了里奥同学,终于拨云见日. 这样的题有很多类似的,像是codevs 3991排序(例题代码即为此题,但我会告诉你我是用后面那个题代码改的么···)  洛谷P1104 生日 都是很简单的多关键字排序 二话不说,上代码 //operator < and sort #include<cstd