关于动态排序、结构体的使用

题目:

一、项目需求:

  1. 创建一对文件Teacher.h  Teacher.m。1分
  2. 在Teacher.h中,定义一个Teacher结构体,成员变量包括:姓名、性别、年龄、员工编号、评分。2分
  3. 声明一个打印Teacher的函数,void  printTeacher(Teacher *  teacher)。1分 实现部分 4分
  4. 定义一个函数指针类型,typedef  BOOL(*CompareFunctionPointer)(Teacher teacher1, Teacher  teacher2);1分
  5. 声明一个实现老师数组排序的函数,void sortTeachers(Teacher  teacher[ ] ,int count, CompareFunctionPointer  cfp);1分 实现部分 4分
  6. 声明一个打印数组中所有老师的函数,void printTeachers(Teacher * teachers, int count);1分  实现部分4分
  7. 分别声明两个比较Teacher姓名的函数:BOOL compareNameByAscending(Teacher  teacher1 , Teacher  teacher2);(升序方式)、BOOL compareNameByDescending(Teacher  teacher1, Teacher  teacher2);(降序方式)。2分  实现部分 8分
  8. 分别声明两个比较Teacher员工编号的函数:BOOL compareNumberByAscending(Teacher  teacher1 , Teacher  teacher2);(升序方式)、BOOL compareNumberByDescending(Teacher  teacher1, Teacher  teacher2);(降序方式)2分  实现部分8分
  9. 分别声明两个比较Teacher员工评分的函数:BOOL compareScoreByAscending(Teacher  teacher1 , Teacher  teacher2);(升序方式)、BOOL compareScoreByDescending(Teacher  teacher1, Teacher  teacher2);(降序方式)2分 实现部分8分

10. 声明一个输出教师数组中全部男老师的函数,void printMaleTeacher(Teacher * teachers, int count);1分实现部分 4分

11. 声明一个输出教师数组中全部女老师的函数,void printFemaleTeacher(Teacher * teacher, int count);1分实现部分 4分

12. 声明一个枚举FunctionName,其中的每个枚举值于用户从控制台输入的功能数字一一对应。例如:当从控制台输入1时,此时实现按照姓名进行升序排列。2分  实现部分 8分(以上声明部分共17分  实现部分是52分)

13. 在Teacher.m中,实现上述的全部函数功能。

上述声明部分和实现部分一共是69分

15.  在main.m文件中要求:

(1)要求在控制台中,输出用户操作说明。如图:3分

(2)创建一个Teacher数组,数组中包含5个Teacher结构体类型的数据。(Teacher的姓名使用拼音,不使用汉字;性别使用‘m’表示男、‘f’表示女,评分使用float类             型。)7分

(3)根据控制台输入的数字,控制输出结果:

1)使用while循环实现重新输入功能。7分

2) 使用switch…case实现:根据控制台输入的1~8之间的数字,对Teacher数组进行不同排序并输出结果。case的数值使用1~8数字对应的枚举值。6分

3)输入数字1~6,对Teacher数组进行排序,使用sortTeachers 函数、比较函数实现排序,排序后使用printTeachers函数打印输出所有老师信息。4分

4)输入数字7~8,根据性别筛选老师,分别使用printMaleTeacher、printFemaleTeacher函数输出结果。2分

5)如果输入1~8以外的数字,则输出“对不起,您所输入的数字没有对应的函数,请重新输入!!!!”。2分

编程实现

main.m文件

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

{

Teacher teac1 = {"xiaomi",‘m‘,25,15,98.5};

Teacher teac2 = {"yunjie",‘f‘,18,11,97.5};

Teacher teac3 = {"huige",‘m‘,35,1,99};

Teacher teac4 = {"bobo",‘m‘,29,3,95.5};

Teacher teac5 = {"cuige",‘m‘,27,6,96.5};

Teacher teacArray[5] = {teac1,teac2,teac3,teac4,teac5};

//    Teacher *p = &teac1;     //验证函数pritTeacher

//    pritTeacher(p);

//    CompareFunctionPointer cfp;

//    cfp = CompareFunctionStudent;

//    printTeachers(teacArray,5);  //验证打印结构体数组的函数

enum FunctionName

{

compareNameByAscending = 1,

compareNameByDescending,

compareNumberByAscending,

compareNumberByDescending,

compareScoreByAscending,

compareScoreByDescending,

printMaleTeacher,

printFemaleTeacher

};

int putChoiceNumber = 0;

do{

printf("输入1:实现按照姓名进行升序排列\n输入2:实现按照姓名进行降序排列\n输入3:实现按照员工编号进行升序排列\n输入4:实现按照员工编号进行降序排列\n输入5:实现按照评分进行升序排列\n输入6:实现按照评分进行降序排列\n输入7:实现输出所有女老师\n输入8:实现输出所有的男老师\n==============================\n请输入实现功能对应的数字:");

scanf("%d",&putChoiceNumber);

//    cfp = compareNum(putChoiceNumber);

//    sortTeacher(teacArray,4 ,cfp);           //使用结构体实现

//    printTeachers(teacArray,4);              //使用结构体实现

findFunction(putChoiceNumber,teacArray);          //使用枚举实现

}while(putChoiceNumber<1||putChoiceNumber>8);

return 0;

}

function.h文件

typedef struct Teacher{

char name[30];

char sex;

int age;

int number;

float score;

}Teacher;

void pritTeacher(Teacher *teacher);   //打印个人信息

BOOL CompareFunctionStudent(Teacher teacher1,Teacher teacher2);

typedef BOOL(*CompareFunctionPointer)(Teacher teacher1,Teacher teacher2);

void sortTeacher(Teacher teacher[],int count ,CompareFunctionPointer cfp);  //按照评分给两个老师排序

void printTeachers(Teacher *teachers,int count);  //打印数组中所有老师的信息

BOOL compareNameByAscending(Teacher teacher1,Teacher teacher2);   //按姓名升序排序

BOOL compareNameByDescending(Teacher teacher1,Teacher teacher2);//按姓名降序排序

BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2);// 按照编号升序排序

BOOL compareNumberByDescending(Teacher teacher1,Teacher teacher2);// 按照编号降序排序

BOOL compareScoreByAscending(Teacher teacher1,Teacher teacher2);//按照得分升序排序

BOOL compareScoreByDescending(Teacher teacher1,Teacher teacher2);//按照得分降序排序

void printMaleTeacher(Teacher *teachers,int count);//输出全部男教师的函数

void printFemaleTeacher(Teacher *teachers,int count);//输出全部女教师的函数

typedef struct FunctionNameStruct{

int putNum;

CompareFunctionPointer choiceNum;

}FunctionNameStruct;

CompareFunctionPointer compareNum(int );

void findFunction(int ,Teacher *);

function.m文件

#import "Teacher.h"

void pritTeacher(Teacher *teacher)

{

printf("姓名:%s\t性别:%c\t年龄:%d\t员工编号:%d\t评分:%.2f\n",teacher->name,teacher->sex,teacher->age,teacher->number,teacher->score);

}

//排序函数

void sortTeacher(Teacher teacher[],int count ,CompareFunctionPointer cfp)

{

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

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

if (cfp(teacher[j],teacher[j+1])) {

Teacher temp = teacher[j+1];

teacher[j+1] = teacher[j];

teacher[j] = temp;

}

}

}

}

BOOL CompareFunctionStudent(Teacher teacher1,Teacher teacher2)

{

return teacher1.score>teacher2.score;

}

//打印数组

void printTeachers(Teacher *teachers,int count)

{

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

printf("姓名:%s\t性别:%c\t年龄:%d\t员工编号:%d\t评分:%.2f\n",teachers[i].name,teachers[i].sex,teachers[i].age,teachers[i].number,teachers[i].score);

}

}

//按姓名升序排序

BOOL compareNameByAscending(Teacher teacher1,Teacher teacher2)

{

return strcmp(teacher1.name, teacher2.name)>0;

}

//按姓名降序排序

BOOL compareNameByDescending(Teacher teacher1,Teacher teacher2)

{

return strcmp(teacher1.name, teacher2.name)<0;

}

// 按照编号升序排序

BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2)

{

return teacher1.number> teacher2.number;

}

// 按照编号降序排序

BOOL compareNumberByDescending(Teacher teacher1,Teacher teacher2)

{

return teacher1.number< teacher2.number;

}

//按照得分升序排序

BOOL compareScoreByAscending(Teacher teacher1,Teacher teacher2)

{

return teacher1.score> teacher2.score;

}

//按照得分降序排序

BOOL compareScoreByDescending(Teacher teacher1,Teacher teacher2)

{

return teacher1.score< teacher2.score;

}

//输出全部男教师的函数

void printMaleTeacher(Teacher *teachers,int count)

{

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

if (teachers[i].sex == ‘m‘) {

pritTeacher(teachers+i);

}

}

}

//输出全部女教师的函数

void printFemaleTeacher(Teacher *teachers,int count)

{

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

if (teachers[i].sex == ‘f‘) {

pritTeacher(teachers+i);

}

}

}

CompareFunctionPointer compareNum(int a)

{

FunctionNameStruct choiceNum1={1,compareNameByAscending};

FunctionNameStruct choiceNum2={2,compareNameByDescending};

FunctionNameStruct choiceNum3={3,compareNumberByAscending};

FunctionNameStruct choiceNum4={4,compareNumberByDescending};

FunctionNameStruct choiceNum5={5,compareScoreByAscending};

FunctionNameStruct choiceNum6={6,compareScoreByDescending};

FunctionNameStruct choiceNum[6] = {choiceNum1,choiceNum2,choiceNum3,choiceNum4,choiceNum5,choiceNum6};

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

if (choiceNum[i].putNum == a) {

return choiceNum[i].choiceNum;

}

}

return choiceNum[4].choiceNum;

}

void findFunction(int a,Teacher *teacArray)

{

switch (a) {

case 1:

//            cfp = compareNameByAscending;

sortTeacher(teacArray,5 ,compareNameByAscending);

printTeachers(teacArray,5);

break;

case 2:

//            cfp = compareNameByDescending;

sortTeacher(teacArray,5 ,compareNameByDescending);

printTeachers(teacArray,5);

break;

case 3:

//            cfp = compareNumberByAscending;

sortTeacher(teacArray,5 ,compareNumberByAscending);

printTeachers(teacArray,5);

break;

case 4:

//            cfp = compareNumberByDescending;

sortTeacher(teacArray,5 ,compareNumberByDescending);

printTeachers(teacArray,5);

break;

case 5:

//            cfp = compareScoreByAscending;

sortTeacher(teacArray,5 ,compareScoreByAscending);

printTeachers(teacArray,5);

break;

case 6:

//            cfp = compareScoreByDescending;

sortTeacher(teacArray,5 ,compareScoreByDescending);

printTeachers(teacArray,5);

break;

case 7:

printFemaleTeacher(teacArray,5);

break;

case 8:

printMaleTeacher(teacArray,5);

break;

default:

printf("对不起,您所输入的数字没有对应的函数,请重新输入!!!!\n");

break;

}

}

时间: 2024-10-13 19:08:25

关于动态排序、结构体的使用的相关文章

动态构造结构体数组

动态构造结构体数组 # include <stdio.h> # include <malloc.h> struct Student { int age; float score; char name[100]; }; int main(void) { int len; struct Student * pArr; int i, j; struct Student t; //动态的构造一维数组 printf("请输入学生的个数:\n"); printf("

HDU 1785 You Are All Excellent(斜率排序+结构体)

You Are All Excellent Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4651    Accepted Submission(s): 1558 Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出

HDU 1236 排名 (排序+结构体)

#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> using namespace std; struct stu { char test[25]; int numm; int right[10]; int total; }student[1001]; int cmp(stu a,stu b) { if(a.total != b.total) retu

go语言的排序、结构体排序

原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 search 也是.c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便: c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便.go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),

HDU 1084 [What Is Your Grade?] 结构体排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1084 题目大意:共5道题,N个学生.做出5道满分,0道50分.做出1-4道的同学,若在前50%(向下取整),则获得95.85.75.65,若在后50%则获得90.80.70.60. 关键思想:结构体排序 //结构体排序,考虑边界 #include <iostream> #include <algorithm> #include <cmath> #include <me

Demo_张仕传_结构体考试-modify

/* 题目: //声明一个结构体类型 struct _AdvTeacher { char *name; char *tile; int age; char *addr; char *p1; //系统预留成员域 char **p2;//系统预留成员域 }; 要求定义一个结构体数组(6个元素),要求从键盘输入数据,并按照名称大小进行排序:打印输出. 1. 打印结构体数组,需要单独封装成函数:10 2. 排序结构体数组,需要单独封装成函数(按照名称进行排序):50 3. main函数中编写业务测试模型

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

#import <Foundation/Foundation.h> //创建一个学生变量 typedef struct student{ char name[20];  //姓名 int  age;       //年龄 float  weight;  //体重 float  height;  //身高 float  score;   //分数 }Stu; //为什么使用动态排序,动态排序的好处:所有的排序函数if语句之后的比较条件不一样,其余的所有代码都是相同的,把相同的内容放在一个函数里,

结构体指针排序

输入不超过30名学生的信息,包括姓名,单科分数,出生年月,对其排序后输出. 运用知识点:结构体.指针.排序.函数. 1 #include<stdio.h> 2 #include<string.h> 3 4 struct birth 5 { 6 int y; 7 int m; 8 int d; 9 }; 10 struct student 11 { 12 int num; 13 char name[20]; 14 double score; 15 struct birth birth

【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std