
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、1/13
2013年上半年(5月)下午程序员考试真题
案例分析-答案与解析
试题一(共15分)
平面上一个封闭区域内稳定的温度函数是一个调和函数。如果区域边界上各点的温度是
已知的(非常数),那么就可以用数值方法近似地计算出区域内各点的温度。
假设封闭区域是矩形,可将整个矩形用许多横竖线切分成比较细小的网格,并以最简单
的方式建立坐标系统,从而可以将问题描述为:已知调和函数u(i,j)在矩形{0≤i≤m;0≤
j≤n}四边上的值,求函数u在矩形内部各个网格点{(i,j)|i=1,…,m-1;j=1,…,n-1}
上的近似值。
根据调和函数的特点可以推导出近似算式:该矩形内任一网格点上的函数值等于其上下
左右四个相邻网格点上函数值的算术平均值。这样,我们就可以用迭代法来进行数值计算了。
首先将该矩形内部所有网格点上的函数值设置为一个常数,例如u(0,0);然后通过该迭代式
计算矩形内各网格点上的新值。这样反复进行迭代计算,若某次迭代后所有的新值与原值之
差别都小于预定的要求(如0.01),则结束求解过程。
阅读以上说明和流程图,填补流程图中的空缺(1)〜(5),将解答填入答题纸的对应栏
内。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、2/13
【试题答案】
(1)、0或任意一个负数
(2)、(u(ij+1)+u(ij-1)+u(i-1j)+u(i+1j))/4或等价表示
(3)、max
(4)、new或((u(i,j+l)+u(i,j-l)+u(i-lj)+u(i+l,j))/4或等价表示
(5)、max试题二(共15分)
【试题解析】
封闭区域内稳定(没有奇异点)的温度场、磁场等都是调和函数。已知边界上的值,就
可以近似计算区域内各点的值。对于网格化后的矩形区域{0≤i≤m;0≤j≤n},其边界点为
{(0,j)丨j=0,..,n}、{((i,0)丨i=0,..,m}、{(m,j)丨j=0,..,n}、{((i,n)|i=0,..,m},
其内点为{(i,j)|i=1,•.•m-l;j=1,...,n-l}。
当某个内点处新老u值之差的绝对值超过max时,就需要将该值赋给max。因此,(3)
处应填max。不管是否更新了max,此后新值就可以替代老值了。因此(4)处应填
newo
(5)处应填本次迭代求出的最大值max,以判断它是否小于0.01,是否达到了近似要求。
如果已经达到误差要求,则计算结束,所有的u(ij)就是计算结果。否则,还需要继续进行
迭代。
试题二
函数GetDateId(DATEdate)的功能是计算并返回指定合法日期date是其所在年份的第
几天。例如,date表示2008年1月25日时,函数的返回值为25,date表示2008年3月
3日时,函数返回值为63。
函数Kday—Date(inttheyear,intk)的功能是计算并返回指定合法年份
theyear(theyear≥1900)的第k天(1≤k≤365)所对应的日期。例如,2008年的第60天是
2008年2月29日,2009年的第60天是2009年3月1日。
函数isLeapYear(inty)的功能是判断y代表的年份是否为闰年,是则返回1,否则返回
0。
DATE类型定义如下:
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、3/13
【试题答案】
(1)、
(2)、>2或其等价形式
(3)、DATE
(4)、theyear
(5)、days_month[i-1]或其等价形式
【试题解析】
函数GetDateId(DATEdate)的功能是计算并返回指定合法日期date是其所在年份的第
几天。处理思路是:先将1月~-l月的天数累加起来,然后加上的
天数即可。若>2,则需要考虑特殊情况2月份,在闰年为29天而不
是28天。因此,空(1)处应填入,空(2)处应填入>2。
函数Kday_Date(inttheyear,intk)的功能是计算并返回指定合法年份theyear
(theyear≥1900)的第k天(1≤k≤365)所对应的日期。根据说明,显然空(3)应填入“DATE”。
当k<32时,计算出的日期一定在1月份;当k大于31而小于60(闰年时为61)时,计算出
的日期一定在2月份;以此类推。函数中的处理思路是:先将k的值减去1月份的天数,若
仍大于0,则继续减去2月份的天数,以此类推,直到k的值小于或等于0。此时将多减去的
最后1个月的天数加上即可。因此,空(4)应填入“theyear”,空(5)应填入“days_month[i]”。
试题三
埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列
起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划
去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、4/13
小者为5,5是素数,再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都
筛掉,每次从序列中取出的最小数所构成的序列就是不超过N的全部质数。
下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](i>0)的下标i对应自
然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就
将sieve[i]设置为0。
阅读以上说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。
【试题答案】
(1)、i
(2)、k++或++k或其等价形式。
(3)、k>N或k>N+1或其等价形式。
(4)、i+k或其等价形式。
(5)、sieve[i]=0或其等价形式。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、5/13
【试题解析】
显然,空⑴所在的for语句用于设置Sieve[]的初始值,根据题目描述,一开始1〜N范
围内的自然数i都在序列中,因此对应的数组元素sieve[i]都要设置为丨。因此,空(1)
处应填入“i
根据注释,空(2)所在的for语句要找出剩下数中的最小者,也就是要找出sieve中第
一个值不等于0的数组元素sieve[k],顺序地考查sieve的元素即可,因此空(2)处应填
入“k++”。
空(3)应填入“k>N”或其等价形式,表示要找的最小素数己经大于N,应结束处理。
空(4)和(5)所在for语句用于将刚找出的素数k及其倍数从序列中去掉,用i表示k的倍
数(包括k自己)时,i的取值为k,2k,3k在i的初值己设置为k的情况下,i的迭代方式
为i=i+k,因此空(4)处应填入“i+k”,空(5)处应填入“sieve[i]=0”
试题四
N个游戏者围成一圈,从1〜N顺序编号,游戏方式如下:从第一个人开始报数(从1到
3报数),凡报到3的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。
下面的函数playing(LinkListhead)模拟上述游戏过程并返回获胜者的编号。其中,N个人
围成的圈用一个包含N个结点的单循环链表来表示,如图4-1所示,游戏者的编号放在结点
的数据域中。
在函数中,以删除结点来模拟游戏者退出圈子的处理。整型变量c(初值为1)用于计数,
指针变量p的初始值为head(如图4-1所示)。游戏时,从p所指向的结点开始计数,p沿链
表中的指针方向遍历结点,c的值随p的移动相应地递增。当c计数到2时,就删除P所指
结点的下一个结点(因下一个结点就表示报数到3的游戏者),如图4-2所示,然后将c设
置为0后继续游戏过程。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、6/13
阅读以上说明和C程序,填充函数中的空缺,将解答填入答题纸的对应栏内。
【试题答案】
(1)、1。
(2)、q->next或p->next->next。
(3)、0。
(4)、p->next。
(5)、p->code。
【试题解析】。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、7/13
由于游戏最后剩一人时结束,因此空(1)处应填入“1”,表示N>1时游戏过程要继
续。
当c等于2时,p所指结点的后继表示为q(q=p->next),q所指结点即为要删除的结点,
即如下图所示。
此时,需要修改p所指结点的指针域,令其指向q所指结点的后继结点,对应的操作
为p->next=q->next(等同于p->next=p->next->next),因此空(2)处应填入“q->next”
或“p->next->next”。将q所示结点删除后的相关指针如下图所示。
试题五
某学校在学生毕业时要对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平
均成绩(Wg)与附加分(Ag)构成,即GPA=Wg+Ag。
设一个学生共修了n门课程,则其加权平均成绩(Wg)定义如下:
其中,gradei、Ci;分别表示该学生第i门课程的百分制成绩及学分。
学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活
动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加m项
学科竞赛):
其中,li和Si分别表示学生所参加学科竞赛的级别和成绩。
对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。
下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Student描
述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加
社会活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛的学生由
类CmpStudent描述,其各项竞赛的成绩信息由awards表示。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、8/13
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、9/13
阅读说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
【试题答案】
(1)、virtualdoublegetGPA()=0。
(2)、Student(stuNo,name,gs)。
(3)、computeWg()+Apoints或Student::computeWg()+Apoi。nts
(4)、Student(stuNo,name,gs)。
(5)、computeWg()+Awards或Student::computeWg()+Awards。
(6)、students[i]->getGPA()。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、10/13
【试题解析】
据说明,将学生设计为一种类型,设计为类Student,学号(stuNo)、姓名(name)、课
程成绩学分(grades)和综合成绩(GPA)分别作为其数据属性,构造函数中对stuNo、
name,grades进行初始化,用相应的get函数获取相关属性值。对于GPA的获取值的函数,
因为不同附加分的计算方法不同,设计为纯虚函数,具体实现由子类完成。将计算加权平均
成绩设计为doublecomputeWg()。将有活动附加分的学生设计为ActStudent,有竞赛附加分
的学生设计为CmpStudent,都作为Student的子类。
子类中,继承父类中访问属性为protected的属性,其构造函数进行初始化时,调用父
类Student中的构造函数对学号、项目和学分成绩进行初始化,并对活动分或竞赛分进行初
始化。
ActStudent(constintstuNo,conststring&name,intgs[][2],intApoints)
:Student(stuNo,name,gs)
或
CmpStudent(constintstuNo,conststring&name,intgs[][2],intawards[][2])
:Student(stuNo,name,gs)
在子类中,实现了获取GPA的函数getGPA,根据题目描述,GPA的计算方式为加权平均成绩
(吟)和附加分()之和,所以返回值就是:
computeWg()+Apoints或computeWg()+Awards
其中,computeWg()在父类Student中定义,子类直接可以作为自己的函数一样使用。
主控逻辑代码在main函数中实现。初始化学生的各科学分和成绩,用数组gi表示,学生的
竞赛分用数组ci表示。用Student*student定义学生数组,而每个具体的学生是ActStudent
或CmpStudent类型的对象,这里会自动向上转型成为Student类型。用for循环对每个学
生的综合成绩进行输出,调用时会继续动态绑定每个数组元素的实际类型,并调用其getGPA
函数,艮P:
cout«students[i]->getGPA()«endl;
使用完指针数组对象之后,需要用delete操作进行释放,即:delete*students;0
因此,空(1)需要指向定义纯虚函数getGPA(),即为virtualdoublegetGPA()=0;空(2)和
空(4)需要调用父类的构造函数,即Student(stuNo,name,gs);空(3)处计算附加分为活动
分的GPA,调用computeWg()计算加权平均分,再加上附加分Apoints,即空(3)为
computeWg()+Apoints;空(5)处计算附加分为竞赛分的GPA,调用computeWg()计算加权平
均分,再加上计算出来的总竞赛分Awards,即空(5)为computeWg()+Awards;空(6)处为
在循环中根据数组下标所表示的每个学生对象调用getGPA()输出每个学生的GPA,即
students[i]->getGPA()。
试题六
某学校在学生毕业时要对其成绩进行综合评定,学生的综合成绩(GM)由其课程加权平
均成绩(Wg)与附加分(处)构成,即GPA=吟+处。
设一个学生共修了n门课程,则其加权平均成绩(吟)定义如下:
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、11/13
其中,gradei、C;分别表示该学生第i门课程的百分制成绩及学分。
学生可以通过参加社会活动或学科竞赛获得附加分(dg)。学生参加社会活动所得的活
动分(Apoints)是直接给出的,而竞赛分(dwarfs)则由下式计算(一个学生最多可参加m
项学科竞赛):
其中,li和Si分别表示学生所参加学科竞赛的级别和成绩。
对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。
下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Studem描述,
包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会
活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛的学生由类
CmpStudent描述,其各项竞赛的成绩信息由awards表示。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、12/13
阅读说明和Java程序,填充代码中的空缺,将解答填入答题纸的对应栏内。
全国计算机技术与软件专业技术资格(水平)、考试
china_nejcer
2013年上半年下午-程序员-下午试题及答案与解析(软考真题-案例分析)、13/13
【试题答案】
(1)、abstractdoublegetGPA()。
(2)、super(stuNo,name,grades)
(3)、computeWg()+Apoints或。uteWg()+Apoints。
(4)、super(stuNo,name,grades)。
(5)、computeWg()+totalAwards或eWg()+totalAwards。
(6)、studentsfi].getGPA()。
【试题解析】
根据说明,将学生设计为一种类型,设计为类Student,学号(stuNo)、姓名(name)、
课程成绩学分(grades)和综合成绩(GPA)分别作为其数据属性,构造方法中对stuNo、name、
grades进行初始化,用相应的get方法获取相关属性值。对于GPA的获取值的方法,因为
不同附加分的计算方法不同,设计为抽象方法,实现由子类完成。因为类中包含抽象方法,
所以Student必须设计为抽象类。将计算加权平均成绩设计为方法doublecomputeWg()。
将有活动附加分的学生设计为ActStudent,有竞赛附加分的学生设计为CmpStudent,都作为
Student的子类。
子类中,继承父类中访问属性为protected的属性,其构造方法进行初始化时,调用父
类Student中的构造方法对学号、项目和学分成绩进行初始化,并对活动分或竞赛分进行初
始化。Java中,调用父类的构造方法在构造方法体内的第一条语句,即:Act
Student(intstuNo,Stringname,int[][]grades,intApoints){
在子类中,实现了获取GPA的方法getGPA,根据题目描述,GPA的计算方式为加权平均
成绩(Ag)和附加分(Wg)之和,所以返回值就是:
computeWg()+Apoints或computeWg()+totalAwards
其中,computeWg()在父类Student中定义,子类直接可以作为自己的方法一样使用。
主控逻辑代码在GPASystem类中的main方法中实现。初始化学生的各科学分和成绩,
用数组gi表示,学生的竞赛分用数组ei表示。用Studentstudent^定义学生数组,而每
个具体的学生是ActStudent或CmpStudent类型的对象,这里会自动向上转型成为Student
类型。用for循环对每个学生的综合成绩进行输出,调用时会动态绑定每个数组元素的实际
类型,并调用其getGPA()方法,即:
n(students[i].getGPA());
因此,空(1)需要指向定义抽象方法getGPA(),即为abstractdoublegetGPA();空
(2)和空(4)需要调用父类的构造方法,即super(stuNo,name,grades);空(3)处计算
附加分为活动分的GPA,调用computeWgO计算加权平均分,再加上附加分Apoints,即空(3)
为computeWg()+Apoints;空(5)处计算附加分为竞赛分的GPA,调用computeWg()计算加权平
均分,再加上计算出来的总竞赛分totalAwards,即空(5)为computeWg()+totalAwards;空
(6)处为在循环中根据数组下标所表示的每个学生对象调用getGPA()输出每个学生的GPA,
即students[i].getGPA()。(完毕)
本文发布于:2023-03-11 00:46:19,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1678466779120218.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:程序员考试.doc
本文 PDF 下载地址:程序员考试.pdf
| 留言与评论(共有 0 条评论) |