学生试卷分数统计C语言程序设计_第1页
学生试卷分数统计C语言程序设计_第2页
学生试卷分数统计C语言程序设计_第3页
学生试卷分数统计C语言程序设计_第4页
学生试卷分数统计C语言程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、广州航海学院课程(C语言)设计任务书设计人曾雨祥专业计应班级171学号36设计项目学生试卷分数统计指导教师张翚一、设计内容与要求1、设计内容学生试卷分数统计:1) 表单设计需与题设保持一致;2) 要求汉字界面,比较美观,提示信息准确汉化,所有功能可以反复使用。数据类型至少要用到函数、结构体和数组;*参考“C程序设计(第四版)补充材料和实验_谭浩强”文件中的相应案例(Pdf文档中208页)。2、设计要求1) 对系统进行功能模块分析、控制模块分析正确;2) 系统设计要能完成题目所要求的功能;3) 编程简练、可用,尽可能使系统的功能更加完善和全面;4) 说明书、流程图要清楚;5) 特别要求自己独立完

2、成。二、课程设计说明书的编写写出不少于1000字的课程设计说明书,除了在封面应有题目、班级、姓名、学号和课程设计日期、地点外,正文要有如下几个方面的内容:(1) 需求分析(2) 详细设计(3) 调试分析(4) 测试结果课程设计时间安排表 (第17周)内容课时数需求分析1详细设计1代码设计12调试分析2课程设计说明书2教研室意见教研室主任签名 年 月 日系部意见 教学主任签名 年 月 日注:1.任务书由指导教师填写后由教研室、系签署意见;2.任务书应在学生课程设计开始前下达给学生;3.任务书一式二份,设计人、指导教师各执一份。 C语言课程设计 报告系 (部) 信息与通信工程学院 专 业 班 级

3、计应171班 姓 名 学 号 曾雨祥201715010136 设计基地(实训室) 信息楼605实训室 设 计 项 目 学生试卷分析统计 设 计 日 期 设 计 成 绩 指 导 教 师 张 翚 学生试卷成绩分析系统一需求分析1适合人群 教师。2使用范围小学至大学,人数数量不大。二概要设计1. 主函数main():初始化各变量并调用各函数。2. 输入模块accept_data():输入学生个人成绩。3. 计算模块count():依据学生成绩进行计算需要的各种数值。 4. 输出模块show_data():输出计算的各种数值。 程序功能结构图如图所示:学生试卷分析系统主函数 输出模块计算模块输入模块三

4、详细设计本系统有一个主函数,3个功能模块,每个功能模块函数都是由主函数调用,分别说下:1主函数main()此函数初始化各变量并调用各函数。代码如下:int main() /平均分和标准差函数说明 int sum,max,min; /数据定义 double pass=0; int grade11=0; STUDENT stuSIZE; double aveSIZE,fSIZE; printf("nntttttt欢迎使用学生试卷管理系统!ann"); sum=accept_data(stu,grade); /输入数据(sum为总人数) count(&max,&m

5、in,&pass,ave,f,stu,sum);/计算期末考试成绩的及格率最高分、最低分 /以及平时、期末和总评成绩的平均分和标准差 show_data(stu,sum,grade,max,min,pass,ave,f); /输入所有学生的序号、平时成绩、期末成绩和总评成绩 /显示期末考试成绩的最高分、最低分以及平时、期末和总评成绩的平均分和标准差return 0;解析:主函数为程序之精华。主函数逐步调用模块来实现,步骤如图:因为所有功能模块都在主函数之后,所有需要再主函数中声明定义功能模块的函数。2.输入模块accept_data()输入模块代码如下:int accept_data(

6、STUDENT stu,int grade) int i=0,sum=0,temp,a1,a2; FLAG flag; printf("n 请输入计算总成绩时使用平时成绩与期末成绩的比例,用整数表示(百分比例 如:30 70):"); scanf("%d%d",&a1,&a2); /接收计算总评成绩的比例 while(i<SIZE) printf("n 请输入学号(输入-1可停止输入):"); scanf("%d",&stui.number); /输入学号 if (stui.numbe

7、r=-1) /序号时-1则跳出循环 sum=i; /sum记录的是输入的人数 break; printf("n 请输入学生的平时成绩和期末成绩(百分制分数):"); flag=True; while(flag=True) /重复读入两个成绩,读到正确的为止 scanf("%d%d",&stui.score0,&stui.score1); if(stui.score0<=100&& stui.score0>=0&& stui.score1<=100&& stui.score1

8、>=0) flag=False; /输入的两个成绩合理 else printf("n007 错误数据!请再次输入学生的平时成绩和期末成绩(百分制分数 输入格式如:98 99):"); /输入的两个成绩不合理 temp=(int)(1.0*a1/100*stui.score0+1.0*a2/100 * stui.score1); /计算总评成绩 stui.score2=temp; /总评成绩存入数组 temp=(stui.score1)/10; /计算分数段 if(temp=10) /分数段存入数组 grade10+; /100分存入数组元素grade10 else g

9、radetemp+1+; /9099分存入数组元素grade9 /8089分存入数组元素grade8 /7079分存入数组元素grade7,以此类推 i+; return sum; /返回人数 解析:主函数引用该模块后,输入成绩比例,利用for语句连续分别输入学生的学号,平时成绩和期末成绩,如果输入成绩大于100分或者小于0分,则需要重新输入,如果正确则break,跳出for语句。 开始计算总评成绩和各成绩分数段并存入结构体里。最后返回已输入成绩的学生个数到主函数。3.计算模块count()此函数计算各成绩的最高分,最低分,及格率,标准差,代码如下:void count(int * max,i

10、nt * min,double * pass,double ave,double f,STUDENT stu,int sum) int i,j,p_sum=0;int total3;double temp;*max=*min=stu0.score1; /设卷面成绩的最高分、最低分初值if(stu0.score1>=60) p_sum+;for(i=1;i<sum;i+) if(stui.score1)>*max) /若高于最高分,将其覆盖*max=stui.score1; if(stui.score1)<*min) /若低于最低分,将其覆盖 *min=stui.scor

11、e1; if(stui.scorei)>=60) p_sum+; /计算及格的人数*pass=(1.0*p_sum/sum)*100; /计算及格率for(i=0;i<=2;i+) /平时、期末、总评的初值设置为0totali=0;for(j=0;j<3;j+) /求平时、期末、总评3个总分 for(i=0;i<sum;i+) totalj=totalj+stui.scorej; for(j=0;j<3;j+) /求平时、期末、总评3个平均分 avej=totalj/sum; for(j=0;j<3;j+) /求平均、期末、总评标准差 fj=0; /标准差初

12、值设置为0 for(i=0;i<sum;i+) /计算标准差 temp=stui.scorej-avej; fj=fj+temp*temp; fj=sqrt(fabs(fj)/sum); 解析:此模块中,利用多个for语句来计算各个成绩的最高分、最低分、及格人数、总分,根据及格人数求出及格率,利用total数组存放总分来计算平均分,利用公式求得标准差。4.输出函数show_data()此模块输出计算好的三个成绩和各成绩段人数,代码如下:void show_data(STUDENT stu,int sum,int grade,int max,int min,double pass,doub

13、le ave,double f) int i,j; printf("nnn-nnn");printf("nttttt学号 平时成绩 期末考试 总评成绩n"); /输出各成绩for(i=0;i<sum;i+)printf("ttttt %4d ",stui.number);for(j=0;j<3;j+)printf("t%4d ",stui.scorej);printf("tn"); char str1320="tttt平时成绩平均分","tttt期末成绩

14、平均分","tttt总评成绩平均分" char str2320="t平时成绩标准差","t期末成绩标准差","t总评成绩标准差" printf("nnn-nnn"); printf("ntttt及格率=%6.2f%t最高分=%dt最低分=%dn",pass,max,min); /输出3次分别输出平时、期末、总评的平均分和标准差 for(j=0;j<3;j+) printf("n %s=%6.2f %s=%6.2fn",str1j,avej,

15、str2j,fj); printf("nnn-"); printf("nnnttttt期末成绩中的各分数段为:nn"); /输出各分数段 printf("ttttt60分以下:%d个nn",grade0+grade1+grade2+grade3+grade4+grade5+grade6); printf("ttttt60-69分段:%d个nn",grade7); printf("ttttt70-79分段:%d个nn",grade8); printf("ttttt80-89分段:%d个n

16、n",grade9); printf("ttttt90-99分段:%d个nn",grade10); printf("ttttt100分:%d个nn",grade11); 解析:此模块利用数组和for语句连续输出输入的数值以及经过计算模块的各种数值。5.总代码#include "stdio.h"#include "string.h"#include "conio.h"#include "math.h"#define SIZE 300typedef struct stu

17、dent /学生数据结构体声明 int number; /学号 int score3; /平时、期末和总评成绩 STUDENT;typedef enum boolen /枚举定义 False,True FLAG;int accept_data(STUDENT stu,int grade);/输入数据函数声明void count(int * max,int * min,double * pass,double ave,double f,STUDENT stu,int sum);void show_data(STUDENT stu,int sum,int grade,int max,int min

18、,double pass,double ave,double f);/输入所有学生的序号、平时成绩 /期末成绩和总评成绩函数说明 /显示期末考试成绩的及格率、最高分、最低分以及平时、期末和总评成绩的 /主函数 int main() /平均分和标准差函数说明 int sum,max,min; /数据定义 double pass=0; int grade11=0; STUDENT stuSIZE; double aveSIZE,fSIZE; printf("nntttttt欢迎使用学生试卷管理系统!ann"); sum=accept_data(stu,grade); /输入数据

19、(sum为总人数) count(&max,&min,&pass,ave,f,stu,sum);/计算期末考试成绩的及格率最高分、最低分 /以及平时、期末和总评成绩的平均分和标准差 show_data(stu,sum,grade,max,min,pass,ave,f); /输入所有学生的序号、平时成绩、期末成绩和总评成绩 /显示期末考试成绩的最高分、最低分以及平时、期末和总评成绩的平均分和标准差return 0;/输入模块int accept_data(STUDENT stu,int grade) int i=0,sum=0,temp,a1,a2; FLAG flag;

20、printf("n 请输入计算总成绩时使用平时成绩与期末成绩的比例,用整数表示(百分比例 如:30 70):"); scanf("%d%d",&a1,&a2); /接收计算总评成绩的比例 while(i<SIZE) printf("n 请输入学号(输入-1可停止输入):"); scanf("%d",&stui.number); /输入学号 if (stui.number=-1) /序号时-1则跳出循环 sum=i; /sum记录的是输入的人数 break; printf("n

21、 请输入学生的平时成绩和期末成绩(百分制分数):"); flag=True; while(flag=True) /重复读入两个成绩,读到正确的为止 scanf("%d%d",&stui.score0,&stui.score1); if(stui.score0<=100&& stui.score0>=0&& stui.score1<=100&& stui.score1>=0) flag=False; /输入的两个成绩合理 else printf("n007 错误数据!请

22、再次输入学生的平时成绩和期末成绩(百分制分数 输入格式如:98 99):"); /输入的两个成绩不合理 temp=(int)(1.0*a1/100*stui.score0+1.0*a2/100 * stui.score1); /计算总评成绩 stui.score2=temp; /总评成绩存入数组 temp=(stui.score1)/10; /计算分数段 if(temp=10) /分数段存入数组 grade10+; /100分存入数组元素grade10 else gradetemp+1+; /9099分存入数组元素grade9 /8089分存入数组元素grade8 /7079分存入数

23、组元素grade7,以此类推 i+; return sum; /返回人数 /计算模块void count(int * max,int * min,double * pass,double ave,double f,STUDENT stu,int sum) int i,j,p_sum=0;int total3;double temp;*max=*min=stu0.score1; /设卷面成绩的最高分、最低分初值if(stu0.score1>=60) p_sum+;for(i=1;i<sum;i+) if(stui.score1)>*max) /若高于最高分,将其覆盖*max=s

24、tui.score1; if(stui.score1)<*min) /若低于最低分,将其覆盖 *min=stui.score1; if(stui.scorei)>=60) p_sum+; /计算及格的人数*pass=(1.0*p_sum/sum)*100; /计算及格率for(i=0;i<=2;i+) /平时、期末、总评的初值设置为0totali=0;for(j=0;j<3;j+) /求平时、期末、总评3个总分 for(i=0;i<sum;i+) totalj=totalj+stui.scorej; for(j=0;j<3;j+) /求平时、期末、总评3个平

25、均分 avej=totalj/sum; for(j=0;j<3;j+) /求平均、期末、总评标准差 fj=0; /标准差初值设置为0 for(i=0;i<sum;i+) /计算标准差 temp=stui.scorej-avej; fj=fj+temp*temp; fj=sqrt(fabs(fj)/sum); /输出模块void show_data(STUDENT stu,int sum,int grade,int max,int min,double pass,double ave,double f) int i,j; printf("nnn-nnn");printf("nttttt学号 平时成绩 期末考试 总评成绩n"); /输出各成绩for(i=0;i<sum;i+)printf("ttttt %4d ",stui.number);for(j=0;j<3;j+)printf("t%4d ",stui.scorej);printf("tn"); cha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论