2013上半年程序员考试真题及答案-下午卷.doc
《2013上半年程序员考试真题及答案-下午卷.doc》由会员分享,可在线阅读,更多相关《2013上半年程序员考试真题及答案-下午卷.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2013上半年程序员考试真题及答案-下午卷试题一平面上一个封闭区域内稳定的温度函数是一个调和函数。如果区域边界上各点的温度是已知的(非常数),那么就可以用数值方法近似地计算出区域内各点的温度。假设封闭区域是矩形,可将整个矩形用许多横竖线切分成比较细小的网格,并以最简单的方式建立坐标系统,从而可以将问题描述为:已知调和函数u(i,j)在矩形0im;0jn四边上的值,求函数u在矩形内部各个网格点(i,j)|i=1,m-1;j=1,n-1上的近似值。根据调和函数的特点可以推导出近似算式:该矩形内任一网格点上的函数值等于其上下左右四个相邻网格点上函数值的算术平均值。这样,我们就可以用迭代法来进行数值计
2、算了。首先将该矩形内部所有网格点上的函数值设置为一个常数,例如u(0,0);然后通过该迭代式计算矩形内各网格点上的新值。这样反复进行迭代计算,若某次迭代后所有的新值与原值之差别都小于预定的要求(如0.01),则结束求解过程。阅读以上说明和流程图,填补流程图中的空缺(1)(5),将解答填入答题纸的对应栏内。(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分)本题考查算法(数值计算)流程的描述。
3、封闭区域内稳定(没有奇异点)的温度场、磁场等都是调和函数。已知边界上的值,就可以近似计算区域内各点的值。对于网格化后的矩形区域0im;0jn,其边界点为(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(ij)均等于常数u(0,0)。每次迭代需要再计算出所有内点处的u(ij)新值。为了检查迭代能否结束,需要算出所有内点处函数u的新值与旧值之差的绝对值是否都小于0.01(或判断其最大值是否小于0.01)。为此,每次算出的新
4、值需要先暂存于一个临时变量new。它应是点(ij上下左右四个点处u值的算术平均值,因此(2)处应填(u(i,j+1)+u(i,j-1)+u(i-1,j)+u(i+1,j)/4。为了计算本次迭代中新老值之差的绝对值|u(ij)-new|的最大值max,需要先对max赋一个不可能再低的值(由于绝对值总是非负,所以max常先存0)。因此(1)处可以填0(填任何一个负数也是可以的)。当某个内点处新老u值之差的绝对值超过max时,就需要将该值赋给max。因此,(3)处应填max。不管是否更新了max,此后新值就可以替代老值了。因此(4)处应填newo(5)处应填本次迭代求出的最大值max,以判断它是否小
5、于0.01,是否达到了近似要求。如果已经达到误差要求,则计算结束,所有的u(ij)就是计算结果。否则,还需要继续进行迭代。试题二函数GetDateId(DATEdate)的功能是计算并返回指定合法日期date是其所在年份的第几天。例如,date表示2008年1月25日时,函数的返回值为25,date表示2008年3月3日时,函数返回值为63。函数KdayDate(inttheyear,intk)的功能是计算并返回指定合法年份theyear(theyear1900)的第k天(1k365)所对应的日期。例如,2008年的第60天是2008年2月29日,2009年的第60天是2009年3月1日。函数
6、isLeapYear(inty)的功能是判断y代表的年份是否为闰年,是则返回1,否则返回0。DATE类型定义如下:填充函数中的空缺,将解答填入答题纸的对应栏内。(1)date.month(2) date.month2或其等价形式(3) DATE(4) theyear(5) days_monthi-1或其等价形式本题考查c程序的基本语法和运算逻辑。函数GetDateId(DATE date)的功能是计算并返回指定合法日期date是其所在年份的第几天。处理思路是:先将1月date.month-l月的天数累加起来,然后加上date.month的天数date.day即可。若date.month2,则需
7、要考虑特殊情况2月份,在闰年为29天而不是28天。因此,空(1)处应填入date.month,空(2)处应填入date.month2。函数Kday_Date(int theyear,int k)的功能是计算并返回指定合法年份theyear (theyear1900)的第k天(1k365)所对应的日期。根据说明,显然空(3)应填入“DATE”。当k0)的下标i对应自然数i,sievei的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sievei设置为0。阅读以上说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。(1) iN或kN+1或其等价形式(4) i+k或其等价
8、形式C5)sievei=0或其等价形式本题考査c程序的运算逻辑,应用案例是埃拉托斯特尼筛法求素数。显然,空所在的for语句用于设置Sieve的初始值,根据题目描述,一开始1N范围内的自然数i都在序列中,因此对应的数组元素sievei都要设置为丨。因此,空(1)处应填入“iN”或其等价形式,表示要找的最小素数己经大于N,应结束处理。空(4)和(5)所在for语句用于将刚找出的素数k及其倍数从序列中去掉,用i表示k的倍数(包括k自己)时,i的取值为k,2k,3k在i的初值己设置为k的情况下,i的迭代方式为i=i+k,因此空(4)处应填入“i+k”,空(5)处应填入“sievei=0”试题四N个游戏
9、者围成一圈,从1N顺序编号,游戏方式如下:从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。下面的函数playing(LinkList head)模拟上述游戏过程并返回获胜者的编号。其中,N个人围成的圈用一个包含N个结点的单循环链表来表示,如图4-1所示,游戏者的编号放在结点的数据域中。在函数中,以删除结点来模拟游戏者退出圈子的处理。整型变量c(初值为1)用于计数,指针变量p的初始值为head(如图4-1所示)。游戏时,从p所指向的结点开始计数,p沿链表中的指针方向遍历结点,c的值随p的移动相应地递增。当c计数到2时,就删除P所指结点的下一个
10、结点(因下一个结点就表示报数到3的游戏者),如图4-2所示,然后将c设置为0后继续游戏过程。阅读以上说明和C程序,填充函数中的空缺,将解答填入答题纸的对应栏内。(1) 1(2) q-next或p-next-next(3) 0(4) p-next(5) p-code本题考查数据结构的应用和C程序的运算逻辑,主要涉及指针和链表。由于游戏最后剩一人时结束,因此空(1)处应填入“1”,表示N1时游戏过程要继续。当c等于2时,p所指结点的后继表示为q(q=p-next),q所指结点即为要删除的结点,即如下图所示。此时,需要修改p所指结点的指针域,令其指向q所指结点的后继结点,对应的操作为p-next=q
11、-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)则由下式计算(一个学生
12、最多可参加m项学科竞赛):其中,li和Si分别表示学生所参加学科竞赛的级别和成绩。对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Student描述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛的学生由类CmpStudent描述,其各项竞赛的成绩信息由awards表示。阅读说明和C+代码,填充代码中的空缺,将解答填入答题纸的对应栏内。(1) virtual double get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2013 上半年 程序员 考试 答案 下午
限制150内