应用《C语言程序设计》课程的内容,编写一个完整的学生成绩管理系统程序,实现以下题目的要求: 1.学生信息包括学号、姓名、3 门考试成绩 3.统计所有学生的总分及平均分 4.统计所有课程的平均分 5.按平均分进行排序 6.输入一个学生学号输出其各科成绩及平均成绩

时间: 2024-03-03 08:53:33 浏览: 21
以下是一个简单的C语言程序,实现了学生成绩管理系统的基本要求: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT 100 // 最大学生数 #define MAX_NAME 20 // 最大姓名长度 #define MAX_ID 10 // 最大学号长度 typedef struct { char id[MAX_ID]; // 学号 char name[MAX_NAME]; // 姓名 int score[3]; // 3门考试成绩 int total; // 总分 float average; // 平均分 } Student; Student students[MAX_STUDENT]; // 学生数组 int count = 0; // 学生数目 // 计算学生总分及平均分 void calculate_score() { int i, j; for (i = 0; i < count; i++) { students[i].total = 0; for (j = 0; j < 3; j++) { students[i].total += students[i].score[j]; } students[i].average = (float) students[i].total / 3; } } // 计算课程平均分 float calculate_average(int course) { int i; float sum = 0; for (i = 0; i < count; i++) { sum += students[i].score[course]; } return sum / count; } // 按平均分排序 void sort_by_average() { int i, j; Student temp; for (i = 0; i < count - 1; i++) { for (j = 0; j < count - i - 1; j++) { if (students[j].average < students[j + 1].average) { temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } // 输入学生信息 void input_student() { if (count >= MAX_STUDENT) { printf("学生数已达到最大值\n"); return; } printf("请输入学生信息(学号 姓名 3门成绩):\n"); scanf("%s%s%d%d%d", students[count].id, students[count].name, &students[count].score[0], &students[count].score[1], &students[count].score[2]); count++; } // 输出学生信息 void output_student() { int i, j; printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总分\t平均分\n"); for (i = 0; i < count; i++) { printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].total, students[i].average); } } // 输出课程平均分 void output_average() { int i; printf("课程\t平均分\n"); for (i = 0; i < 3; i++) { printf("%d\t%.2f\n", i + 1, calculate_average(i)); } } // 按平均分排序并输出学生信息 void output_sort() { int i, j; sort_by_average(); printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总分\t平均分\n"); for (i = 0; i < count; i++) { printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].total, students[i].average); } } // 根据学号查找学生信息 void search_student() { char id[MAX_ID]; int i, j; printf("请输入要查找的学生学号:\n"); scanf("%s", id); for (i = 0; i < count; i++) { if (strcmp(students[i].id, id) == 0) { printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总分\t平均分\n"); printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].total, students[i].average); return; } } printf("未找到该学生\n"); } int main() { int choice; while (1) { printf("请选择操作:\n"); printf("1. 输入学生信息\n"); printf("2. 统计学生总分及平均分\n"); printf("3. 统计课程平均分\n"); printf("4. 按平均分排序并输出学生信息\n"); printf("5. 输入学生学号输出其各科成绩及平均成绩\n"); printf("0. 退出\n"); scanf("%d", &choice); switch (choice) { case 1: input_student(); break; case 2: calculate_score(); output_student(); break; case 3: output_average(); break; case 4: output_sort(); break; case 5: search_student(); break; case 0: exit(0); break; default: printf("无效操作\n"); break; } } return 0; } ``` 注意,上述代码仅实现了基本的学生成绩管理功能,还有许多细节需要完善,例如输入的学生信息格式、错误处理等等。

相关推荐

c语言设计课程设计内容 学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …

最新推荐

recommend-type

C语言编写的成绩分析系统文献综述个人写的范文

本人课程设计的题目为《成绩问题分析》,由于本课题是被国内外研究者广泛研究过的课题,所以本程序只是对本人大学所学内容的一个总结,并且作为证明对课程设计这门课程的掌握程度的了解,因此本文的叙述只是作为课程...
recommend-type

2107381120 王孟丽 实验2 (1).docx

2107381120 王孟丽 实验2 (1).docx
recommend-type

Java项目如何打成可以运行Jar包

Java项目如何打成可以运行Jar包
recommend-type

node-v12.22.8-headers.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

海信 LED32K360X3D(0000)BOM1 自动重启问题软件升级数据 务必确认机编一致 强制刷机 整机USB升级程序

MT5505机芯升级方法: 1、下载数据,压缩包解压,升级软件文件夹名字为Hisense_5505,文件夹下包含“机型名.pkg”以及version.txt 2、将文件夹Hisense_5505,整个文件夹拷贝至U盘根目录下 3、电视关机,插入U盘(USB3或者靠近高频头的USB口),重新启动电视机,电视机自动检测到升级软件之后并进行升级 4、在升级过程中屏幕有相关提示,升级完成后能自动开机。(建议是升级完成之后拔下U盘设备以免下次开机进行重复性升级) 注意: 1、(U盘要求使用FAT32格式,建议4G-8G的品牌U盘,刷机成功率会高) 2、升级到结束,大约需要8-30分钟,中途绝对不能断电 3、升级重启第一次进入系统,请等完全正常进入开机桌面之后,才能拨下U盘 4、如无法升级,将Hisense 5505文件夹内“机型名.pkg”的文件重命名为“upgrade.pkg”,此时插上U盘开机,电视就会默认为强制升级模式
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。