C语言课程设计实验报告4340106.docx
- 文档编号:28675456
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:29
- 大小:249.09KB
C语言课程设计实验报告4340106.docx
《C语言课程设计实验报告4340106.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告4340106.docx(29页珍藏版)》请在冰豆网上搜索。
C语言课程设计实验报告4340106
《C语言课程设计》
课程设计报告
专业:
网络工程
班级:
网络10601
姓名:
缪军
指导教师:
汪北阳余法红
二00八年元月十五日
目录
系统摘要…………………………………………3
系统设计…………………………………………4
系统实现…………………………………………7
系统使用说明…………………………………………11
测试数据…………………………………………15
结论…………………………………………18
附录…………………………………………19
(一)
系统摘要
1.功能要求
在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生5门课的加权平均分(保留1位小数,4舍5入),并按平均分排列名次,平均分相同则名次并列。
然后显示菜单,利用菜单调用每个函数,完成如下功能:
1)用C语言创建一个数据文件,文件名为:
“MC0116”。
用来存放班级排名后的成绩,要求按以下形式存放。
名次
学号
姓名
英语
C语言
离散数学
线形代数
大学物理
密码学
平均成绩
1
01
缪军
96
95
94
93
95
95
94.7
3
02
陈军
90
84
91
78
92
68
85.1
16
03
曹军
69
90
81
86
82
64
79.1
9
04
胡均
92
87
89
58
92
71
83.3
18
05
武军
57
76
81
92
83
76
77.1
14
06
陶均
84
69
94
72
77
83
80.7
8
07
喻均
91
91
77
74
66
91
81.4
11
08
周均
93
82
78
75
64
93
80.4
19
09
吴军
94
76
75
74
84
59
77.8
6
10
张俊
82
94
84
84
87
67
83.7
10
11
王俊
86
92
79
82
89
61
82.3
22
12
李军
74
72
92
94
54
64
75.4
5
13
赵俊
76
78
93
93
79
82
83.6
15
14
郑君
93
73
81
85
74
73
80.0
20
15
钱均
67
81
82
67
76
79
75.8
24
16
欧均
81
84
75
61
59
84
74.2
13
17
汤俊
87
89
79
87
67
72
80.2
4
18
廖均
79
87
92
89
62
94
83.5
21
19
扬峻
77
64
84
51
94
81
76.3
2
20
孙俊
83
94
81
94
82
86
86.1
23
21
冯均
86
58
64
91
84
67
74.2
25
22
周君
93
76
62
57
89
62
73.9
7
23
曾俊
92
73
63
82
92
91
81.0
12
24
董均
59
94
84
84
91
72
81.0
17
25
高军
91
82
59
84
66
84
76.3
2)分别统计全班每门课的平均分和标准差,并计算个分数段的学生人数;
课程标准差的计算公式为:
Y=s^2=1/n[(x1-m)^2+(x2-m)^2+...+(xn-m)^2]
3)用C语言创建一个数据文件,文件名为:
“KC0116”。
将文件中存放的数据以如下形式存放
编号
课程名称
平均分
标准差
优秀
良好
中等
及格
不及格
1
英语
82.9
21.8
10
7
4
2
2
2
C语言
81.6
20.0
7
8
7
2
1
3
离散数学
80.6
20.3
6
9
6
3
1
4
线性代数
79.5
25.1
6
9
5
2
3
5
大学物理
79.2
24.3
6
8
4
5
2
6
密码学
76.8
22.5
5
6
6
7
1
4)打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:
“cj0116”。
成绩条格式自定。
5)屏幕上显示所有存在不及格的课程的学生的名单(含学号、不及格的课程名称、课程的学分及成绩)。
6)屏幕上显示优等生名单(含学号、6门课程成绩、平均分、名次)。
(二)系统设计
准备工作:
编写两个记事本文件作为原始数据源。
本程序中建立两个文件,第一个中的内容是全班同学的5功课的成绩(英语,C语言,数学,大学物理,线性代数),保存在D盘下,其完整的路径名为D:
\wl0116.txt.第二个中的内容是所有的五门功课的属性(编号,名称,学分),同样保存在D盘下内,起完整的路径名为D:
\wl01kc.txt.
1.系统功能模块框架图
2.菜单结构图。
3.数据结构说明
/*学生结构体*/
structstudent
{
longnum;/*学号*/
charname[20];/*姓名*/
intscore[N];/*各科分数构成的一维数组*/
doubleave;/*每名学生所有科目的加权平均分*/
intt;/*名次*/
}st[M];
structsubject
{
intnum;/*课程编号*/
intexcellent;/*成绩优秀*/
intgood;/*成绩良好*/
intmid;/*成绩中等*/
intpass;/*成绩及格*/
intfail;/*不及格*/
charkc[30];/*课程名称*/
floatxuefen;/*课程学分*/
doubleave;/*课程平均分*/
doublebzc;/*课程标准差*/
}course[N];
整个系统的设计,可以将所有数据划分到两个结构体中,一个与学生有关,一个与课程有关。
数据的引入,可以从两个文件中读入,一个是学生成绩表,一个是课程与学分相关。
然后,将数据进行
(1)加权平均;
(2)标准差处理,排出每个学生在班级的名次。
最后,写出文件。
(三)系统实现
(一).部分函数的实现过程:
1.读入数据函数ReadDat1()和ReadDat2()
用函数打开目标文件,通过文件指针指向目标文件,然后调用库函数(fscanf,fgets)将数据读入到定义的结构体当中。
第一步用fgets函数将文件中的的第一行的字符串读入到数组中,然后用一个for循环控制每个人的变化,将各种数据按照不同的类型规格赋值给结构体。
2.求平均分和标准差:
求五门功课的平均分,用一个for循环控制着科目的变化,然后在内部再一个for循环控制人的变化将全班的人的某门功课的成绩累加起来,再除以总人数即得平均分,类似的即可求的各门课的标准差。
3.求每个人的加权平均成绩:
首先用for循环得到五门课程的学分的总和,然后再通过for循环控制每个人的不断变化,把每个人的每门成绩乘以各门课的学分,将其累加起来,再除以学分的和即得各个人的加权平均成绩
4.排名次:
首先用for循环控制各个人的变化,每一次将其名次赋值为1,然后将其平均成绩通过for循环于其他人进行比较,若小就将其自加1,最终即可得名次。
5.统计各分数段的人数:
首先通过两个for循环检查每个人的每门课程,再通过switch语句判断起属于的类型。
6.C语言创建全班同学成绩单的数据文件和全班成绩分析:
首先通过函数建立一个新的文件,for循环控制将分数输出到指定的文件中
(二)程序调试过程中的要点和难点:
在程序调试过程中,经常出现警告,这是因为数据类型不一致导致而成的。
由于不小心输入法的改变,容易造成一些不易发现的问题,比如在英文输入中的引号与在中文输入中的引号就是又区别的,应该保持在英文输入的环境中编辑此程序。
难点是,各个函数运行,要注意先后顺序。
因为一个函数的运行,需要上一个函数运行的结果为数据。
另外,还注意主函数的编写,是各个函数相互联系在一起。
(四)系统使用说明
源代码编写完成后,可以存放在记事本中,保存起来。
然后,选择打开方式为TC环境,打开运行程序。
在打开的界面上会显示如下菜单界面:
A在光标处输入:
2在屏幕上显示未及格学生名单;
B在光标处输入:
3在屏幕上显示优等生名单;
C在光标处输入:
4显示成绩分布(一个“=”代表一个人);
D在光标处输入:
5查询成绩
a在光标处输入:
1安学号查寻
b在光标处输入:
2按姓名查寻
E在光标处输入:
0退出界面;
F在光标处输入:
1进入子菜单选项
在光标处输入:
1创建班级名次文档到D盘;
在光标处输入:
2创建课程成绩文档到D盘;
在光标处输入:
3在屏幕上显示每个学生的成绩条;
在光标处输入:
5返回主菜单;
在光标处输入:
0退出编辑界面;
(五)测试数据
1.两个原始数据
(1)学生成绩表
名次
学号
姓名
英语
C语言
离散数学
线形代数
大学物理
密码学
平均成绩
1
01
缪军
96
95
94
93
95
95
94.7
3
02
陈军
90
84
91
78
92
68
85.1
16
03
曹军
69
90
81
86
82
64
79.1
9
04
胡均
92
87
89
58
92
71
83.3
18
05
武军
57
76
81
92
83
76
77.1
14
06
陶均
84
69
94
72
77
83
80.7
8
07
喻均
91
91
77
74
66
91
81.4
11
08
周均
93
82
78
75
64
93
80.4
19
09
吴军
94
76
75
74
84
59
77.8
6
10
张俊
82
94
84
84
87
67
83.7
10
11
王俊
86
92
79
82
89
61
82.3
22
12
李军
74
72
92
94
54
64
75.4
5
13
赵俊
76
78
93
93
79
82
83.6
15
14
郑君
93
73
81
85
74
73
80.0
20
15
钱均
67
81
82
67
76
79
75.8
24
16
欧均
81
84
75
61
59
84
74.2
13
17
汤俊
87
89
79
87
67
72
80.2
4
18
廖均
79
87
92
89
62
94
83.5
21
19
扬峻
77
64
84
51
94
81
76.3
2
20
孙俊
83
94
81
94
82
86
86.1
23
21
冯均
86
58
64
91
84
67
74.2
25
22
周君
93
76
62
57
89
62
73.9
7
23
曾俊
92
73
63
82
92
91
81.0
12
24
董均
59
94
84
84
91
72
81.0
17
25
高军
91
82
59
84
66
84
76.3
(2)课程与学分相关
编号
课程名称
平均分
标准差
优秀
良好
中等
及格
不及格
1
英语
82.9
21.8
10
7
4
2
2
2
C语言
81.6
20.0
7
8
7
2
1
3
离散数学
80.6
20.3
6
9
6
3
1
4
线性代数
79.5
25.1
6
9
5
2
3
5
大学物理
79.2
24.3
6
8
4
5
2
6
密码学
76.8
22.5
5
6
6
7
1
2.测试结果
(1)学生名次表
(2)学生个人成绩单
(3)不及格学生名单
(4)优秀学生名单情况
(六)结论
1.通过对这一课题的设计和实现,我对TC3.0环境进行了深一步的了解,并逐渐开始熟练tc3.0环境的工作界面,以及对每一个快捷键的熟悉。
并认识到,熟悉这些快捷键,极为便捷编写程序,但是还要更加熟悉。
2.编程时要养成良好的风格,注意相同内容的缩进和对齐。
这样做,可以使程序代码出错的情况下,可以快速并且便捷的查找到错误的行,利于很好的修改。
3.通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。
4.这个程序设计主要涉及到了C语言中的结构体、指针及文件操作等内容,只有充分掌握了C语言中的结构体、指针及文件操作等内容,才有可能组织好这些代码,使之符合运算逻辑,得到理想的结果。
5.善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高,生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过实际动手做,我们才真正领略到“艰苦奋斗”这一词的真正含义,我们想说,编程确实有些辛苦,但苦中也有乐,在这个团队的任务中,一起的工作可以让我们有说有笑,相互帮助,配合默契。
对我们而言,知识上的收获重要,精神上的丰收是可喜的。
挫折是一份财富,经历是一份拥有。
这次实际操作必将成为我们人生旅途上一个非常美好的回忆!
6.回顾起此次课程设计,至今仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。
同时,在汪老师和余老师的身上我学得到很多实用的知识,在此表示感谢!
同时,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!
(七)附录
程序全部代码:
#defineM25
#defineN6
#include"stdio.h"
#include"math.h"
#include"stdlib.h"
#include"string.h"
structstudent
{longnum;
charname[20];
intscore[N];
doubleave;
intt;
}st[M];
structsubject
{intnum;
intexcellent;
intgood;
intmid;
intpass;
intfail;
charkc[30];
floatxuefen;
doubleave;
doublebzc;
}course[N];
/*读取\\wl0116.txt*/
voidread1()
{inti,j;
charstr1[100];
FILE*fp;
if((fp=fopen("d:
\\wl0116.txt","r"))==NULL)
{printf("Cannotopenthefile!
\n");
exit(0);
}
fgets(str1,100,fp);
for(i=0;i {fscanf(fp,"%ld%s",&st[i].num,st[i].name); for(j=0;j {fscanf(fp,"%d",&st[i].score[j]);} } fclose(fp);} /*读取\\wl01kc.txt*/ voidread2() { FILE*fp=fopen("d: \\wl01kc.txt","r"); intk; charstr2[100]; if(fp==NULL) {printf("Cannotopenthefile! \n"); exit(0);} fgets(str2,100,fp); for(k=0;k { fscanf(fp,"%d%s%f",&course[k].num,course[k].kc,&course[k].xuefen); } fclose(fp); } voidjaquan() { doubles=0,sum; inti,j; for(i=0;i s=s+course[i].xuefen; for(i=0;i {sum=0; for(j=0;j sum=sum+(st[i].score[j])*(course[j].xuefen); st[i].ave=(int)(sum*10.0/s+0.5)/10.0;} } voidmingci() { inti,j,t; for(i=0;i {t=1; for(j=0;j if(st[i].ave t++; st[i].t=t;} } /*计算课程平均分和优劣分布*/ voidave() { doubles; inti,j; for(j=0;j {s=0;course[j].excellent=0;course[j].good=0; course[j].mid=0;course[j].pass=0; course[j].fail=0; for(i=0;i { switch(st[i].score[j]/10) {case10: case9: course[j].excellent++;break; case8: course[j].good++;break; case7: course[j].mid++;break; case6: course[j].pass++;break; default: course[j].fail++;} s+=st[i].score[j];} course[j].ave=s/M;} } voidbzcha() {inti,j; doubles; for(j=0;j {s=0; for(i=0;i s+=(st[i].score[j]-course[j].ave)*(st[i].score[j]-course[j].ave); course[j].bzc=sqrt(s/N);} } /*创建班级成绩排名*/ voidwritefile1() { FILE*fp; inti,j; if((fp=fopen("d: \\mc0116.txt","w"))==NULL) {printf("fail! \n"); exit(0); } fprintf(fp,"名次学号姓名英语C语言离散线性物理密码学***平均成绩\n"); for(i=0;i {fprintf(fp,"%3d%10ld%10s",st[i].t,st[i].num,st[i].name); for(j=0;j fprintf(fp,"%6d",st[i].score[j]); fprintf(fp,"....%4.1f\n",st[i].ave); } fclose(fp); } /*创建班级课程成绩分布*/ writefile3() { FILE*fp; inti; if((fp=fopen("d: \\kc0116.txt","w"))==NULL) {printf("Failetobuildthefile! \n"); exit(0);} fprintf(fp,"编号课程名称平均分标准差优秀良好中等及格不及格\n"); for(i=0;i fprintf(fp,"%4d%10s%8.1f%8.1f%6d%6d%6d%4d%4d\n",i+1,course[i].kc,course[i].ave,course[i].bzc, course[i].excellent,course[i].good,course[i].mid,course[i].pass,course[i].fail); fclose(fp); } voidwritefile4() { FILE*fp=fopen("d: \\cjt0116.txt","w"); inti,j; if(fp==NULL){printf("Failetobuildanewfile! \n");exit(0);} for(i=0;i { fprintf(fp,"\n学号姓名英语C语言离散线性物理密码学***平均成绩\n%8ld%8s",st[i].num,st[i].name); printf("\n学号姓名英语C语言离散线性物理密码学***平均成绩\n%8ld%8s",st[i].num,st[i].name); for(j=0;j {fprintf(fp,"%6d",st[i].score[j]);printf("%6d",st[i].score[j]);} fprintf(fp,"....%4.1f\n",st[i].ave);printf("....%4.1f\n",st[i].ave); fprintf(fp,"****************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实验 报告 4340106