美女,我来帮你,不要积分,只要采纳俺的答案即可,如果不清楚,可联系me #include #include #include #define MAX_SIZE 38 typedef struct INFO { char id[10]; /*编号*/ char name[21]; /*名字*/ char sex[3]; /*性别*/ int course1; /*课程1成绩*/ int course2; /*课程2成绩*/ int course3; /*课程3成绩*/ int score; /*总分*/ float ave; /*平均分*/ } INFO; INFO info[MAX_SIZE]; /*计算每个学生3门课程的总分和平均成绩*/ void compute() { int i; for (i = 0; i < MAX_SIZE; i++) { info[i].score = info[i].course1 + info[i].course2 + info[i].course3; info[i].ave = (float)info[i].score / 3; } } /*找出每门课程中成绩最好和成绩最差的学生,并输出这些学生的基本数据*/ void find() { int i, max[3], min[3]; max[0] = min[0] = 0; /*初始化课程1的最高成绩和最低成绩的学生位置*/ max[1] = min[1] = 0; /*初始化课程2的最高成绩和最低成绩的学生位置*/ max[2] = min[2] = 0; /*初始化课程3的最高成绩和最低成绩的学生位置*/ for (i = 0; i < MAX_SIZE; i++) { /*课程1*/ if (info[i].course1 > info[max[0]].course1) max[0] = i; if (info[i].course1 < info[min[0]].course1) min[0] = i; /*课程2*/ if (info[i].course2 > info[max[1]].course2) max[1] = i; if (info[i].course2 < info[min[1]].course2) min[1] = i; /*课程3*/ if (info[i].course3 > info[max[2]].course3) max[2] = i; if (info[i].course3 < info[min[2]].course3) min[2] = i; } 补充: printf("\n课程1成绩最好的学生的信息:\n"); printf("编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); printf("%s %s %s %d %d %d %d %.2f\n", info[max[0]].id, info[max[0]].name, info[max[0]].sex, info[max[0]].course1, info[max[0]].course2, info[max[0]].course3, info[max[0]].score, info[max[0]].ave); printf("\n课程1成绩最差的学生的信息:\n"); printf("编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); printf("%s %s %s %d %d %d %d %.2f\n", info[min[0]].id, info[min[0]].name, info[min[0]].sex, info[min[0]].course1, info[min[0]].course2, info[min[0]].course3, info[min[0]].score, info[min[0]].ave); printf("\n课程2成绩最好的学生的信息:\n"); printf("编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); printf("%s %s %s %d %d %d %d %.2f\n", info[max[1]].id, info[max[1]].name, info[max[1]].sex, info[max[1]].course1, info[max[1]].course2, info[max[1]].course3, info[max[1]].score, info[max[1]].ave); 补充: printf("\n课程2成绩最差的学生的信息:\n"); printf("编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); printf("%s %s %s %d %d %d %d %.2f\n", info[min[1]].id, info[min[1]].name, info[min[1]].sex, info[min[1]].course1, info[min[1]].course2, info[min[1]].course3, info[min[1]].score, info[min[1]].ave); printf("\n课程3成绩最好的学生的信息:\n"); printf("编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); printf("%s %s %s %d %d %d %d %.2f\n", info[max[2]].id, info[max[2]].name, info[max[2]].sex, info[max[2]].course1, info[max[2]].course2, info[max[2]].course3, info[max[2]].score, info[max[2]].ave); printf("\n课程3成绩最差的学生的信息:\n"); printf("编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); printf("%s %s %s %d %d %d %d %.2f\n", info[min[2]].id, info[min[2]].name, info[min[2]].sex, info[min[2]].course1, info[min[2]].course2, info[min[2]].course3, info[min[2]].score, info[min[2]].ave); } 补充: void sort() { int i, j; INFO temp; for (i = 0; i < MAX_SIZE; i++) { for (j = i; j < MAX_SIZE; j++) { if (info[i].score < info[j].score) { temp = info[i]; info[i] = info[j]; info[j] = temp; } } } printf("\n\n编号 姓名 性别 课程1 课程2 课程3 总分 平均分\n"); for (i = 0; i < MAX_SIZE; i++) { printf("%s %s %s %d %d %d %d %.2f\n", info[i].id, info[i].name, info[i].sex, info[i].course1, info[i].course2, info[i].course3, info[i].score, info[i].ave); } } 补充: int main(int argc, char* argv[]) { int i, flag = 0, cnt = 0; char id[10]; while(cnt < MAX_SIZE) { flag = 0; printf("请输入第%d个学生的编号:", cnt+1); scanf("%s", id); for (i = 0; i < cnt; i++) { if (strcmp(info[i].id, id) == 0) { printf("已存在在编号的学生\n"); flag = 1; break; } } if (flag == 1) continue; printf("请输入第%d个学生的名字:", cnt+1); scanf("%s", info[cnt].name); printf("请输入第%d个学生的性别:", cnt+1); scanf("%s", info[cnt].sex); printf("请输入第%d个学生的课程1的成绩:", cnt+1); scanf("%d", &info[cnt].course1); printf("请输入第%d个学生的课程2的成绩:", cnt+1); scanf("%d", &info[cnt].course2); printf("请输入第%d个学生的课程3的成绩:", cnt+1); scanf("%d", &info[cnt].course3); cnt++; } compute(); find(); sort(); system("pause"); return 0; } 追问: 请问你那里后面的补充都要吗还有就是那个从高到低的排序怎么没有看到啊 回答: void sort() 这个函数就是, 冒泡排序 所有的都是,别漏啊 补充: 调试的话把 #define MAX_SIZE 38 38改的小点,可以少输入数据,就可以看结果了 追问: 那 你输出 的那些中文我还需要把那些信息输进去不