11.15作业

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

#define MAX_STUDENTS 20
#define MAX_NAME_LENGTH 20

void printMenu() {
    printf("\t\t1.录入学生姓名和成绩\n");
    printf("\t\t2.展示学生信息\n");
    printf("\t\t3.查看最高分和最低分学生的信息\n");
    printf("\t\t4.输入一个学生的姓名,得到成绩\n");
    printf("\t\t5.将所有学生成绩按照降序进行排序\n");
    printf("\t\t6.输入一个学生的姓名,更改成绩\n");
    printf("\t\t7.添加一个学生成绩到最后\n");
    printf("\t\t8.输入一个学生姓名,将该学生信息删除\n");
    printf("\t\t9.求班学生总成绩和平均分\n");
    printf("\t\t10.给出一个成绩的范围,将成绩在该范围的学生信息输出\n");
    printf("\t\t0.退出\n");
}

void registerAndLogin() {
    char regest_usr[20] = "";
    char regest_pwd[20] = "";
    int menu1 = 0;
    int flag = 0;

    while (1) {
        printf("\t\t===1.注册\n");
        printf("\t\t===2.登录\n");
        printf("请输入选项:");
        scanf("%d", &menu1);

        if (menu1 == 1) {
            printf("请输入注册的账号:");
            scanf("%19s", regest_usr);
            printf("请输入注册的密码:");
            scanf("%19s", regest_pwd);
            printf("注册成功\n");
        } else if (menu1 == 2) {
            char usrName[20] = "";
            char pwd[20] = "";
            printf("请输入登录账号:");
            scanf("%19s", usrName);
            printf("请输入登录密码:");
            scanf("%19s", pwd);
            if (strcmp(usrName, regest_usr) == 0 && strcmp(pwd, regest_pwd) == 0) {
                printf("登录成功\n");
                flag = 1;
            } else {
                printf("登录失败\n");
            }
        } else if (menu1 == 0) {
            exit(0);
        } else {
            printf("您输入的功能有误,请重新输入\n");
        }
        if (flag == 1) {
            break;
        }
    }
}

void addStudent(char arr[][MAX_NAME_LENGTH], int brr[], int *studentCount) {
    printf("请输入学生的个数:");
    scanf("%d", studentCount);
    for (int i = 0; i < *studentCount; i++) {
        printf("请输入第%d个学生的姓名和成绩:", i + 1);
        scanf("%19s %d", arr[i], &brr[i]);
    }
}

void displayStudents(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount) {
    printf("学生信息如下:\n");
    for (int i = 0; i < studentCount; i++) {
        printf("%s\t%d\n", arr[i], brr[i]);
    }
}

void findMaxMinScore(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount) {
    int maxIndex = 0, minIndex = 0;
    int maxScore = brr[0], minScore = brr[0];
    for (int i = 1; i < studentCount; i++) {
        if (brr[i] > maxScore) {
            maxScore = brr[i];
            maxIndex = i;
        }
        if (brr[i] < minScore) {
            minScore = brr[i];
            minIndex = i;
        }
    }
    printf("最高分是%s,成绩%d\n", arr[maxIndex], maxScore);
    printf("最低分是%s,成绩%d\n", arr[minIndex], minScore);
}

void findStudentScore(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount) {
    char name[MAX_NAME_LENGTH];
    printf("请输入学生的姓名:");
    scanf("%19s", name);
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(arr[i], name) == 0) {
            printf("%s的成绩是%d\n", arr[i], brr[i]);
            return;
        }
    }
    printf("未找到学生%s\n", name);
}

void sortStudentsByScore(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount) {
    for (int i = 0; i < studentCount - 1; i++) {
        for (int j = 0; j < studentCount - 1 - i; j++) {
            if (brr[j] < brr[j + 1]) {
                int temp = brr[j];
                brr[j] = brr[j + 1];
                brr[j + 1] = temp;
                char tempName[MAX_NAME_LENGTH];
                strcpy(tempName, arr[j]);
                strcpy(arr[j], arr[j + 1]);
                strcpy(arr[j + 1], tempName);
            }
        }
    }
    printf("学生成绩降序排序完成:\n");
    for (int i = 0; i < studentCount; i++) {
        printf("%s\t%d\n", arr[i], brr[i]);
    }
}

void updateStudentScore(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount) {
    char name[MAX_NAME_LENGTH];
    printf("请输入要更改成绩的学生姓名:");
    scanf("%19s", name);
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(arr[i], name) == 0) {
            printf("请输入新成绩:");
            scanf("%d", &brr[i]);
            printf("%s的成绩已更新为%d\n", arr[i], brr[i]);
            return;
        }
    }
    printf("未找到学生%s\n", name);
}

void addStudentAtEnd(char arr[][MAX_NAME_LENGTH], int brr[], int *studentCount) {
    if (*studentCount >= MAX_STUDENTS) {
        printf("学生数量已达上限。\n");
    } else {
        printf("请输入新学生的姓名和成绩:");
        scanf("%19s %d", arr[*studentCount], &brr[*studentCount]);
        (*studentCount)++;
        printf("学生%s已添加。\n", arr[*studentCount - 1]);
    }
}

void deleteStudent(char arr[][MAX_NAME_LENGTH], int brr[], int *studentCount) {
    char name[MAX_NAME_LENGTH];
    printf("请输入要删除的学生姓名:");
    scanf("%19s", name);
    for (int i = 0; i < *studentCount; i++) {
        if (strcmp(arr[i], name) == 0) {
            for (int j = i; j < *studentCount - 1; j++) {
                strcpy(arr[j], arr[j + 1]);
                brr[j] = brr[j + 1];
            }
            (*studentCount)--;
            printf("学生%s已删除。\n", name);
            return;
        }
    }
    printf("未找到学生%s\n", name);
}

void calculateTotalAndAverage(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount) {
    int total = 0;
    for (int i = 0; i < studentCount; i++) {
        total += brr[i];
    }
    printf("班级总成绩为%d,平均分为%.2f\n", total, (float)total / studentCount);
}

void findStudentsInRange(char arr[][MAX_NAME_LENGTH], int brr[], int studentCount, int minScore, int maxScore) {
    int count = 0;
    printf("成绩在%d到%d之间的学生信息:\n", minScore, maxScore);
    for (int i = 0; i < studentCount; i++) {
        if (brr[i] >= minScore && brr[i] <= maxScore) {
            printf("%s\t%d\n", arr[i], brr[i]);
            count++;
        }
    }
    if (count == 0) {
        printf("没有学生的成绩在这个范围内。\n");
    }
}

int main() {
    char arr[MAX_STUDENTS][MAX_NAME_LENGTH];
    int brr[MAX_STUDENTS];
    int studentCount = 0;
    registerAndLogin();

    while (1) {
        printMenu();
        int choice;
	    scanf("%d", &choice);
    switch (choice) {
        case 1:
            addStudent(arr, brr, &studentCount);
            break;
        case 2:
            displayStudents(arr, brr, studentCount);
            break;
        case 3:
            findMaxMinScore(arr, brr, studentCount);
            break;
        case 4:
            findStudentScore(arr, brr, studentCount);
            break;
        case 5:
            sortStudentsByScore(arr, brr, studentCount);
            break;
        case 6:
            updateStudentScore(arr, brr, studentCount);
            break;
        case 7:
            addStudentAtEnd(arr, brr, &studentCount);
            break;
        case 8:
            deleteStudent(arr, brr, &studentCount);
            break;
        case 9:
            calculateTotalAndAverage(arr, brr, studentCount);
            break;
        case 10: {
            int minScore, maxScore;
            printf("请输入成绩范围(最小和最大成绩):");
            scanf("%d %d", &minScore, &maxScore);
            findStudentsInRange(arr, brr, studentCount, minScore, maxScore);
            break;
        }
        case 0:
            return 0;
        default:
            printf("请重新输入\n");
    }
}

return 0;

C语言函数

├── 一、函数的引入

│ ├── 1.1 引入目的

│ │ ├── 避免代码冗余

│ │ ├── 封装特定功能

│ ├── 1.2 函数的好处

│ │ ├── 提高代码可读性

│ │ ├── 实现功能复用

│ │ ├── 便于代码维护

│ ├── 1.3 函数的分类

│ │ ├── 库函数 vs 用户自定义函数

│ │ ├── 有参函数 vs 无参函数

│ │ ├── 有返回值函数 vs 无返回值函数

│ ├── 1.4 函数的定义

│ │ ├── 函数头三要素

│ │ ├── 返回值类型

│ │ ├── 函数名

│ │ ├── 形参列表

├── 二、函数的定义分类

│ ├── 2.1 无参无返回值函数

│ │ ├── 定义格式

│ │ ├── 调用格式

│ ├── 2.2 有参无返回值函数

│ │ ├── 定义格式

│ │ ├── 调用格式

│ ├── 2.3 无参有返回值函数

│ │ ├── 定义格式

│ │ ├── 调用格式

│ │ ├── return 语句

│ ├── 2.4 有参有返回值函数

│ │ ├── 定义格式

│ │ ├── 调用格式

│ │ ├── return 语句

├── 三、全局变量与局部变量

│ ├── 3.1 局部变量

│ │ ├── 定义

│ │ ├── 作用域

│ │ ├── 同名变量处理

│ ├── 3.2 全局变量

│ │ ├── 定义

│ │ ├── 作用域

│ │ ├── 共享变量

相关推荐
XiaoLeisj4 分钟前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Hello.Reader5 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默16 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Jasmine_llq23 分钟前
《 火星人 》
算法·青少年编程·c#
Code哈哈笑25 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
程序猿进阶29 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_4336184431 分钟前
shell 编程(二)
开发语言·bash·shell
闻缺陷则喜何志丹34 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
charlie1145141911 小时前
C++ STL CookBook
开发语言·c++·stl·c++20