函数 指针 结构体的综合应用
2015-06-26 20:19
302 查看
函数 指针 结构体的综合应用
接下来我将以一道题目来总结我这一个星期学习的内容›
刚拿到题目时心里慌兮兮的,这么恐怖….100分钟15题,而且要有6种排序,8个输出
还能不能好好玩耍了. T.T
看过一次题目后 我好像明白点啥了
多看几次题目后,发现其实老师已经把解题思路&命名问题都给解决了(特别是命名问题),只要按着题目上的顺序写,思路就很清晰了
废话不说了:代码献上:
#import <Foundation/Foundation.h> #import "Teacher.h" int main(int argc, const char * argv[]) { Teacher teacher[5] = { {"aaaaa", 'f', 18, 1, 60.0}, {"bbbb", 'm', 28, 2, 62.0}, {"cssas", 'm', 55, 3, 88.0}, {"z",'f', 24, 4, 45.0}, {"ooooo", 'm', 65, 66, 89.0} }; enum FunctionName { CompareNameByAscending = 1, CompareNameByDescending, CompareNumberByAscending, CompareNumberByDescending, CompareScoreByAscending, CompareScoreByDescending, PrintMaleTeacher, PrintFemaleTeacher, }; enum FunctionName a0 = 10; printf("输入1:实现按照姓名进行升序排列\n"); printf("输入2:实现按照姓名进行降序排列\n"); printf("输入3:实现按照员工编号进行升序排列\n"); printf("输入4:实现按照员工编号进行降序排列\n"); printf("输入5:实现按照评分进行升序排列\n"); printf("输入6:实现按照评分进行降序排列\n"); printf("输入7:实现输出所有女老师\n"); printf("输入8:实现输出所有男老师\n"); printf("==============================\n"); while (a0 > 8 ) { printf("请输入实现功能对应的数字:"); scanf("%d",&a0); switch (a0) { case CompareNameByAscending: sortTeachers(teacher, 5, compareNameByAscending); break; case CompareNameByDescending: sortTeachers(teacher, 5, compareNameByDescending); break; case CompareNumberByAscending: sortTeachers(teacher, 5, compareNumberByAscending); break; case CompareNumberByDescending: sortTeachers(teacher, 5, compareNumberByDescending); break; case CompareScoreByAscending: sortTeachers(teacher, 5, compareScoreByAscending); break; case CompareScoreByDescending: sortTeachers(teacher, 5, compareScoreByDescending); break; case PrintFemaleTeacher: printFemaleTeacher(teacher, 5); break; case PrintMaleTeacher: printMaleTeacher(teacher, 5); break; default: printf("对不起,您所输入的数字没有对应的函数,请重新输入!!!!\n"); continue; } } return 0; }
#import <Foundation/Foundation.h> typedef struct teacher { char name[20]; char gender; int age; int num; float score; }Teacher; typedef BOOL(*CompareFunctionPointer) (Teacher teacher1, Teacher teacher2); void printTeachers(Teacher *teachers,int count); void printTeacher(Teacher* teacher); /********************/ void sortTeachers(Teacher teachers[], int count, CompareFunctionPointer cfp); //老师排序,,,,,cfp为排序条件 void prinitTeachers(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);
#import "Teacher.h" //比较姓名的函数 BOOL compareNameByAscending(Teacher teacher1, Teacher teacher2){ return strcmp(teacher1.name,teacher2.name) > 0 ? YES : NO; }; BOOL compareNameByDescending(Teacher teacher1, Teacher teacher2){; return strcmp(teacher1.name,teacher2.name) < 0 ? YES : NO; } //比较编号 BOOL compareNumberByAscending(Teacher teacher1, Teacher teacher2){ return teacher1.num > teacher2.num ? YES: NO; }; BOOL compareNumberByDescending(Teacher teacher1, Teacher teacher2){ return teacher1.num < teacher2.num ? YES: NO; }; //比较分数 BOOL compareScoreByAscending(Teacher teacher1, Teacher teacher2){ return teacher1.score > teacher2.score ? YES: NO; }; BOOL compareScoreByDescending(Teacher teacher1, Teacher teacher2){ return teacher1.score < teacher2.score ? YES: NO; }; //打印教师 void printTeacher(Teacher* teacher){ printf("%-10s",teacher->name); printf("%-10c",teacher->gender); printf("%-10d",teacher->age); printf("%-10d",teacher->num); printf("%-10.2f\n",teacher->score); } void printTeachers(Teacher *teachers,int count){ printf("name----gender------age------num--------score\n"); for (int i = 0; i < count; i++) { printTeacher((teachers + i)); } } //排序教师 void sortTeachers(Teacher teachers[], int count, CompareFunctionPointer cfp){ for (int i = 0; i < count - 1 ; i++) { for (int j = 0; j < count - 1 - i; j++) { if (cfp(teachers[j],teachers[j + 1])) { Teacher temp = teachers[j]; teachers[j] = teachers[j + 1]; teachers[j + 1] = temp; } } } printTeachers(teachers, count); } void printMaleTeacher(Teacher *teachers, int count){ for (int i = 0; i < count ; i++) { if ((teachers + i)->gender == 'm') { printTeacher(teachers + i); } } } void printFemaleTeacher(Teacher *teachers, int count){ for (int i = 0; i < count ; i++) { if ((teachers + i)->gender == 'f') { printTeacher(teachers + i); } } }
运行结果
这次注释比较少,不过结构设定的比较简单,大家可以先看看
相关文章推荐
- 常见的css3缩放效果
- [数算]研究了一天的《N个球放M个盒子问题》~~~~~~~~~~~~8种情况全部用公式解决
- Count Complete Tree Nodes算法详解
- linux gdb调试非常有用的命令,附加案例
- ios周刊第五期
- 题目1192:回文字符串
- HDOJ 3037 Saving Beans
- JFrame 与 Frame 的区别之一
- pam之基础知识和常见模块
- 大型网站架构体系的演变
- 摧毁自己
- 黑马程序员--c语言数据类型总结
- C++/VC++ 命名及其他规范
- C++模拟C#事件委托机制(二)
- Java线程之run和start的区别
- PHPUnit安装及入门(Unix或者Linux下)
- Objective-C 快速入门--基础(一)
- C++模拟C#事件委托机制(一)
- 代码动态改变 NGUI UILabel 的字体
- [算法]动态规划(Dynamic programming)