这道题是没有什么太大的难度,但是是比较基础性的知识点的应用!
对学习OC有一定的帮助.
1. 创建一对文件Student.h Student.m
2. 在Student.h中,定义一个Student结构体,成员变量包括:姓名、性别、年龄、学号、分数
3. 声明一个打印Student的函数。参数是结构体指针
4. 声明一个打印数组中所有学生的函数
5. 声明一个实现学生数组排序的函数,按照姓名升序
6. 声明一个实现学生数组排序的函数,按照年龄降序
7. 声明一个实现学生数组排序的函数,按照学号升序
8. 声明一个实现学生数组排序的函数,按照分数降序
9. 声明一个输出学生数组中全部男学生的函数
10. 声明一个输出学生数组中全部女学生的函数
11、从控制台输入1~6之间的数字,分别调用上述6个函数,使用switch/case实现。
12、如果输入1~6以外的数字,输出“没有对应的数字,请重新输入”
13、使用while循环实现反复输入
14、定义枚举类型表示1~6之间的数字,switch/case使用枚举值。
//main函数部分
#import <Foundation/Foundation.h>
#import "Student.h"//注意头文件
// 声明枚举类型,描述1~6之间的数字
enum FunctionName{
SortAscendByName = 1,
SortDescendByAge,
SortAscendByNumber,
SortDescendByScore,
PrintMaleStudent,
PrintFemaleStudent
};
int main(int argc, const char * argv[]) {
Student stu1 = {"a", ‘m‘, 19, 5, 90};
Student stu2 = {"c", ‘m‘, 26, 1, 89};
Student stu3 = {"v", ‘f‘, 20, 3, 92};
Student stu4 = {"b", ‘m‘, 24, 4, 97};
Student stu5 = {"x", ‘m‘, 22, 2, 95};
Student stus[5] = {stu1, stu2, stu3, stu4, stu5};
while (YES) {
printf("\n");
printf("输入0:退出程序\n");//这里输入0退出,输入字符应该也退出.如果非要实现这个功能可以通过case选用除0~6之外数字
printf("输入1:实现按照姓名升序排列\n");
printf("输入2:实现按照年龄降序排列\n");
printf("输入3:实现按照学号升序排列\n");
printf("输入4:实现按照分数降序排列\n");
printf("输入5:实现输出所有男生\n");
printf("输入6:实现输出所有女生\n");
printf("=========================\n");
printf("请输入实现功能对应的数字:");
int functionNum = 0; // 保存输入的数字
scanf("%d", &functionNum);
getchar();
printf("\n");
if (functionNum <= 0) {
printf("退出程序");
break;
}
// 根据输入的数字,调用对应的函数
switch (functionNum) {
case SortAscendByName: {
sortAscendByName(stus, 5);
printAllStudent(stus, 5);
break;
}
case SortDescendByAge: {
sortDescendByAge(stus, 5);
printAllStudent(stus, 5);
break;
}
case SortAscendByNumber: {
sortAscendByNumber(stus, 5);
printAllStudent(stus, 5);
break;
}
case SortDescendByScore: {
sortDescendByScore(stus, 5);
printAllStudent(stus, 5);
break;
}
case PrintMaleStudent: {
printMaleStudent(stus, 5);
break;
}
case PrintFemaleStudent: {
printFemaleStudent(stus, 5);
break;
}
default: {
printf("没有对应的函数,请重新输入!\n");
break;
}
}
}
return 0;
}
//声明.h文件部分
// 声明学生结构体
struct student{
char names[20];
char sex;
int age;
int number;
float score;
};
typedef struct student Student;
// 输出结构体的所有信息。参数:结构体指针
void printStudent(Student * s);
// 输出结构体数组中所有元素的信息
void printAllStudent(Student * stus, int count);
// 按照姓名升序排列
void sortAscendByName(Student * stus, int count);
// 按照年龄降序排列
void sortDescendByAge(Student * stus, int count);
// 按照学号升序排列
void sortAscendByNumber(Student * stus, int count);
// 按照分数降序排列
void sortDescendByScore(Student * stus, int count);
// 输出全部男生
void printMaleStudent(Student * stus, int count);
//定义.m部分
// 输出结构体的所有信息。参数:结构体指针
void printStudent(Student * s){
printf("%-*s %c %d %d %.1f\n", 10, s->names, s->sex, s->age, s->number, s->score);
}
// 输出结构体数组中所有元素的信息
void printAllStudent(Student * stus, int count){
for (int i = 0; i < count; i++) {
printStudent(stus+i);
}
}
// 按照姓名升序排列
void sortAscendByName(Student * stus, int count){
for (int i = 0; i < count-1; i++) {
for (int j = 0; j < count-1-i; j++) {
if (strcmp(stus[j].names, stus[j+1].names) > 0) {
Student temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
}
// 按照年龄降序排列
void sortDescendByAge(Student * stus, int count){
for (int i = 0; i < count-1; i++) {
for (int j = 0; j < count-1-i; j++) {
if (stus[j].age < stus[j+1].age) {
Student temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
}
// 按照学号升序排列
void sortAscendByNumber(Student * stus, int count){
for (int i = 0; i < count-1; i++) {
for (int j = 0; j < count-1-i; j++) {
if (stus[j].number > stus[j+1].number) {
Student temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
}
// 按照分数降序排列
void sortDescendByScore(Student * stus, int count){
for (int i = 0; i < count-1; i++) {
for (int j = 0; j < count-1-i; j++) {
if (stus[j].score < stus[j+1].score) {
Student temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
}
// 输出全部男生
void printMaleStudent(Student * stus, int count){
for (int i = 0; i < count; i++) {
if (stus[i].sex == ‘m‘) {
printStudent(stus+i);
}
}
}
// 输出全部女生
void printFemaleStudent(Student * stus, int count){
for (int i = 0; i < count; i++) {
if (stus[i].sex == ‘f‘) {
printStudent(stus+i);
}
}
}
// 输出全部女生
void printFemaleStudent(Student * stus, int count);