把代码贴上来,方便大家修改。图中红色箭头所指“插入代码块” ,ctrl + c , ctrl + v。
#include <stdio.h>
#include <string.h>
#define N 3
struct Student
{
char num[13]; // 学号
char name[11];// 姓名
char sex[5]; // 性别
int age; // 年龄
int cprogram;// c 成绩
int english; // e 成绩
int math; // m 成绩
double aver; // 平均成绩
}stu[N];
void input(struct Student stu[], int n)
{
int i;
for(i = 0;i < n; i++)
{
printf("请输入第%d/%d个学生的信息:\n",i+1,n);
printf("------------------------------------------\n");
printf("学号(12个字符以内):");
scanf("%s",stu[i].num);
getchar();
printf("姓名(10个字符以内):");
scanf(" %s",stu[i].name);
getchar();
printf("性别(4个字符以内):");
scanf(" %s",stu[i].sex);
getchar();
printf("年龄(整数):");
scanf(" %d",&stu[i].age);
printf("《c语言》成绩(整数):");
scanf("%d",&stu[i].cprogram);
printf("《英 语》成绩(整数):");
scanf("%d",&stu[i].english);
printf("《高 数》成绩(整数):");
scanf("%d",&stu[i].math);
stu[i].aver=(stu[i].cprogram+stu[i].english+stu[i].math)/3.0;
printf("------------------------------------------\n\n");
}
}
void output(struct Student stu[], int n)
{
int i;
if (n <= 0) return;
printf("%-13s %-11s %-5s %-8s %-8s %-8s %-8s %-8s\n","学号","姓名",
"性别","年龄","c语言","英语","高数","平均分");
printf("---------------------------------------------------------------------------\n");
for (i = 0; i < n; i++)
printf("%-13s %-11s %-5s %-8d %-8d %-8d %-8d %-8.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].age,stu[i].cprogram,stu[i].english,stu[i].math,stu[i].aver);
printf("---------------------------------------------------------------------------\n\n");
}
void menu()
{
printf("请选择排序字段:\n");
printf("---------------------------------------------------------------------------------\n");
printf("(1)学号 (2)姓名 (3)性别 (4)年龄 (5)c语言 (6)英语 (7)高数 (8)平均分 (0)退出程序\n");
printf("---------------------------------------------------------------------------------\n");
}
void menu1()
{
printf("请选择排序方向:\n");
printf("---------------------------------------------------------------------------------\n");
printf(" (1)升序 (2)降序 (0)退出程序\n");
printf("---------------------------------------------------------------------------------\n");
}
void sort(struct Student stu[], int n, int field, int direction)
{
int i, j;
struct Student tmp;
if (field < 1 || field > 8 || direction < 1 || direction > 2) return;
for (i = n - 1; i > 0; i--){
for (j = 0; j < i; j++){
if (field == 1 && direction == 2 && strcmp(stu[j].num, stu[j+1].num) < 0 || //学号 降序
field == 1 && direction == 1 && strcmp(stu[j].num, stu[j+1].num) > 0 || //学号 升序
field == 2 && direction == 2 && strcmp(stu[j].name,stu[j+1].name) < 0 || //姓名 降序
field == 2 && direction == 1 && strcmp(stu[j].name,stu[j+1].name) > 0 || //姓名 升序
field == 3 && direction == 2 && strcmp(stu[j].sex, stu[j+1].sex) < 0 || //性别 降序
field == 3 && direction == 1 && strcmp(stu[j].sex, stu[j+1].sex) > 0 || //性别 升序
field == 4 && direction == 2 && stu[j].age < stu[j+1].age || //年龄 降序
field == 4 && direction == 1 && stu[j].age > stu[j+1].age || //年龄 升序
field == 5 && direction == 2 && stu[j].cprogram < stu[j+1].cprogram || //c语言 降序
field == 5 && direction == 1 && stu[j].cprogram > stu[j+1].cprogram || //c语言 升序
field == 6 && direction == 2 && stu[j].english < stu[j+1].english || //英语 降序
field == 6 && direction == 1 && stu[j].english > stu[j+1].english || //英语 升序
field == 7 && direction == 2 && stu[j].math < stu[j+1].math || //高数 降序
field == 7 && direction == 1 && stu[j].math > stu[j+1].math || //高数 升序
field == 8 && direction == 2 && stu[j].aver < stu[j+1].aver || //平均分降序
field == 8 && direction == 1 && stu[j].aver > stu[j+1].aver ) //平均分升序
{
tmp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = tmp;
}
}
}
}
int main()
{
int exit = 1, field, direction;
printf("现某班有%d名学生,请分别依次输入%d个学生的信息:\n\n",N,N);
input(stu, N);
//output(stu,N);
while (exit){
menu();
scanf("%d", &field);
if (field >= 1 && field <= 8){
do {
menu1();
scanf("%d", &direction);
}while (direction < 0 || direction > 2);
if (direction >= 1 && direction <= 2){
sort(stu, N, field, direction);
printf("\n排序后的学生信息:\n");
printf("===================\n");
output(stu,N);
}
else if (direction == 0)
exit = 0;
}
else if (field == 0)
exit = 0;
}
return 0;
}