c语言编写一个程序,存储学生的学号,姓名,语文数学英语成绩,并统计各科成绩的平均值,优秀率,及格率,以及成绩排名

时间: 2024-05-15 07:17:56 浏览: 17
好的,关于您的问题,我可以为您提供一份示例代码,但是需要注意的是,程序的编写需要根据具体需求进行调整和优化。以下是示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 // 最大学生数 #define MAX_NAME_LEN 20 // 最大姓名长度 #define SUBJECT_NUM 3 // 学科数目 // 学生结构体 struct student { char id[10]; // 学号 char name[MAX_NAME_LEN]; // 姓名 float score[SUBJECT_NUM]; // 成绩 float total; // 总分 int rank; // 排名 }; // 统计数据结构体 struct stats { float avg[SUBJECT_NUM]; // 平均分 float excellent_rate; // 优秀率 float pass_rate; // 及格率 }; // 声明函数 void init_students(struct student students[]); void input_scores(struct student students[], int num); void calc_total(struct student students[], int num); void sort_by_score(struct student students[], int num); void calc_stats(struct student students[], int num, struct stats *stats); void print_report(struct student students[], int num, struct stats stats); int main() { struct student students[MAX_STUDENT_NUM]; struct stats stats; int num; // 初始化学生信息 init_students(students); // 输入学生成绩 printf("请输入学生数目:"); scanf("%d", &num); input_scores(students, num); // 计算总分并按成绩排序 calc_total(students, num); sort_by_score(students, num); // 计算统计数据 calc_stats(students, num, &stats); // 打印报告 print_report(students, num, stats); return 0; } // 初始化学生信息 void init_students(struct student students[]) { for (int i = 0; i < MAX_STUDENT_NUM; i++) { students[i].score[0] = students[i].score[1] = students[i].score[2] = 0; } } // 输入学生成绩 void input_scores(struct student students[], int num) { for (int i = 0; i < num; i++) { printf("请输入第%d位学生的学号、姓名和各科成绩:", i+1); scanf("%s%s%f%f%f", students[i].id, students[i].name, &students[i].score[0], &students[i].score[1], &students[i].score[2]); } } // 计算总分 void calc_total(struct student students[], int num) { for (int i = 0; i < num; i++) { students[i].total = students[i].score[0] + students[i].score[1] + students[i].score[2]; } } // 按成绩排序 void sort_by_score(struct student students[], int num) { for (int i = 0; i < num-1; i++) { for (int j = 0; j < num-i-1; j++) { if (students[j].total < students[j+1].total) { struct student tmp = students[j]; students[j] = students[j+1]; students[j+1] = tmp; } } } // 计算排名 for (int i = 0; i < num; i++) { students[i].rank = i+1; } } // 计算统计数据 void calc_stats(struct student students[], int num, struct stats *stats) { float sum[SUBJECT_NUM] = {0}; int excellent_num = 0, pass_num = 0; // 计算每个科目的总分 for (int i = 0; i < num; i++) { sum[0] += students[i].score[0]; sum[1] += students[i].score[1]; sum[2] += students[i].score[2]; if (students[i].score[0] >= 90 && students[i].score[1] >= 90 && students[i].score[2] >= 90) { excellent_num++; } if (students[i].score[0] >= 60 && students[i].score[1] >= 60 && students[i].score[2] >= 60) { pass_num++; } } // 计算平均分和及格率、优秀率 for (int i = 0; i < SUBJECT_NUM; i++) { stats->avg[i] = sum[i] / num; } stats->excellent_rate = (float)excellent_num / num * 100; stats->pass_rate = (float)pass_num / num * 100; } // 打印成绩报告 void print_report(struct student students[], int num, struct stats stats) { printf("\n\n学生成绩报告\n"); printf("----------------------------------------------------\n"); printf("学号\t\t姓名\t\t语文\t数学\t英语\t总分\t排名\n"); printf("----------------------------------------------------\n"); for (int i = 0; i < num; i++) { printf("%s\t%s\t\t%.2f\t%.2f\t%.2f\t%.2f\t%d\n", students[i].id, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].total, students[i].rank); } printf("----------------------------------------------------\n"); printf("平均分\t\t\t%.2f\t%.2f\t%.2f\n", stats.avg[0], stats.avg[1], stats.avg[2]); printf("及格率\t\t\t%.2f%%\n", stats.pass_rate); printf("优秀率\t\t\t%.2f%%\n", stats.excellent_rate); } ``` 在这个程序中,我们使用了两个结构体:`student` 和 `stats`。其中,`student` 结构体包含每个学生的学号、姓名、三科成绩、总分和排名等信息,`stats` 结构体用于存储统计数据,包括每个科目的平均分、全局的及格率和优秀率。程序的主要流程可以分为以下几步: 1. 初始化学生信息。 2. 输入学生成绩,包括学号、姓名和三科成绩。 3. 计算每个学生的总分,并按总分排序,同时计算每个学生的排名。 4. 计算统计数据,包括每个科目的平均分、全局的及格率和优秀率。 5. 打印成绩报告,包括每个学生的详细成绩和排名,以及全局的统计数据。 上述代码只是给出了一个示例,实际的应用中需要根据具体需求进行调整和优化。希望对您有所帮助!

相关推荐

最新推荐

recommend-type

c语言作业——学生成绩统计.docx

整个程序功能 (1)学生基本信息(学号、姓名、…….)录入; (2)学生成绩录入; (3)统计学生成绩分布情况(每个分数段人数);...(6)统计不同生源地学生的平均成绩,按平均成绩排序,并输出结果。
recommend-type

C语言程序设计实现学生成绩记录簿

通过编写c语言《学生成绩记录簿系统》让我知道所学的编程语言是需要多练多编写代码锻炼出来的。 1)C语言课程设计的主要目的是培养学生综合运用C语言程序设计课程所学到的知识,编写C程序解决实际问题的能力,以及...
recommend-type

基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5808.0)

资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5808.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5808.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)
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

确保MATLAB回归分析模型的可靠性:诊断与评估的全面指南

![确保MATLAB回归分析模型的可靠性:诊断与评估的全面指南](https://img-blog.csdnimg.cn/img_convert/4b823f2c5b14c1129df0b0031a02ba9b.png) # 1. 回归分析模型的基础** **1.1 回归分析的基本原理** 回归分析是一种统计建模技术,用于确定一个或多个自变量与一个因变量之间的关系。其基本原理是拟合一条曲线或超平面,以最小化因变量与自变量之间的误差平方和。 **1.2 线性回归和非线性回归** 线性回归是一种回归分析模型,其中因变量与自变量之间的关系是线性的。非线性回归模型则用于拟合因变量与自变量之间非
recommend-type

引发C++软件异常的常见原因

1. 内存错误:内存溢出、野指针、内存泄漏等; 2. 数组越界:程序访问了超出数组边界的元素; 3. 逻辑错误:程序设计错误或算法错误; 4. 文件读写错误:文件不存在或无法打开、读写权限不足等; 5. 系统调用错误:系统调用返回异常或调用参数错误; 6. 硬件故障:例如硬盘损坏、内存损坏等; 7. 网络异常:网络连接中断、网络传输中断、网络超时等; 8. 程序异常终止:例如由于未知原因导致程序崩溃等。
recommend-type

JSBSim Reference Manual

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

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

打造高性能MATLAB回归分析模型:特征工程的艺术

![matlab回归分析](http://blog.fens.me/wp-content/uploads/2016/07/m01.png) # 1. 回归分析模型概述 回归分析是一种预测建模技术,用于建立自变量和因变量之间的关系。在回归模型中,因变量是我们要预测的目标变量,而自变量是影响因变量的输入变量。 回归分析模型的目的是找到一个数学方程,该方程可以准确地预测因变量的值,给定自变量的值。该方程通常表示为: ``` y = b0 + b1x1 + b2x2 + ... + bnxn ``` 其中: * y 是因变量 * x1、x2、...、xn 是自变量 * b0、b1、...、b