怎么用c语言编写成绩系统?

用C语言代码写一个简单的学生成绩管理系统,通过菜单选择功能实现学生信息的录入、某门课程成绩的最高、最低和平均值计算、某门课程成绩的排序、学号/姓名查找学生信息等操作。

img

img

在你现有代码基础上补充吗?
截图不全啊,另外,建议用代码段把当前代码贴出来

这种作业题目,现成的多的是
拿去吧
全部资料都有,不只是代码


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100 // 最大学生数
#define MAX_NAME_LEN 20 // 最大姓名长度
#define MAX_COURSE_NUM 5 // 最大课程数

// 学生结构体
typedef struct {
    int id; // 学号
    char name[MAX_NAME_LEN]; // 姓名
    int scores[MAX_COURSE_NUM]; // 成绩
} Student;

// 学生数组
Student students[MAX_STUDENTS];
int num_students = 0; // 学生数

// 菜单函数
void menu() {
    printf("1. 录入学生信息\n");
    printf("2. 计算某门课程成绩的最高、最低和平均值\n");
    printf("3. 排序某门课程成绩\n");
    printf("4. 学号/姓名查找学生信息\n");
    printf("5. 退出\n");
}

// 录入学生信息函数
void input_student() {
    if (num_students >= MAX_STUDENTS) {
        printf("学生数已达到最大值,无法继续录入!\n");
        return;
    }
    printf("请输入学生信息:\n");
    printf("学号:");
    scanf("%d", &students[num_students].id);
    printf("姓名:");
    scanf("%s", students[num_students].name);
    for (int i = 0; i < MAX_COURSE_NUM; i++) {
        printf("第%d门课程成绩:", i + 1);
        scanf("%d", &students[num_students].scores[i]);
    }
    num_students++;
    printf("录入成功!\n");
}

// 计算某门课程成绩的最高、最低和平均值函数
void calculate_scores() {
    int course_num;
    printf("请输入要计算的课程编号(1-%d):", MAX_COURSE_NUM);
    scanf("%d", &course_num);
    if (course_num < 1 || course_num > MAX_COURSE_NUM) {
        printf("课程编号无效!\n");
        return;
    }
    int max_score = students[0].scores[course_num - 1];
    int min_score = students[0].scores[course_num - 1];
    int sum_score = 0;
    for (int i = 0; i < num_students; i++) {
        if (students[i].scores[course_num - 1] > max_score) {
            max_score = students[i].scores[course_num - 1];
        }
        if (students[i].scores[course_num - 1] < min_score) {
            min_score = students[i].scores[course_num - 1];
        }
        sum_score += students[i].scores[course_num - 1];
    }
    float avg_score = (float)sum_score / num_students;
    printf("最高分:%d\n", max_score);
    printf("最低分:%d\n", min_score);
    printf("平均分:%.2f\n", avg_score);
}

// 排序某门课程成绩函数
void sort_scores() {
    int course_num;
    printf("请输入要排序的课程编号(1-%d):", MAX_COURSE_NUM);
    scanf("%d", &course_num);
    if (course_num < 1 || course_num > MAX_COURSE_NUM) {
        printf("课程编号无效!\n");
        return;
    }
    // 冒泡排序
    for (int i = 0; i < num_students - 1; i++) {
        for (int j = 0; j < num_students - i - 1; j++) {
            if (students[j].scores[course_num - 1] < students[j + 1].scores[course_num - 1]) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
    printf("排序结果如下:\n");
    printf("学号\t姓名\t第%d门课程成绩\n", course_num);
    for (int i = 0; i < num_students; i++) {
        printf("%d\t%s\t%d\n", students[i].id, students[i].name, students[i].scores[course_num - 1]);
    }
}

// 学号/姓名查找学生信息函数
void search_student() {
    int choice;
    printf("请选择查找方式:\n");
    printf("1. 学号查找\n");
    printf("2. 姓名查找\n");
    scanf("%d", &choice);
    if (choice == 1) {
        int id;
        printf("请输入要查找的学生学号:");
        scanf("%d", &id);
        for (int i = 0; i < num_students; i++) {
            if (students[i].id == id) {
                printf("学号\t姓名\t第1门课程成绩\t第2门课程成绩\t第3门课程成绩\t第4门课程成绩\t第5门课程成绩\n");
                printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].scores[4]);
                return;
            }
        }
        printf("未找到该学生!\n");
    } else if (choice == 2) {
        char name[MAX_NAME_LEN];
        printf("请输入要查找的学生姓名:");
        scanf("%s", name);
        for (int i = 0; i < num_students; i++) {
            if (strcmp(students[i].name, name) == 0) {
                printf("学号\t姓名\t第1门课程成绩\t第2门课程成绩\t第3门课程成绩\t第4门课程成绩\t第5门课程成绩\n");
                printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].scores[4]);
                return;
            }
        }
        printf("未找到该学生!\n");
    } else {
        printf("无效选择!\n");
    }
}

// 主函数
int main() {
    int choice;
    while (1) {
        menu();
        printf("请选择功能:");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                input_student();
                break;
            case 2:
                calculate_scores();
                break;
            case 3:
                sort_scores();
                break;
            case 4:
                search_student();
                break;
            case 5:
                printf("谢谢使用!\n");
                exit(0);
            default:
                printf("无效选择!\n");
                break;
        }
    }
    return 0;
}

可以借鉴下

#include "score.h"
 
//学生成绩管理系统
int main(int argc, const char *argv[])
{
    int chose = 0;
    int loop = 1;
    // 1. 定义一个班级的的变量
    Class_t *cls_p =(Class_t *)malloc(sizeof(Class_t));
    if (cls_p == NULL)
    {
        printf("malloc failed!\n");
        return -1;
    }
    // 初始化学生的个数, 数组的变量从第0开始的
    cls_p->count = -1;
    while (loop)
    {
        printf("################################################################\n");
        printf("#### 0.录入  1.删除  2.修改  3.查询  4.遍历  5.排序  6.退出 ####\n");
        printf("################################################################\n");
        printf("请输入你的选择 > ");
        scanf("%d", &chose);
        while (getchar() != '\n'); // 循环吃掉所有的垃圾字符
        switch (chose)
        {
        case INSERT:
            insert_stu(cls_p);
            break;
        case DELECT:
            delete_stu(cls_p);
            break;
        case UPDATE:
            update_stu(cls_p);
            break;
        case SELECT:
            select_stu(cls_p);
            break;
        case PRINT:
            print_all_stu(cls_p);
            break;
        case SORT:
            sort_stu(cls_p);
            print_all_stu(cls_p);
            break;
        case QUIT:
            loop = 0;
            printf("退出学生成绩管理系统\n");
            break;
        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
        if (!loop)
        {
            break;
        }
    }
 
    if (cls_p != NULL)
    {
        free(cls_p);
        cls_p = NULL;
    }
    return 0;
}

以下是一个简单的学生成绩管理系统的C语言代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define MAX_NAME_LENGTH 20

typedef struct {
    int id;
    char name[MAX_NAME_LENGTH];
    float scores[3];
    float avg;
} Student;

Student students[MAX_STUDENTS];
int num_students = 0;

void add_student() {
    if (num_students >= MAX_STUDENTS) {
        printf("Error: too many students.\n");
        return;
    }
    Student s;
    printf("Enter student ID: ");
    scanf("%d", &s.id);
    printf("Enter student name: ");
    scanf("%s", s.name);
    printf("Enter scores for 3 courses: ");
    scanf("%f %f %f", &s.scores[0], &s.scores[1], &s.scores[2]);
    s.avg = (s.scores[0] + s.scores[1] + s.scores[2]) / 3;
    students[num_students++] = s;
    printf("Student added successfully.\n");
}

void print_student(Student s) {
    printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", s.id, s.name, s.scores[0], s.scores[1], s.scores[2], s.avg);
}

void print_students() {
    printf("ID\tName\tCourse 1\tCourse 2\tCourse 3\tAverage\n");
    for (int i = 0; i < num_students; i++) {
        print_student(students[i]);
    }
}

void print_course_stats(int course) {
    float max_score = 0, min_score = 100, total_score = 0;
    for (int i = 0; i < num_students; i++) {
        float score = students[i].scores[course];
        if (score > max_score) {
            max_score = score;
        }
        if (score < min_score) {
            min_score = score;
        }
        total_score += score;
    }
    float avg_score = total_score / num_students;
    printf("Course %d stats:\n", course + 1);
    printf("Max score: %.2f\n", max_score);
    printf("Min score: %.2f\n", min_score);
    printf("Average score: %.2f\n", avg_score);
}

void sort_students(int course) {
    for (int i = 0; i < num_students - 1; i++) {
        for (int j = i + 1; j < num_students; j++) {
            if (students[i].scores[course] < students[j].scores[course]) {
                Student temp = students[i];
                students[i] = students[j];
                students[j] = temp;
            }
        }
    }
    printf("Students sorted by course %d score.\n", course + 1);
}

void find_student() {
    int choice;
    printf("Search by:\n");
    printf("1. ID\n");
    printf("2. Name\n");
    printf("Enter choice: ");
    scanf("%d", &choice);
    if (choice == 1) {
        int id;
        printf("Enter student ID: ");
        scanf("%d", &id);
        for (int i = 0; i < num_students; i++) {
            if (students[i].id == id) {
                print_student(students[i]);
                return;
            }
        }
        printf("Student not found.\n");
    } else if (choice == 2) {
        char name[MAX_NAME_LENGTH];
        printf("Enter student name: ");
        scanf("%s", name);
        for (int i = 0; i < num_students; i++) {
            if (strcmp(students[i].name, name) == 0) {
                print_student(students[i]);
                return;
            }
        }
        printf("Student not found.\n");
    } else {
        printf("Invalid choice.\n");
    }
}

int main() {
    int choice;
    do {
        printf("Menu:\n");
        printf("1. Add student\n");
        printf("2. Print all students\n");
        printf("3. Print course statistics\n");
        printf("4. Sort students by course score\n");
        printf("5. Find student\n");
        printf("0. Exit\n");
        printf("Enter choice: ");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                add_student();
                break;
            case 2:
                print_students();
                break;
            case 3:
                printf("Enter course number (1-3): ");
                scanf("%d", &choice);
                if (choice >= 1 && choice <= 3) {
                    print_course_stats(choice - 1);
                } else {
                    printf("Invalid course number.\n");
                }
                break;
            case 4:
                printf("Enter course number (1-3): ");
                scanf("%d", &choice);
                if (choice >= 1 && choice <= 3) {
                    sort_students(choice - 1);
                } else {
                    printf("Invalid course number.\n");
                }
                break;
            case 5:
                find_student();
                break;
            case 0:
                printf("Exiting...\n");
                break;
            default:
                printf("Invalid choice.\n");
                break;
        }
    } while (choice != 0);
    return 0;
}

该程序使用结构体存储学生信息,包括学号、姓名、三门课程的成绩和平均分。主函数中使用一个循环菜单,根据用户选择调用不同的函数实现不同的功能,包括添加学生、打印所有学生、计算某门课程成绩的最高、最低和

纯手写,望采纳

img

//
#include<stdio.h>
#include<windows.h>
#define Max_stu_num 25
#define obj_num 3

char File_Path[]="student_inf.txt";

typedef struct
{
    char Name[25];         //姓名
    int Number;            //学号
    char gender[25];    //性别
    char city[25];            //籍贯
    int score[obj_num];            //数学成绩//语文成绩//英语成绩
    int Sum_score;     //总成绩
} Stu;

char obj_name[obj_num][25]= {"数学","语文","英语"};
double ave[obj_num];

double stu_avescore[Max_stu_num];    //平均成绩

Stu stu[Max_stu_num];
int count_stu=0;

void cal_sum_score(int index)
{
    stu[index].Sum_score=0;
    for(int j=0; j<obj_num; j++)
    {
        stu[index].Sum_score+=stu[index].score[j];
    }
}

void input()
{
    printf("输入姓名:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].Name);
    printf("输入学号:\n");
    fflush(stdin);
    scanf("%d",&stu[count_stu].Number);
    printf("输入性别:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].gender);
    printf("输入籍贯:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].city);
    for(int i=0; i<obj_num; i++)
    {
        printf("输入%s成绩:\n",obj_name[i]);
        fflush(stdin);
        scanf("%d",&stu[count_stu].score[i]);
    }
    cal_sum_score(count_stu);
    count_stu++;
}

void output_head()
{
    printf("姓名\t学号\t\t性别\t籍贯\t");
    for(int i=0; i<obj_num; i++)
    {
        printf("%s\t",obj_name[i]);
    }
    printf("总分\n");
}

void outputOne(int index)
{
    printf("%s\t",stu[index].Name);
    printf("%d\t",stu[index].Number);
    printf("%s\t",stu[index].gender);
    printf("%s\t",stu[index].city);
    for(int i=0; i<obj_num; i++)
    {
        printf("%d\t",stu[index].score[i]);
    }
    printf("%d\t",stu[index].Sum_score);
    printf("\n");
}

void output_all(int n)
{
    output_head();
    int j;
    for(j=0; j<n; j++)
    {
        outputOne(j);
    }
    printf("---------------------------------------------------\n");
}

int search(int number)
{
    int i,p=-1;
    for(i=0; i<count_stu; i++)
    {
        if(stu[i].Number==number)
        {
            p=i;
            return p;
        }
    }
    return -1;
}

void modify(int number)
{
    int index=search(number);
    if(index==-1)
    {
        printf("找不到该学号\n");
    }
    else
    {
        printf("学号%d的学生是第%d位\n",number,index+1);
        output_head();
        outputOne(index);
        puts("修改信息");
        printf("输入姓名:\n");
        fflush(stdin);
        scanf("%s",stu[index].Name);
        printf("输入学号:\n");
        fflush(stdin);
        scanf("%d",&stu[index].Number);
        stu[index].Sum_score=0;
        for(int i=0; i<obj_num; i++)
        {
            printf("输入%s成绩:\n",obj_name[i]);
            fflush(stdin);
            scanf("%d",&stu[index].score[i]);
            stu[index].Sum_score+=stu[index].score[i];
        }
        cal_sum_score(index);
        printf("修改成功\n");
    }
}

void del(int number)
{
    int index=search(number);
    if(index==-1)
    {
        printf("找不到该学号\n");
    }
    else
    {
        printf("学号%d的学生是第%d位\n",number,index+1);
        output_head();
        outputOne(index);
        int i;
        for(i=index; i<count_stu-1; i++)
        {
            stu[i]= stu[i+1];
        }
        printf("删除成功\n");
        count_stu--;
    }
}

double calave()
{
    int score_sum[obj_num]= {0};
    for(int i=0; i<count_stu; i++)
    {
        for(int j=0; j<obj_num; j++)
        {
            score_sum[j]+=stu[i].score[j];
        }
    }
    for(int j=0; j<obj_num; j++)
    {
        ave[j]=(double)score_sum[j]/count_stu;
    }
}

void save()
{
    FILE *fp;
    fp = fopen(File_Path,"w");
    if(fp == NULL)
    {
        printf("error!");
    }
    else
    {
        for(int j=0; j<count_stu; j++)
        {
            fprintf(fp,"%s %d ",stu[j].Name,stu[j].Number);
            fprintf(fp,"%s %s ",stu[j].gender,stu[j].city);
            for(int i=0; i<obj_num; i++)
            {
                fprintf(fp,"%d ",stu[j].score[i]);
            }
            fprintf(fp,"%d\n",stu[j].Sum_score);
        }
        printf("文件写入成功\n");
    }
    fclose(fp);
}

void read()
{
    FILE *fp;
    fp = fopen(File_Path,"r");
    int count=0;
    if(fp == NULL)
    {
        printf("error!");
    }
    else
    {
        int flag=2;
        int j=count_stu;
        do
        {
            flag=fscanf(fp,"%s %d ",stu[j].Name,&stu[j].Number);
            fscanf(fp,"%s %s ",stu[j].gender,stu[j].city);
            for(int i=0; i<obj_num; i++)
            {
                fscanf(fp,"%d ",&stu[j].score[i]);
            }
            fscanf(fp,"%d\n",&stu[j].Sum_score);
            if(flag!=-1)
            {
                cal_sum_score(count);
                count++;
            }
            j++;
        }
        while(flag>0);
        printf("文件读取成功\n");
        count_stu+=count;
    }
    fclose(fp);
}

void swap_stu_inf(Stu stu[],int a,int b)
{
    Stu tem=stu[a];
    stu[a]=stu[b];
    stu[b]=tem;
}
void BubbleSort_number(Stu stu[],int n)
{
    int j,k;
    Stu t;
    for(j=0; j<n-1; j++)
    {
        for(k=0; k<n-j-1; k++)
        {
            if(stu[k].Number>stu[k+1].Number)
            {
                t=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=t;
            }
        }
    }
}

void BubbleSort_score(Stu stu[],int n)
{
    int j,k;
    Stu t;
    for(j=0; j<n-1; j++)
    {
        for(k=0; k<n-j-1; k++)
        {
            if(stu[k].Sum_score<stu[k+1].Sum_score)
            {
                t=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=t;
            }
        }
    }
}

void out_aveScore()
{
    printf("平均分\t\t");
    for(int i=0; i<obj_num; i++)
    {
        printf("%.2lf\t",ave[i]);
    }
    printf("\n");
}

void cal_stu_avescore()
{
    for(int i=0; i<count_stu; i++)
    {
        stu_avescore[i]=(double)stu[i].Sum_score/obj_num;
    }
}

void color(short x)    //自定义函根据参数改变颜色
{
    if(x>=0 && x<=15)//参数在0-15的范围颜色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色
    else//默认的颜色白色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}

void put_stu_ave_score()
{
    cal_stu_avescore();
    printf("姓名\t学号\t平均分\n");
    for(int i=0; i<count_stu; i++)
    {
        if(stu_avescore[i]<60)
        {
            color(6);
        }
        printf("%s\t%d\t%.2f\n",stu[i].Name,stu[i].Number,stu_avescore[i]);
        color(7);
    }
    //color(7);
}


void sort_menu()
{
    puts("--------1.按学号排序------------------------------");
    puts("--------2.按总成绩排序----------------------------");
    puts("--------3.返回主菜单------------------------------");
    int option=0;
    fflush(stdin);
    scanf("%d",&option);
    if(option==1)
    {
        system("cls");
        BubbleSort_number(stu,count_stu);
        puts("排序完成");
        output_all(count_stu);
    }
    else if(option==2)
    {
        system("cls");
        BubbleSort_score(stu,count_stu);
        puts("排序完成");
        output_all(count_stu);
    }
    else if(option==3)
    {
        return;
    }
}
void count_stu_()
{
    printf("统计学生总数\n");
    printf("一共 %d 名学生\n",count_stu);
}
void insert(int index,Stu stu_)
{
    for(int i=count_stu+1; i>index; i--)
    {
        stu[i]=stu[i-1];
    }
    stu[index]=stu_;
    count_stu++;
    cal_sum_score(index);
}
void menu()
{
    int option=0;
    while(option!=11)
    {
        system("cls");
        printf("--------------------------------------------------------------------------------\n");
        printf("------学生信息管理--------------------------------------------------------------\n");
        printf("------1.录入学生信息  ----------------------------------------------------------\n");
        printf("------2.查找学生信息  ----------------------------------------------------------\n");
        printf("------3.删除学生信息  ----------------------------------------------------------\n");
        printf("------4.修改学生信息------------------------------------------------------------\n");
        printf("------5.学生信息排序------------------------------------------------------------\n");
        printf("------6.统计学生总数  ----------------------------------------------------------\n");
        printf("------7.显示所有学生信息--------------------------------------------------------\n");
        printf("------8.插入学生信息------------------------------------------------------------\n");
        printf("------9.文件读入  --------------------------------------------------------------\n");
        printf("------10.保存至文件--------------------------------------------------------------\n");
        printf("------11.退出系统---------------------------------------------------------------\n");
        printf("--------------------------------------------------------------------------------\n");
        printf("输入选项:\n");
        fflush(stdin);
        scanf("%d",&option);
        if(option==1)
        {
            system("cls");
            input();
            system("pause");
        }
        else if(option==2)
        {
            system("cls");
            //output(count_stu);
            int number;
            printf("输入要查找的学号:");
            fflush(stdin);
            scanf("%d",&number);
            int index=search(number);
            if(index==-1)
            {
                printf("查找失败\n");
            }
            else
            {
                printf("查找成功\n");
                output_head();
                outputOne(index);
            }
            system("pause");
        }
        else if(option==3)
        {
            system("cls");
            int number;
            printf("输入要删除的学号:");
            scanf("%d",&number);
            del(number);
            puts("完成");
            system("pause");
        }
        else if(option==4)
        {
            system("cls");
            output_all(count_stu);
            int number;
            printf("输入要修改成绩的学生对应的学号:");
            scanf("%d",&number);
            modify(number);
            system("pause");
        }
        else if(option==5)
        {
            system("cls");
            sort_menu();
            system("pause");
        }
        else if(option==6)
        {
            system("cls");
            count_stu_();
            system("pause");
        }
        else if(option==7)
        {
            system("cls");
            puts("显示所有学生信息");
            /**/
            output_all(count_stu);
            system("pause");
        }
        else if(option==8)
        {
            system("cls");
            int index;
            printf("输入要插入的位置(0~%d)",count_stu);
            scanf("%d",&index);
            Stu stu_;
            printf("输入姓名:\n");
            fflush(stdin);
            scanf("%s",stu_.Name);
            printf("输入学号:\n");
            fflush(stdin);
            scanf("%d",&stu_.Number);
            printf("输入性别:\n");
            fflush(stdin);
            scanf("%s",stu_.gender);
            printf("输入籍贯:\n");
            fflush(stdin);
            scanf("%s",stu_.city);
            for(int i=0; i<obj_num; i++)
            {
                printf("输入%s成绩:\n",obj_name[i]);
                fflush(stdin);
                scanf("%d",&stu_.score[i]);
            }

            insert(index,stu_);
            puts("插入完成");
            system("pause");
        }

        else if(option==9)
        {
            system("cls");
            read();
            system("pause");
        }
        else if(option==10)
        {
            system("cls");
            save();
            system("pause");
        }
        else if(option==11)
        {
            system("cls");
            return;
            system("pause");
        }
    }
}

int main()
{
    menu();
    return 0;
}


C语言示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义学生结构体
struct student {
    int id;           // 学号
    char name[20];    // 姓名
    float score[3];   // 三门课的成绩
    float avgScore;   // 平均成绩
};

// 学生结构体数组,存储所有学生信息
struct student studentList[100];
// 学生数目
int studentNum = 0;

// 录入学生信息
void addStudent() {
    printf("请输入学生信息:\n");
    struct student stu;
    printf("学号:");
    scanf("%d", &stu.id);
    printf("姓名:");
    scanf("%s", stu.name);
    printf("成绩1:");
    scanf("%f", &stu.score[0]);
    printf("成绩2:");
    scanf("%f", &stu.score[1]);
    printf("成绩3:");
    scanf("%f", &stu.score[2]);
    stu.avgScore = (stu.score[0] + stu.score[1] + stu.score[2]) / 3.0;
    studentList[studentNum] = stu;
    studentNum++;
    printf("录入成功!\n");
}

// 计算某门课程成绩的最高、最低和平均值
void calculateScore(int courseNum) {
    float sum = 0.0, max = 0.0, min = 100.0;
    for (int i = 0; i < studentNum; i++) {
        sum += studentList[i].score[courseNum];
        if (studentList[i].score[courseNum] > max) {
            max = studentList[i].score[courseNum];
        }
        if (studentList[i].score[courseNum] < min) {
            min = studentList[i].score[courseNum];
        }
    }
    float avg = sum / studentNum;
    printf("第%d门课的最高分:%f\n", courseNum + 1, max);
    printf("第%d门课的最低分:%f\n", courseNum + 1, min);
    printf("第%d门课的平均分:%f\n", courseNum + 1, avg);
}

// 某门课程成绩排序(降序)
void sortScore(int courseNum) {
    for (int i = 0; i < studentNum - 1; i++) {
        for (int j = 0; j < studentNum - 1 - i; j++) {
            if (studentList[j].score[courseNum] < studentList[j+1].score[courseNum]) {
                struct student temp = studentList[j];
                studentList[j] = studentList[j+1];
                studentList[j+1] = temp;
            }
        }
    }
    printf("第%d门课的成绩排序结果如下:\n", courseNum + 1);
    printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
    for (int i = 0; i < studentNum; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", 
                studentList[i].id, studentList[i].name, 
                studentList[i].score[0], studentList[i].score[1], 
                studentList[i].score[2], studentList[i].avgScore);
    }
}

// 按学号或姓名查找学生信息
void findStudent() {
    printf("请输入要查找的学生信息:\n");
    printf("(1) 按学号查找\n");
    printf("(2) 按姓名查找\n");
    int choice;
    scanf("%d", &choice);
    int id;
    char name[20];
    switch (choice) {
        case 1:
            printf("请输入学号:");
            scanf("%d", &id);
            for (int i = 0; i < studentNum; i++) {
                if (studentList[i].id == id) {
                    printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
```c
                printf("%s\t%.2f\t%.2f\t%.2f\t%.2f\n", 
                        studentList[i].name, studentList[i].score[0], 
                        studentList[i].score[1], studentList[i].score[2], 
                        studentList[i].avgScore);
                    return;
                }
            }
            printf("没有找到该学生!\n");
            break;
        case 2:
            printf("请输入姓名:");
            scanf("%s", name);
            for (int i = 0; i < studentNum; i++) {
                if (strcmp(name, studentList[i].name) == 0) {
                    printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
                    printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", 
                            studentList[i].id, studentList[i].name, 
                            studentList[i].score[0], studentList[i].score[1], 
                            studentList[i].score[2], studentList[i].avgScore);
                    return;
                }
            }
            printf("没有找到该学生!\n");
            break;
        default:
            printf("输入有误!\n");
            break;
    }
}

int main() {
    int choice;
    while(1) {
        printf("\n---------------------------\n");
        printf("请选择功能:\n");
        printf("(1) 录入学生信息\n");
        printf("(2) 计算某门课程成绩的最高、最低和平均值\n");
        printf("(3) 某门课程成绩排序(降序)\n");
        printf("(4) 按学号或姓名查找学生信息\n");
        printf("(5) 退出\n");
        printf("---------------------------\n");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                printf("请输入课程编号:");
                int courseNum;
                scanf("%d", &courseNum);
                calculateScore(courseNum - 1);
                break;
            case 3:
                printf("请输入课程编号:");
                scanf("%d", &courseNum);
                sortScore(courseNum - 1);
                break;
            case 4:
                findStudent();
                break;
            case 5:
                exit(0);   // 退出程序
                break;
            default:
                printf("输入有误!\n");
                break;
        }
    }
    return 0;
}