<pre name="code" class="cpp"><p><span style="font-family:Microsoft YaHei;font-size:18px;">① 创建一个Teacher数组,利用上面的sortTeachers(Teacher teacher[ ] ,int count,CompareFunctionPointer cfp)函数,调用函数(使用switch…case,通过控制台输入的数字与枚举值匹配实现调用不同的函数)来分别实现按姓名、员工编号、评分排序,其中每种排序的升、降方式都要实现。比如:分别实现对年龄按照升序、降序排列。</span></p><p><span style="font-family:Microsoft YaHei;font-size:18px;">② 输出教师数组中全部的男老师。</span></p><p><span style="font-family:Microsoft YaHei;font-size:18px;">③ 输出教师数组中的所有女老师。 </span></p>
/<span style="font-size:24px;">/ Teacher.h</span>
// Exame
//
// Created by lanou3g on 15-3-25.
// Copyright (c) 2015年 lanou3g. All rights reserved.
//
#import <Foundation/Foundation.h>
// 第二种定义
// 性别
// typedef enum sex
// {
// Man,
// Woman
// } Sex;
// typedef struct teacher
// {
// char name[20];
// Sex sex;
// int age;
// int num;
// float score;
//
// } Teacher;
typedef struct teacher
{
char name[20];
char sex;
int age;
int num;
float score;
} Teacher;
enum FunctionName
{
CompareNameByAscending = 1,
CompareNameByDescending,
CompareNumberByAscending,
CompareNumberByDescending,
CompareScoreByAscending,
CompareScoreByDescending,
PrintFemaleTeacher,
PrintMaleTeacher
};
void printTeacher(Teacher *teacher);
typedef BOOL (*CompareFunctionPointer)(Teacher teacher1,Teacher teacher2);
void sortTeachers(Teacher teacher[],int count,CompareFunctionPointer cfp);//<span style="font-size:24px;"><strong>函数指针的利用</strong></span>
void printTeachers(Teacher *teachers,int count);
BOOL compareNumberAscending(Teacher teacher1,Teacher teacher2);
BOOL compareNumberDescending(Teacher teacher1,Teacher teacher2);
BOOL compareNameAscending(Teacher teacher1,Teacher teacher2);
BOOL compareNameDescending(Teacher teacher1,Teacher teacher2);
BOOL compareScoreDescending(Teacher teacher1,Teacher teacher2);
BOOL compareScoreAscending(Teacher teacher1,Teacher teacher2);
void printMaleTeacher(Teacher *teacher,int count);
void printFemaleTeacher(Teacher *teacher,int count);
<pre name="code" class="cpp">//
// <strong><span style="font-size:18px;"> Teacher.m</span></strong>
// Exame
//
// Created by lanou3g on 15-3-25.
// Copyright (c) 2015年 lanou3g. All rights reserved.
//
#import "Teacher.h"
void printTeacher(Teacher *teacher)
{
printf("姓名:%s,性别:%c,年龄:%d,编号:%d,评分:%f\n",teacher->name,teacher->sex,teacher->age,teacher->num,teacher->score);
}
typedef BOOL (*CompareFunctionPointer)(Teacher teacher1,Teacher teacher2);//<span style="font-size:24px;">定义函数指针</span>
void sortTeachers(Teacher teacher[],int count,CompareFunctionPointer cfp)//<span style="font-size:24px;">函数回调</span>
{
for (int i = 0; i < count - 1; i ++) {
for (int j = 0; j < count - i - 1; j ++) {
if (cfp(teacher[j],teacher[j+1])) {
Teacher tea = teacher[j];
teacher[j] = teacher[j+1];
teacher[j+1] = tea;
}
}
}
}
void printTeachers(Teacher *teachers,int count)
{
for (int i = 0; i < count; i ++) {
printTeacher(&teachers[i]);
}
}
BOOL compareNumberAscending(Teacher teacher1,Teacher teacher2)
{
return teacher1.num > teacher2.num;
}
BOOL compareNumberDescending(Teacher teacher1,Teacher teacher2)
{
return teacher1.num < teacher2.num;
}
BOOL compareNameAscending(Teacher teacher1,Teacher teacher2)
{
//return strcmp(teacher1.name,teacher2.name);
if (strcmp(teacher1.name,teacher2.name) > 0) {
return YES;
}
else
return NO;
}
BOOL compareNameDescending(Teacher teacher1,Teacher teacher2)
{
//return strcmp(teacher2.name, teacher1.name);
if (strcmp(teacher1.name,teacher2.name) < 0) {
return YES;
}
else
return NO;
}
BOOL compareScoreDescending(Teacher teacher1,Teacher teacher2)
{
return teacher1.score < teacher2.score;
}
BOOL compareScoreAscending(Teacher teacher1,Teacher teacher2)
{
return teacher1.score > teacher2.score;
}
void printMaleTeacher(Teacher *teacher,int count)
{
for (int i = 0; i < count; i ++) {
if (teacher[i].sex == 'm') {
printTeacher(&teacher[i]);
}
}
}
void printFemaleTeacher(Teacher *teacher,int count)
{
for (int i = 0; i < count; i ++) {
if (teacher[i].sex == 'f') {
printTeacher(&teacher[i]);
}
}
}
<strong><span style="font-size:24px;">主函数的实现</span></strong>
<pre name="code" class="cpp">//
// main.m
// Exame
//
// Created by lanou3g on 15-3-25.
// Copyright (c) 2015年 lanou3g. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Teacher.h"
int main(int argc, const char * argv[])
{
printf("输入1:实现按照姓名进行升序排列\n输入2:实现按照姓名进行降序排列\n输入3:实现按照员工编号进行升序排列\n输入4:实现按照员工编号进行降序排列\n输入5:实现按照评分进行升序排列\n输入6:实现按照评分进行降序排列\n输入7:实现输出所有的女老师\n输入8:实现输出所有的男老师\n");
printf("=====================\n");
printf("请输入实现功能对应的数字:\n");
Teacher teacher[4] = {{"zhangsan",'m',23,34,5.5},{"lishi",'f',45,56,3.5},{"wangwu",'m',22,12,1.3},{"songliu",'f',45,12,3.2}};
int n = 0;
while (scanf("%d",&n)!=EOF) {
if (n >= 1 && n <= 8) {
switch (n) {
case CompareNameByAscending:
sortTeachers(teacher,4,compareNameAscending);
printTeachers(teacher,4);
break;
case CompareNameByDescending:
sortTeachers(teacher,4,compareNameDescending);
printTeachers(teacher,4);
break;
case CompareNumberByAscending:
sortTeachers(teacher,4,compareNumberAscending);
printTeachers(teacher,4);
break;
case CompareNumberByDescending:
sortTeachers(teacher,4, compareNumberDescending);
printTeachers(teacher,4);
break;
case CompareScoreByAscending:
sortTeachers(teacher,4, compareScoreAscending);
printTeachers(teacher,4);
break;
case CompareScoreByDescending:
sortTeachers(teacher,4, compareScoreDescending);
printTeachers(teacher,4);
break;
case PrintFemaleTeacher:
printFemaleTeacher(teacher,4);
break;
case PrintMaleTeacher :
printMaleTeacher(teacher,4);
break;
default:
break;
}
}
else
printf("请重新输入:\n");
}
return 0;
}
原文:http://blog.csdn.net/guoxianzhuang/article/details/44624535