您的位置:首页 > 其它

函数 指针 结构体的综合应用

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);
}
}
}


运行结果



这次注释比较少,不过结构设定的比较简单,大家可以先看看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: