




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、应用软件课程设计课程成绩分析系统设计数学0801班*、实验目的给定某课程成绩和相应学号,存为txt文件,通过文件载入,实现以下功能:程序利用自定义函数输出该门课程的最高分以及获得者学号、人数;最低分以及获得者 学号、人数;该门课程的平均分与方差。程序1-2:利用matlab自带命令输出该门课程的最高分以及获得者学号、人数;最低分以及获 得者学号、人数;该门课程的平均分与方差。程序2:利用自定义函数将成绩由高到低排序,显示排序结果、相应学号以及名次。排序结果 保存到a. mat文件中。程序3:将学牛成绩均匀分成10个分数段,计算每个分数段上的学生人数,绘制学生成绩频数 分布直方图并在图形窗口中显
2、示。二、算法说明程序1t:求最高分的自定义函数伪代码(程序框图见附录11,求最低分的函数算法与之一致):1、if length(x)length(y)%判断 x、y 长度是否相同 dispc给定学号和成绩人数不匹配!)else2> zdf=inf; zgf=-inf;%考虑到成绩可能不是百分制,便分别把正无穷、负无穷赋值给max、 min。l=lcngth(x) ;zgfn=0;zdfn=0;d=0;v=0;xx=(1);yy=(l);%zgfx=;zdfx=;3、i二1,2, ,1%第一次循环求出最高分4、if y(i)>zgf;%判断成绩与前面最高分的大小。5、zgf=y(i)
3、;%若高于最高分,将该成绩赋值为最高分。6、结束判断,结束循环。7、i二1,2,,1%第二次循坏,找岀所有成绩为最高分的学生学号。8、if y(j)=zgf;%判断成绩是否等于最高分。9、zgfn=zgfn+l;%若相等,则人数增加1。 zgfx(zgfn)=x(j);%并且将学号计入统计矩阵。10、结束循环,结束判断。求平均分与方差的自编程序框图图示(程序框图见附录12):1、1=1,2,-,1;2、d二d+y(i);求和。3、结束循环。4、u=d/l;%求岀平均数。5、j二 1, 2, , 1 ;6、v二v+(u-y (j)2;求偏差平方和。7、结束循环。8、v=v/(l-l) ;%偏差平
4、方和除以白由度的到方差。9、结束循坏。以上程序整合到一个函数文件yunxing. m (详见附录1)中,通过运行脚木文件pdriver. m (详见附录2)运行。程序1_2:利用matlab内部函数求最高分的伪代码(最低分与之一致):1、zgf, izgf=max(y) ;%取幽最高分以及相应位置2、disp('最高分:1, num2str(zgf) ; dispc 相应学号为:j);disp(num2str(x(izgf) %显示该成绩获得者学号3、y(izgf) =-lnf;%令最高分为负无穷,确保该同学的成绩离开判断程序。4、不确定次数的循环当max(y) =zgf时,执行循环。
5、5、zgf, izgf二max (y);6、disp(num2str(x(izgf)%显示获得最高分同学的学号。7、y(izgf) =-inf;%令最高分为负无穷,确保该同学的成绩离开新的循环。8、n=n+l;%对最高分个数计数。9、结束循环10、disp('共有',num2str(n),'人')%显示获得者人数(2)利用matlab内部函数求平均分与方差的伪代码:1、a=mean (y);2、disp('')%显示分隔符3、disp('平均成绩为:*, num2str(a)4、s二std(y);5、s2二sj;%标准差平方得方差6、di
6、sp('方差为:j, num2str(s2)以上程序整合到一个脚本文件pquick. m中(参见附录3)。程序2:1、np0;l二length(x);2、i二1,2,13、zgf, izgf二max(y) ;%提取最高分及位置。4、判断最高分是否与前一个最高分一致,若一致,则名次同前;若不一致,则名次增加1。5、yy (i)=zgf;%定义新的成绩向量yy用以存放排号顺序的成绩。6、xx(i)=x(izgf);%定义新的学号向量xx用以存放排号顺序的成绩。7、y(izgf) =-inf;%定义该最高成绩为负无穷,退出查找最大值循坏。8、结束循环以上程序参见paixu. m(附录4),通
7、过脚本文件pxdriver. m (附录5)驱动运行。程序3:1、load xy. txt;y=xy (:, 2) ;clear xy; s=zcros (10, 1) ;%载入分数,将每个分数段上的学生数量 定义为s向量的每一个分量。2、x二5:10:95;%每10分为一个分数段,取个位数为5的分数代替一个分数段上的成绩。3、i二 1,2,,length(y);4、判断第i个同学的成绩分属哪一个分数段,并将相应分数段上的人数加1。5、结束循坏。6、bar (x, s, 0. 7), xlabel ('分数段'),ylabel ('人数'),titlec学生成绩
8、直方图)画出直方图。 colormap(1 0.7 0.1)%改变直方图颜色,使之看上去更加美观。以上程序参见脚本文件zftorgin.m (附录6)。三、测试结果利用表1的数据,将学号和成绩存入xy. txt中。学号成绩学号成绩20080501279420080501497120080501289020080501504520080501296720080501514520080501308020080501527720080501316520080501537920080501328120080501546720080501336020080501559020080501356020080
9、501568920080501366020080501577220080501377120080501587020080501389020080501599420080501398120080501609420080501407620080501618620080501418220080501629420080501426020080501638520080501437320080501647320080501447920080501656020080501456020080501666020080501466120080501679020080501477320080501686220080
10、5014869200805016945表1运行附录中的程序1,得到结果如下(程序1-1与程序1-2的输岀结果完全一致人最高分:94 相应学号为: 2008050127 2008050159 2008050160 2008050162 人数:4 最低分:45 相应学号为: 2008050150 2008050151 2008050169 人数:3 平均分:73. 3333 方差:190. 4715名汝:学号成绩1200805012794120080501599412008050160941200805016294520080501289052008050138905200805015590520
11、080501679092008050156891020080501618611200805016385122008050141821320080501328113200805013981152008050130801620080501447916200805015379182008050152771920080501407620200805014373202008050147732020080501647323200805015772242008050137712420080501497126200805015870272008050148692820080501296728200805015
12、46730200805013165312008050168623220080501466133200805013360332008050135603320080501366033200805014260332008050145603320080501656033200805016660402008050150454020080501514540200805016945u!学生成绩直方图图1、分析与探讨1、对于程序2的排序问题,目前流行的算法z是比较法,即进行1次循环(1代表学生人数), 每次循环均找出该次循环下的最高分,将该分数与相应学号赋值给新的矩阵元素。加之本文前述 的排名算法,编写比较法
13、排序算法下的脚本文件paixul.m (见附录10),运行结果与程序2完全 相同。2、频数分布直方图中完全可以将频数为0的前几个分数段去掉,使输出结果更清晰。为实现次目标,本文尝试对其进行改进,改进后的程序参见附录7,得到两种模式的直方图对比如图3:学生成绩直方图分数段学生成绩直方图分数段显然,修正后的程序更加合理。3、在本文中,程序1、2均考虑了当成绩为非百分制时的情况。考虑到模型的适用性,应将非百分 制的情况考虑在内。改进后的程序参见附录8。该程序将最高分与最低分之间的分数差均匀分为 10份,得到直方图如图3:学生成绩直方图4550556065707680859095分数段图34、木文三个
14、程序需要分别运行,对相应的脚木文件进行修改、整合即可运行一个脚木文件给出所有 结果。附录9便是这项改进的脚本文件。为验证该程序的正确性,给定新的学号与成绩(200分 制)如表2:学号成绩学号成绩学号成绩2009020056180200902007013420090200841562009020057192200902007115620090200851262009020058156200902007214220090200861802009020059124200902007312420090200871682009020060136200902007498200902008817020090
15、200611882009020075140200902008916420090200621282009020076942009020090188200902006310820090200771702009020091160200902006410820090200781442009020092136200902006512020090200791302009020093124200902006618820090200801462009020094100200902006716420090200811642009020095188200902006814020090200829020090200
16、969420090200691282009020083174200902009760表2将表中学号、成绩存入xy. txt文件中,运行上述程序,得到以下结果(直方图见图4):名次学号成绩120090200571922200902006118822009020066188220090200901882200902009518862009020056180620090200861808200902008317492009020077170920090200881701120090200871681220090200671641220090200811641220090200891641520090
17、200911601620090200581561620090200711561620090200841561920090200801462020090200781442120090200721422220090200681402220090200751402420090200601362420090200921362620090200701342720090200791302820090200621282820090200691283020090200851263120090200591243120090200731243120090200931243420090200651203520090
18、200631083520090200641083720090200941003820090200749839200902007694392009020096944120090200829042200902009760最高分:192相应学号为:2009020057人数:1最低分:60相应学号为:2009020097 人数:1平均分:142. 381 方差:1022. 8757学生成绩直方图图4附录:1、yunxing. m (给定x、y值,输岀y的最大值、最小值以及对应x的值以及个数,输出y的均值 与方差。由脚本文件pdriver. m驱动。)function zgf, zgfn, zgfx,
19、zdf, zdfn, zdfx, u, v二yunxing(x, y)if length (x) 'length (y)%判断 x、y 长度是否相同 dispc给定学号和成绩人数不匹配!')elsezdf=inf; zgf=-inf;%考虑到成绩可能不是百分制,便分别把正无穷、负无穷赋值给max、min。 l=length(x) ;zgfn=0;zdfn=0;d=0; v=0;xx= (1) ;yy二;zgfx二;zdfx二;%第一次循环求出最高分for i=l:1;if y(i)>zgf; zgf二y(i);endend%考虑到取得最高分的学牛可能不唯一,所以有第二次循
20、环,用以找出所有成绩为最高分的学牛 学号。for j=l:1;if y(j)=zgf;zgfn=zgfn+l; zgfx(zgfn) =x(j);endend%以下为对最低分的计算,原理与上述基本相同。for i二1:1; if y(i)<zdf;zdf=y (i);endendfor j二1:1;if y(j)=zdf;zdfn=zdfn+l;zdfx (zdfn)=x (j);endend%求平均分的程序。for i=l:1; d二d+y(i);endu=d/l;%求方差的程序。for j二1:1;v 二 v+(u-y (j)厂2;end v=v/(l-l);end2、pdriver
21、. m (读取学牛学号和成绩,驱动yunxing. m文件求出最高分、最低分以及对应学生学号 和人数,输出平均分与方差。)clcjclear;load xy. txt;x=xy(:, 1) ;y二xy(:, 2) ;clear xyzgf, zgfn, zgfx, zdf, zdfn, zdfx, u, v二yunxing(x, y) ;%使用 自编函数 yunxing. mdisp('最高分:j, num2str(zgf), dispc 相应学号为:)disp(num2str(zgfx,)disp(,人数:,num2str (zgfn);disp(,')disp('最
22、低分:*, num2str (zdf) ), dispc 相应学号为:)disp(num2str(zdfx,)disp('人数:',num2str (zdfn);disp(,')disp('平均分:',num2str (u);disp('方差:',num2str (v);3、pquick.m (读取学生学号和成绩,利用matlab自带函数求出最高分、最低分以及对应学生学号 和人数,输出平均分与方差。)clear;clc;load xy. txt;x=xy(:, 1);y=xy(:, 2);clear xyzgf, izgf二max(y)
23、;%取出最高分以及相应位置disp('最高分:?, num2str(zgf)disp(,相应学号为:');disp(num2str (x (izgf) y(izgf) =-lnf;%令最高分为负无穷,确保该同学的成绩离开新的判断程序。n二1;%最高分至少有一个人。while max(y)=zgf;%不确定次数的循环。zgf, izgf二max (y);disp (num2str (x (izgf) %显示获得最高分同学的学号。y(izgf) =-inf;%令最高分为负无穷,确保该同学的成绩离开新的判断程序。 n二n+1;%对最高分个数计数。enddisp( 共有',nu
24、m2str(n),'人')%求最低分以及相应学号,与上述一致。clear;load xy. txt;x=xy (:, 1) ;y=xy (:, 2) ; cl ear xyzdf, izdf=min(y);disp(,')disp(,最高分:',num2str (zdf)disp(,相应学号为:');disp(num2str(x(izdf)y(izdf)=inf;n=l;while min(y)=zdf;zdf, izdf二min(y);disp(num2str(x(izdf)y(izdf)=inf;n=n+l;enddisp('共有',
25、num2str (n),'人')%求平均成绩与方差。clearload xy. txt;x=xy(:, 1) ;y二xy(:, 2) ;clcar xy a二mean (y);disp(,')disp('平均成绩为:',num2str(a) s=std(y);s2二 s2disp('方差为:',num2str(s2)4、paixu. m (由 pxdriver. m 驱动运行) function me, xx, yy=paixu(x, y);if length(x)length(y)%判断 x、y 长度是否相同 dispc给定学号和成绩人
26、数不匹配!)elsen二0;l=length (x);zgf, izgf=max(y) ;%提取最高分以及位置。yy(l)=zgf;%定义新的成绩向量yy用以存放排号顺序的成绩。 xx(l)=x(izgf) ;%定义新的学号向量xx用以存放排号顺序的成绩。 y(izgf) =-inf;%定义该最高成绩为负无穷,退出查找最大值循环 me (1)=1;for i=2:1;zgf, izgf=max(y) ;%提取最高分以及位置。 if zgf=yy(i-l)me (i)二me (il);elseme (i)=i;endyy(i)=zgf;%定义新的成绩向量yy用以存放排号顺序的成绩。 xx(i)二
27、x(izgf) ;%定义新的学号向量xx用以存放排号顺序的成绩。 y(izgf)=-inf;%定义该最高成绩为负无穷,退出查找最大值循环 endend5、pxdriver. m (驱动paixu. m运行,对成绩进行降序排序) clc;clear;load xy. txt;x=xy(:, 1);y=xy(:, 2);clear xyme, xx, yy=paixu(x, y);%以下三行将名次、学号、成绩向量连接到xy矩阵中。%xy (:, 1)=1: length (x);xy (:, 1) =mc;xy (:, 2)=xx;xy(:, 3)=yy;dispc名次 学号 成绩')创建
28、表格标题头。a=xy;fprintf(l,' %12. of %12. of %4. 0fn,, xy')%disp(num2str(xy)%显示名次、学号。成绩。 save a. mat a%将变量a存入a. mat文件屮。6、zftorgin. m (将百分制成绩均匀分成10个分数段,并画出频数分布直方图) clc;clear; load xy.txt; y二xy(:, 2);clear xy;s二zeros(10, 1);x=5:10:95;%每10分为一个分数段,取个位数为5的分数代替一个分数段上的成绩。 yy=fix(y. /10);for i=l:length(y)
29、;%判断成绩分属哪一个分数段,并将相应分数段上的人数加lo switch yy(i)case 0s(l)=s(l)+l;case 1s(2)=s (2)+1;case 2 s(3)=s(3)+l;case 3s (4) =s (4)+1;case 4s二s+1;case 5s(6)=s(6)+l;case 6s(7)二 s(7)+l;case 7s 二s (8)+1;case 8s (9) =s (9)+1;otherwise s (10) =s (10)+1;endendfigure bar(x, s, 0. 7), xlabel ('分数段'),ylabel ('人
30、数'),title(,学生成绩直方图')画岀直方图。 colormap(1 0.7 0.1)%改变直方图颜色,使之看上去更加美观。7、zft. m (程序3的改进,对比删除频数为0分数段前后的频数分布直方图) clc;clear; load xy.txt;y二xy(:, 2);clear xy;s二zeros (1, 10); l=length(y);x=5:10:95;yy=fix(y. /10);for i二1:1;switch yy(i)case 0s二s+1;case 1s (2) =s (2)+1;s二s+1;case 3s (4)=s (4)+1;case 4s(5
31、)二 s(5)+l;case 5s (6)=s (6) +1;case 6s(7) =s (7)+1;case 7s (8)二 s (8)+1;case 8s(9)=s (9)+1;otherwise s (10)=s (10) +1;endend%增加判断程序,从第一个人数非零的分数段开始取值。for j二1:10;if s(j)>0t二 j;breakendendss二s(j: 10) ;%将频数为0的分量从频数向量中剔除。xx二10*j-5:10:95;figuresubplot (1,2, 1),bar(x, s, 0. 7), xlabel c 分数段'),ylabel
32、 c 人数'),titlec 学生成绩直方图) colormap(1 0.7 0.1) subplot (1, 2, 2),bar (xx, ss, 0. 7), xlabel c 分数段'),ylabel ('人数'),titlec 学生成绩直方图) colormap(0.2 0.5 1)8、zftl.m(适用性更加广泛的模型,将最高分与最低分之间的分数差均匀分为10份绘制直方图) clc;clear; load xy.txt;y=xy(:, 2);clear xys二zeros (1, 10);l=length(y);zdf=min(y) ;zgf=max(
33、y) ;%取出最高分和最低分。d=(zgf-zdf)/10;%将最高分与最低分等分10份。x=zdf+(d/2) :d:zgf-(d/2) ;%毎个分数段取中间数作为该分数段的横坐标。 yy=fix(y-zdf). /d);%判断成绩所属分数段。for i=l:1;switch yy(i)case 0s =s(l)+l;s(2)=s(2)+l;case 2s(3)=s(3)+l;case 3s 二s (4) +1;case 4s (5)=s (5) +1;case 5s(6) =s (6)+1;case 6s(7)二 s(7)+l;case 7s(8)=s(8)+l;case 8s (9)二
34、s (9) +1;otherwise s(10)=s(10)+l;endend%绘制直方图。figurebar (x, s, 0. 7), xlabel ('分数段'),ylabel ('人数'),title ('学生成绩直方图') colormap(l 0. 2 0.4)9、super, m (给出所有结果,需要引用paixu. m和yunxing. m两个函数文件。) clc;clcar;load xy. txt, x=xy(:, 1) ;y=xy(:, 2) ; clear xyme, xx, yy>paixu(x, y);%以下三行
35、将名次、学号、成绩向量连接到xy矩阵中。%xy (:, 1)=1: length(x);xy(:, l)=mc;xy(:, 2)=xx;xy (:, 3)二yy;dispc名次 学号成绩')创建表格标题头。a=xy;disp(num2str(xy)%显示名次、学号。成绩。 save a. mat a%将变量a存入a. mat文件中。disp(,')zgf, zgfn, zgfx, zdf, zdfn, zdfx, u, v=yunxing(x, y) ;%使用自编函数 yunxing. m disp(,最高分:?, num2str(zgf), disp(,相应学号为:') disp(num2st:r(zgfx')disp('人数:*, num2str(zgfn); disp(,')disp('最低分:',num2str (zdf) ), disp(,相应学号为:') disp(num2str(zdfx,)disp(,人数:',num2str (zdfn); disp(,')disp('平均分:',n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年蚌埠禹投集团有限公司招聘9人笔试参考题库附带答案详解
- 2025届高考生物备考教学设计:第五章 基因的传递规律之基因分离定律的特例分析
- 东狮牌DSL脱硫催化剂
- 3.2《过秦论》教案-【中职专用】高二语文同步教学(高教版2023·拓展模块下册)
- 2024年12月惠州市纪检监察综合事务中心35人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年湖北科技职业学院单招职业技能测试题库一套
- 第三章第四节 《沉淀溶解平衡》-2023-2024学年高二化学选择性必修1教学设计
- 2025年非金属矿物制品:耐火合作协议书
- 生物化学检验模拟考试题(附答案)
- 2025年湖南高尔夫旅游职业学院单招职业适应性测试题库完整
- 【女性劳动力就业歧视问题探究11000字(论文)】
- 2024年江苏农牧科技职业学院单招职业适应性测试题库含答案
- 小学二年级语文下册《古诗二首》课件
- 绿色供应链管理培训
- 针刺伤的预防和处理
- 《旅游概论》课件-旅游业的发展趋势
- 2023年铁路工务安全规则正文
- 大单元视角下小学语文单篇课文的教学
- 《常见的地貌类型》课件
- 幼儿园小班春季传染病预防
- 人教鄂教版小学科学六年级下册全册教案
评论
0/150
提交评论