C语言课外编程实验报告1[1].doc

上传人:asd****56 文档编号:70332419 上传时间:2023-01-19 格式:DOC 页数:19 大小:166.50KB
返回 下载 相关 举报
C语言课外编程实验报告1[1].doc_第1页
第1页 / 共19页
C语言课外编程实验报告1[1].doc_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《C语言课外编程实验报告1[1].doc》由会员分享,可在线阅读,更多相关《C语言课外编程实验报告1[1].doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 C语言课外编程实验报告一. 实验目的编写程序实现以下功能学生成绩管理系统一班有10名学生,一学期有5门课程,编写程序实现如下功能:(1)录入每名学生的各科成绩(2)求出每名学生的平均成绩和总分(3)求每门课程的平均分、及格率、最高成绩和最低成绩(4)输出总成绩前5名的学生学号、各科成绩和总分(5)输出各科补考学生的学号和成绩要求:(1)编制一个主函数来实现功能菜单的显示和各功能函数的调用;(2)程序设计各步骤的相关文档齐全、清晰。(3)在所有数据输入处理之前提供必要的提示二.实验相关数据实验所用到的主要算法有:三种基本结构,数组,自定义函数,指针。N,M为本次实验经常用到的两个常数10和5,

2、分别对应十个学生和五门课。数组a用于存储所有学生所有课的成绩;数组b用于存储每个学生的姓名;数组c用于存储每个学生的学号;数组d用于存储每个学生的总分;函数input_score用于输入学生成绩;函数student_average用于计算每个学生的成绩平均值;函数student_total用于计算每个学生的总分;函数course_average用于计算每门课的平均分;函数course_jigelv用于计算每门课的及格率;函数course_zuigao用于计算每门课的最高成绩;函数course_zuidi用于计算每门课的最低成绩;函数sort用于输出前五名的信息;函数bukao用于输出补考信息;

3、主函数实现了对所有自定义函数功能的调用。三.实验内容主函数流程图如下:相关代码如下:int main()int i,j; input_score(); for(i=0;iN;i+) for(j=0;jM;j+) di+=aij; printf(n); printf(以下是每个学生的平均分:n); student_average(a); printf(n); printf(以下是每个学生的总分:n); student_total(a); printf(n); printf(以下是每门课的平均分:n); course_average(a); printf(n); printf(以下是每门课的及格率

4、:n); course_jigelv(a); printf(n); printf(以下是每门课的最高成绩:n); course_zuigao(a); printf(n); printf(以下是每门课的最低成绩:n); course_zuidi(a); printf(n); printf(以下是前五名的情况:n); sort(d); printf(n); printf(以下是补考情况:n); bukao(a); printf(n); return 0;以下实施严格步骤的分析:(1) 对于姓名,学号的输入,只要使用单层循环输入数组b和c的相应项再输出就可以了。而对于成绩的输入,必须使用双层循环输入

5、对应于某个学生的某门课的成绩,然后再输出。相关流程图如下:相关代码如下:void input_score()int i,j; for(i=0;iN;i+) printf(输入第%d个学生的姓名:,i+1); scanf(%s,&bi); printf(输入第%d个学生的学号:,i+1); scanf(%d,&ci); for(j=0;jM;j+) printf(输入该学生的第%d门成绩:,j+1); scanf(%f,&aij);注:i,j为循环变量。(2) 单个学生成绩的处理,平均分和总分所对应的自定义函数设计思路基本一致,先通过双层循环找出对应于数组a的元素,再通过一个变量s实现累加。需要

6、注意的是:累加变量s每次循环后要清零;输出时,平均值函数输出的是s/5.0,总分函数输出的则是s。相关流程图如下:相关代码如下:void student_average() int i,j; float s; s = 0; for(i=0;iN;i+) for(j=0;jM;j+) s+=aij; printf(第%d个同学的平均分是%.2fn,i+1,s/5.0); s = 0; void student_total() int i,j; float s; s = 0; for(i=0;iN;i+) for(j=0;jM;j+) s+=aij; printf(第%d个同学的总分是%.2fn,

7、i+1,s); s = 0; (3) 每门课成绩的处理,平均分函数与求每个学生平均分的函数在思路上完全一致,但有一点很重要的不同是i,j所对应的循环条件改变,而且在累加时,学生平均分函数加的是aij,而课程平均分函数加的是aji,这是二者最重要的不同之处。相关代码如下:void course_average() int i,j; float s; s = 0; for(i=0;iM;i+) for(j=0;jN;j+) s+=aji; printf(第%d门课的平均分是%.2fn,i+1,s/10.0); s = 0; 及格率函数较为简单,只需通过双层循环找出符合要求的个体,用变量p记录元素个

8、数,再除以总数就求出了及格率(用变量q表示)。需要注意的是在循环末尾p和q都要清零。相关流程图如下:相关代码如下:void course_jigelv() int i,j; float p,s,q; s = 10; p = 0; for(i=0;iM;i+) for(j=0;j= 60) p+; q = p/s; printf(第%d门课的及格率是%.2fn,i+1,q); p = 0; q = 0; 最高成绩和最低成绩函数只要在双层循环中对相邻元素进行比较,求出所需要的最值,再输出即可。相关流程图如下:相关代码如下:void course_zuigao() int i,j; float s;

9、 for(i=0;iM;i+) s = a0i; for(j=0;j s) s = aji; printf(第%d门课的最高成绩是%.2fn,i+1,s); void course_zuidi() int i,j; float s; for(i=0;iM;i+) s = a0i; for(j=0;jN;j+) if (aji s) s = aji; printf(第%d门课的最低成绩是%.2fn,i+1,s); (4) 要求前五名的具体情况,首先要找出数组中对应的元素。因此,一个关键问题就是如何在不打乱原数组元素的情况下找出所需的元素。解决办法是,通过原数组的比较,找出所需元素对应的下标,在输

10、出时只要输出这些下标对应的元素即可。而在求出下标之前,需要先对总分数组d进行赋值。相关流程图如下:相关代码如下:void sort()int i,m1,m2,m3,m4,m5; for(i=0;iN;i+) if(didi+1)m1=i+1; for(i=0;iN;i+) if(didi+1)if(i+1!=m1)m2=i+1; for(i=0;iN;i+) if(didi+1)if(i+1!=m1)if(i+1!=m2)m3=i+1; for(i=0;iN;i+) if(didi+1)if(i+1!=m1)if(i+1!=m2)if(i+1!=m3)m4=i+1; for(i=0;iN;i+

11、) if(didi+1)if(i+1!=m1)if(i+1!=m2)if(i+1!=m3)if(i+1!=m4)m5=i+1; printf(第一名的学号是:%dn第一门成绩是:%.2fn第二门成绩是:%.2fn第三门成绩是:%.2fn第四门成绩是:%.2fn第五门成绩是:%.2fn总分是:%.2fn,cm1,am10,am11,am12,am13,am14,dm1); printf(n); printf(第二名的学号是:%dn第一门成绩是:%.2fn第二门成绩是:%.2fn第三门成绩是:%.2fn第四门成绩是:%.2fn第五门成绩是:%.2fn总分是:%.2fn,cm2,am20,am21,

12、am22,am23,am24,dm2); printf(n); printf(第三名的学号是:%dn第一门成绩是:%.2fn第二门成绩是:%.2fn第三门成绩是:%.2fn第四门成绩是:%.2fn第五门成绩是:%.2fn总分是:%.2fn,cm3,am30,am31,am32,am33,am34,dm3); printf(n); printf(第四名的学号是:%dn第一门成绩是:%.2fn第二门成绩是:%.2fn第三门成绩是:%.2fn第四门成绩是:%.2fn第五门成绩是:%.2fn总分是:%.2fn,cm4,am40,am41,am42,am43,am44,dm4); printf(n);

13、printf(第五名的学号是:%dn第一门成绩是:%.2fn第二门成绩是:%.2fn第三门成绩是:%.2fn第四门成绩是:%.2fn第五门成绩是:%.2fn总分是:%.2fn,cm5,am50,am51,am52,am53,am54,dm5);(5) 补考函数也很简单,通过双层循环找出符合要求的元素,输出对应的信息即可。相关流程图如下:相关代码如下:void bukao()int i,j; for(i=0;iN;i+) for(j=0;jM;j+) if(aij60) printf(学号为%d的学生的第%d门成绩是:%.2f,需要补考.n,ci,j+1,aij); 经过调试,以上代码能够顺利运行并实现相对应的功能。四.实验体会通过本次程序设计,我加深了对课堂知识点的理解和体会,尤其是循环结构和自定义函数。这让我对C语言有了一个更加完整和清晰的认识,有利于我今后对于编程语言的学习和应用。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁