2401_84401465 2024-06-15 17:17 采纳率: 71.4%
浏览 6
已结题

如何运用C语言实现以下功能

运用C语言中基本知识,顺序结构、选择结构、循环结构、数组、函数、指针,对学生基本信息,包括学号、至少三门课成绩完成如下操作:
学生基本信息录入;
学生基本信息的输出;
按学号查询学生信息;
按学号修改某学生信息并输出;
求每个人平均成绩;
删除某学生信息;
添加某学生信息
输出平均分大于80分的同学信息。
2、要求
① 学生成绩存储在数组中;
② 部分功能要用函数实现;
④ 程序能正确执行,输入与输出有必要的提示信息;
⑤ 有能力的同学可以设计功能菜单。
3、结果输出要求界面直观、格式规

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-15 17:17
    关注

    引自免费微信小程序:皆我百晓生

    为了解决上述问题,我们可以构建一个C语言程序,该程序将使用数组和结构体来存储学生信息,并通过函数实现各种操作。下面是一个可能的实现方案:

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_STUDENTS 100 // 最大可存储的学生数
    
    // 定义学生结构体
    typedef struct {
        char studentID[10];
        float scores[3];
    } Student;
    
    Student students[MAX_STUDENTS]; // 存储学生数据的数组
    int numStudents = 0; // 当前学生的数量
    
    // 函数声明
    void addStudent();
    void printAllStudents();
    void searchStudentByID(char *id);
    void modifyStudentByID(char *id);
    float calculateAverage(Student s);
    void deleteStudentByID(char *id);
    void printStudentsWithAverageAbove80();
    
    int main() {
        int choice;
        
        do {
            printf("\n\nMenu:\n");
            printf("1. Add a student\n");
            printf("2. Print all students' information\n");
            printf("3. Search for a student by ID\n");
            printf("4. Modify a student's information by ID\n");
            printf("5. Calculate average score of each student\n");
            printf("6. Delete a student by ID\n");
            printf("7. Print students with average above 80\n");
            printf("8. Exit\n");
            
            printf("Enter your choice: ");
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    printAllStudents();
                    break;
                case 3:
                    char id[10];
                    printf("Enter the student ID to search: ");
                    scanf("%s", id);
                    searchStudentByID(id);
                    break;
                case 4:
                    printf("Enter the student ID to modify: ");
                    scanf("%s", id);
                    modifyStudentByID(id);
                    break;
                case 5:
                    for (int i = 0; i < numStudents; i++) {
                        printf("Average score of %s is %.2f\n", students[i].studentID, calculateAverage(students[i]));
                    }
                    break;
                case 6:
                    printf("Enter the student ID to delete: ");
                    scanf("%s", id);
                    deleteStudentByID(id);
                    break;
                case 7:
                    printStudentsWithAverageAbove80();
                    break;
                case 8:
                    printf("Exiting...\n");
                    break;
                default:
                    printf("Invalid choice! Please try again.\n");
            }
        } while (choice != 8);
        
        return 0;
    }
    
    void addStudent() {
        if (numStudents >= MAX_STUDENTS) {
            printf("Maximum number of students reached!\n");
            return;
        }
        
        printf("Enter student ID: ");
        scanf("%s", students[numStudents].studentID);
        
        for (int i = 0; i < 3; i++) {
            printf("Enter score %d: ", i + 1);
            scanf("%f", &students[numStudents].scores[i]);
        }
        
        numStudents++;
        printf("Student added successfully!\n");
    }
    
    void printAllStudents() {
        for (int i = 0; i < numStudents; i++) {
            printf("Student ID: %s\n", students[i].studentID);
            for (int j = 0; j < 3; j++) {
                printf("Score %d: %.2f\n", j + 1, students[i].scores[j]);
            }
            printf("\n");
        }
    }
    
    void searchStudentByID(char *id) {
        int found = 0;
        for (int i = 0; i < numStudents; i++) {
            if (strcmp(students[i].studentID, id) == 0) {
                printf("Found student:\n");
                printf("Student ID: %s\n", students[i].studentID);
                for (int j = 0; j < 3; j++) {
                    printf("Score %d: %.2f\n", j + 1, students[i].scores[j]);
                }
                found = 1;
                break;
            }
        }
        if (!found) {
            printf("Student not found!\n");
        }
    }
    
    void modifyStudentByID(char *id) {
        int found = 0;
        for (int i = 0; i < numStudents; i++) {
            if (strcmp(students[i].studentID, id) == 0) {
                printf("Enter new scores:\n");
                for (int j = 0; j < 3; j++) {
                    printf("Score %d: ", j + 1);
                    scanf("%f", &students[i].scores[j]);
                }
                printf("Student information updated successfully!\n");
                found = 1;
                break;
            }
        }
        if (!found) {
            printf("Student not found!\n");
        }
    }
    
    float calculateAverage(Student s) {
        float sum = 0;
        for (int i = 0; i < 3; i++) {
            sum += s.scores[i];
        }
        return sum / 3;
    }
    
    void deleteStudentByID(char *id) {
        int index = -1;
        for (int i = 0; i < numStudents; i++) {
            if (strcmp(students[i].studentID, id) == 0) {
                index = i;
                break;
            }
        }
        
        if (index != -1) {
            for (int i = index; i < numStudents - 1; i++) {
                students[i] = students[i + 1];
            }
            numStudents--;
            printf("Student deleted successfully!\n");
        } else {
            printf("Student not found!\n");
        }
    }
    
    void printStudentsWithAverageAbove80() {
        for (int i = 0; i < numStudents; i++) {
            if (calculateAverage(students[i]) > 80) {
                printf("Student ID: %s\n", students[i].studentID);
                for (int j = 0; j < 3; j++) {
                    printf("Score %d: %.2f\n", j + 1, students[i].scores[j]);
                }
                printf("\n");
            }
        }
    }
    

    这段代码定义了一个Student结构体,用于存储学生的学号和成绩。它还包含了几个函数,用于执行题目中要求的各种操作。例如,addStudent()用于添加学生信息,printAllStudents()用于打印所有学生的信息,而searchStudentByID()则根据学号搜索特定的学生信息。其他函数也相应地实现了题目的要求。这个程序还包括了一个主菜单,用户可以根据菜单选项进行不同的操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月15日