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 全局变量
│   │   ├── 定义
│   │   ├── 作用域
│   │   ├── 共享变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916982.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

响应“一机两用”政策 落实政务外网安全

在数字化时代&#xff0c;政务办公外网安全的重要性日益凸显&#xff0c;特别是在“一机两用”的背景下&#xff0c;即同一台终端既要处理政务内网的数据&#xff0c;又要访问互联网&#xff0c;这对网络安全提出了更高的要求。深信达SPN安全上网方案&#xff0c;即反向沙箱技术…

测试实项中的偶必现难测bug--互斥逻辑异常

问题: 今天线上出了一个很奇怪的问题,看现象和接口是因为数据问题导致app模块奔溃 初步排查数据恢复后还是出现了数据重复的问题,查看后台实际只有一条数据,但是显示在app却出现了两条一模一样的置顶数据 排查: 1、顺着这个逻辑,我们准备在预发复现这个场景,先是cop…

Burpsuite的安装使用说明——【渗透工具介绍与使用】

# 前记 **工欲善其事必先利其器&#xff0c;本系列先介绍一些常见的安全工具的安装与使用** 该文章介绍的是Burpsuite的安装使用说明 > &#x1f340; 作者简介 > 小菜鸡罢了&#xff0c;研究过漏洞、扫过端口、写过脚本&#xff0c;迷恋着CTF&#xff0c;脑袋里充满了各…

如何在 WordPress 中轻松强制所有用户退出登录

作为一名长期管理 WordPress 网站的站长&#xff0c;我深知维护网站安全性的重要性。尤其是在面对会员网站或付费内容平台时&#xff0c;确保所有用户的登录状态是最新的&#xff0c;是维持网站正常运营的关键之一。今天&#xff0c;我就分享一下如何通过简单的步骤&#xff0c…

SNN学习(2):深入了解SNN及LIF神经元的原理和运行过程

目录 一、STDP机制 1、STDP 的基本原理 权重调整的“时间差依赖性” 2、STDP 的数学模型 二、SNN的应用场景 三、从人工神经网络ANN到脉冲神经网络SNN 1、脉冲 2、稀疏性&#xff08;Sparsity&#xff09; 3、事件驱动处理&#xff08;静态抑制&#xff09; 四、脉冲…

运动汇 专业的比赛管理平台数据获取

在获取到运动汇的网站链接后&#xff0c;界面如图所示: 右键检查&#xff0c;我们会发现没有任何数据&#xff0c;只有当我们点开这些"第一单元"、"第二单元"等&#xff0c;数据才会加载出来&#xff1b; 由于我们只需要分析这一个网页并获取其中的数据&a…

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56 1. STM32F407 BootLoader 中的 Flash 擦除功能详解 在嵌入式系统中&#xff0c;BootLoader 的设计是非常关键的部分&#xff0c;它负责引导主程序的启动、升级以及安全管理。而在 STM32F407 等 MCU 上实现 BootLoader&…

rust高级特征

文章目录 不安全的rust解引用裸指针裸指针与引用和智能指针的区别裸指针使用解引用运算符 *&#xff0c;这需要一个 unsafe 块调用不安全函数或方法在不安全的代码之上构建一个安全的抽象层 使用 extern 函数调用外部代码rust调用C语言函数rust接口被C语言程序调用 访问或修改可…

45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】

兼容性注意&#xff1a; Vite 需要 Node.js 版本 18 或 20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目&#xf…

Linux(CentOS 7) yum一键安装mysql8

1、通过yum安装 &#xff08;1&#xff09;下载mysql 在Linux找个地方输入以下命令 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm &#xff08;2&#xff09;安装mysql yum 仓库配置文件 [rootVM-8-15-centos ~]# sudo rpm -Uvh mysql80-c…

第5章-总体设计 5.2 需求转化为规格

5.2 需求转化为规格 1.框式产品&#xff08;1&#xff09;业务规格&#xff0c;这需要满足客户期望、有市场竞争力、颗粒度最合理。&#xff08;2&#xff09;整框规格&#xff0c;包括电源、功耗、散热、可靠性的规格&#xff0c;要保证整款满足环境应用要求。&#xff08;3&a…

Android setTheme设置透明主题无效

【问题现象】 1、首先&#xff0c;你在AndroidManifest.xml中声明一个activity&#xff0c;不给application或者activity设置android:theme, 例如这样&#xff1a; <applicationandroid:allowBackup"true"android:icon"mipmap/ic_launcher"android:lab…

软考教材重点内容 信息安全工程师 第 3 章 密码学基本理论

&#xff08;本章相对老版本极大的简化&#xff0c;所有与算法相关的计算全部删除&#xff0c;因此考试需要了解各个常 用算法的基本参数以及考试中可能存在的古典密码算法的计算&#xff0c;典型的例子是 2021 和 2022 年分别考了 DES 算法中的 S 盒计算&#xff0c;RSA 中的已…

Jmeter基础篇(24)Jmeter目录下有哪些文件夹是可以删除,且不影响使用的呢?

一、前言 Jmeter使我们日常做性能测试最常用的工具之一啦&#xff01;但是我们在和其他同学协同工作的时候&#xff0c;偶尔也会遇到一些问题&#xff0c;例如我想要给别人发送一个Jmeter工具包&#xff0c;但这个文件包往往会很大&#xff0c;比较浪费流量和空间&#xff0c;…

【电子元器件】磁珠常识与选型

1. 什么是磁珠 磁珠是一种电感型EMI静噪滤波器&#xff0c;实物和电感很像&#xff0c;现在用的最多的是铁氧体磁珠。 片状铁氧体磁珠 磁珠的单位是欧姆&#xff0c;根据型号的不同&#xff0c;可以抑制几MHz&#xff5e;几GHz的噪声&#xff0c;经常被用在信号线和电源线上…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中&#xff0c;当你的查询包含多个LEFT JOIN和WHERE条件时&#xff0c;合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议&#xff1a; 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询&#xff0c;了解查询的执行计划&#xff0c;识别出连…

【全面系统性介绍】虚拟机VM中CentOS 7 安装和网络配置指南

一、CentOS 7下载源 华为源&#xff1a;https://mirrors.huaweicloud.com/centos/7/isos/x86_64/ 阿里云源&#xff1a;centos-vault-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 百度网盘源&#xff1a;https://pan.baidu.com/s/1MjFPWS2P2pIRMLA2ioDlVg?pwdfudi &…

Linux下MySQL的简单使用

Linux下MySQL的简单使用 导语MySQL安装与配置MySQL安装密码设置 MySQL管理命令myisamchkmysql其他 常见操作 C语言访问MYSQL连接例程错误处理使用SQL 总结参考文献 导语 这一章是MySQL的使用&#xff0c;一些常用的MySQL语句属于本科阶段内容&#xff0c;然后是C语言和MySQl之…