void *Sort(STU *head) { STU *p = head->next; STU *now = head; STU *temp = head; // 进行排序操作 while (p != NULL) { while (p->next != NULL) { // 按照总分进行比较排序 if ((p->score[0] + p->score[1] + p->score[2]) < (p->next->score[0] + p->next->score[1] + p->next->score[2])) { // 交换节点数据 strcpy(temp->num, p->num); strcpy(temp->name, p->name); strcpy(temp->major, p->major); temp->classNo = p->classNo; temp->score[0] = p->score[0]; temp->score[1] = p->score[1]; temp->score[2] = p->score[2]; strcpy(p->num, p->next->num); strcpy(p->name, p->next->name); strcpy(p->major, p->next->major); p->classNo = p->next->classNo; p->score[0] = p->next->score[0]; p->score[1] = p->next->score[1]; p->score[2] = p->next->score[2]; strcpy(p->next->num, temp->num); strcpy(p->next->name, temp->name); strcpy(p->next->major, temp->major); p->next->classNo = temp->classNo; p->next->score[0] = temp->score[0]; p->next->score[1] = temp->score[1]; p->next->score[2] = temp->score[2]; } // 移动指针到下一个节点 p = p->next; } // 更新指针到下一轮排序的起始节点 p = now->next; now = now->next; } return 0; }int main() { while (1) { printf("\n请输入功能编号完成相应功能\n"); printf("10.将学生信息按照分数由高到低排序\n"); printf("其他,退出系统\n"); scanf("%d", &n); if (n < 1 || n > 10) break; switch (n) { case 10: Sort(head); system("pause"); break; } } return 0; }优化main函数
时间: 2024-04-21 22:23:19 浏览: 126
要优化main函数,可以考虑以下几点:
1. 使用循环代替递归:将while(1)替换为一个循环条件,这样可以避免使用递归调用,并且可以更好地控制程序的流程。
2. 使用函数指针数组:可以将功能编号与相应的函数绑定起来,使用一个函数指针数组来存储这些函数,根据功能编号直接调用相应的函数,避免使用switch语句。
3. 提取函数:将功能编号对应的操作提取为单独的函数,使代码结构更清晰,每个函数只负责一个具体的功能。
优化后的main函数如下所示:
```c
typedef void (*FunctionPtr)(STU *);
void Sort(STU *head) {
// 排序操作
}
void PrintMenu() {
printf("\n请输入功能编号完成相应功能\n");
printf("10.将学生信息按照分数由高到低排序\n");
printf("其他,退出系统\n");
}
int main() {
int n;
FunctionPtr functions[] = {
NULL, // 0
NULL, // 1
NULL, // 2
NULL, // 3
NULL, // 4
NULL, // 5
NULL, // 6
NULL, // 7
NULL, // 8
NULL, // 9
Sort // 10
};
do {
PrintMenu();
scanf("%d", &n);
if (n < 1 || n > 10)
break;
if (functions[n] != NULL) {
functions[n](head);
system("pause");
}
} while (1);
return 0;
}
```
请注意,上述代码中的函数指针数组需要根据实际情况进行填充,每个功能对应一个函数指针。另外,根据实际需要,你可能还需要在代码中添加必要的头文件和结构体定义。
阅读全文