【计算机类职业资格】计算机水平考试初级程序员2013年上半年下午真题及答案解析.doc
《【计算机类职业资格】计算机水平考试初级程序员2013年上半年下午真题及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】计算机水平考试初级程序员2013年上半年下午真题及答案解析.doc(7页珍藏版)》请在麦多课文档分享上搜索。
1、计算机水平考试初级程序员 2013 年上半年下午真题及答案解析(总分:90.00,做题时间:150 分钟)一、必答题(共 4 道大题,每道大题 15 分)(总题数:4,分数:60.00)1.阅读以下说明和流程图,填补流程图中的空缺(1)(5),将解答填入答题纸的对应栏内。 【说明】 平面上一个封闭区域内稳定的温度函数式一个调和函数,如果区域边界上各点的温度是已知的(非常数),那么就可以用数值方法近似地计算出区域内各点的温度(非负数)。 假设封闭区域是矩形,可将整个矩形用许多横竖线切分成比较细小的网格,并以最简单的方式建立坐标系统,从而可以将问题描述为:已知调和函数 u(i,j)在矩形0im;0
2、jn)四边上的值,求函数 u 在矩形内部各个网格点i=1,m=1;j=1,n=1上的近似值。 根据调和函数的特点可以推导出近似算式:该矩形内任一网格点上的函数值等于其上下左右四个相邻网格点上函数值的算术平均值。这样,我们就可以用迭代法来进行数值计算了。首先将该矩形内各网格点上的函数值设置为一个常数,例如 u(0,0);然后通过该迭代式计算矩形内个网格点上的新值。这样反复进行迭代计算,若某次迭代后所有的新值与原值之差别都小于预定的要求(例如 001),则结束求解过程。 【流程图】 (分数:15.00)_2.阅读以下说明和 C 函数,填充函数中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数G
3、etDateld(DATE date)的功能是计算并返回指定合法日期 date 是其所在年份的第几天。例如,date 表示2008 年 1 月 25 日时,函数的返回值为 25,date 表示 2008 年 3 月 3 日时,函数返回值为 63。 函数Kday_Date(int theyear,int k)的功能是计算并返回指定合法年份 theyear(theyear1900)的第 k 天(1k365)所对应的日期。例如,2008 年的第 60 天是 2008 年 2 月 29 日,2009 年的第 60 天是 2009 年3 月 1 日。 函数 isLeapYear(int y)的功能是判断
4、 Y 代表的年份是否为闰年,是则返回 1,否则返回 0。 DATE 类型定义如下: typedef struct int year,month,day; DATE; 【C 函数 1】 int GetDateId(DATE date) Const int days_month13=0,31,28,31,30,31,30,31,31,30,31,30,31; int i,date_id=dateday; for(i=0;i=1&k=1900);*不满足断言时程序终止* dateyear=_(4)_; if(isLeapYear(dateyear)days_month2+; for(i=1;) k=
5、kdays_monthi+; if(k0)的下标 i 对应自然数 i,sievei的值为 10 分别表示 i 在不在序列中,也就是将 i 划去(去掉)时,就将 sievei设置为 0。 【C 程序】 #includestdioh #define N 10000 int main() char sieveN+1=0); int i=0,k; *初始时 2N 都放入 sieve 数组* for(i=2;_(1)_;i+) sievei=1; for(k=2;) *找出剩下的数中最小者并用 K 表示* for(;kN+1&sievek=0;_(2)_); if(_(3)_)break; print(
6、“dt”,k);*输出素数* *从 sieve 中去掉 k 及其倍数* for(i=k;iN+1;i=_(4)_) _(5)_; return 0; / *end of main* /(分数:15.00)_4.阅读以下说明和 C 程序,填充函数中的空缺,将解答填入答题纸的对应栏内。 【说明】 N 个游戏者围成一圈,从 1N 顺序编号,游戏方式如下;从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。 下面的函数 playing(Linklist head)模拟上述游戏过程并返回获胜者的编号。其中,N 个人同成的圈用一个包含 N 个结
7、点的单循环链表来表示,如图 41 所示,游戏者的编号放在结点的数据域中。 在函数中,以删除结点来模拟游戏者退出圈子的处理。整型变量 c(初值为 1)用于计数,指针变量 P 的初始值为 head,如图 4 一 1 所示。游戏时,从 P 所指向的结点开始计数,P 沿链表中的指针方向遍历结点,c 的值随 P 的移动相应地递增。当 c 计数到 2 时,就删除 P 所指结点的下一个结点(因下一个结点就表示报数到 3 的游戏者),如图 42 所示,然后将 C 设置为0 后继续游戏过程。 (分数:15.00)_二、选答题(总题数:2,分数:30.00)5.阅读下列说明和 C+代码,填充代码中的空缺,将解答填
8、入答题纸的对应栏内。 【说明】 某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即 GPA=Wg+Ag。 设一个学生共修了 n 门课程,则其加权平均成绩(Wg)定义如下: 其中,gradei、Ci分别表示该学生第 i 门课程的百分制成绩及学分。 学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加 m 项学科竞赛): 其中,li 和 Si 分别表示学生所参加学科竞赛的级别和成绩。 对于社会活动和学科竞赛都不参
9、加的学生,其附加分按活动分为 0 计算。 下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类 Student 描述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会活动的学生由类 ActStudent 描述,其活动分由 Apoints 表示,参加学科竞赛的学生由类 CmpStudent 描述,其各项竞赛的成绩信息由 awards 表示。 【C+代码】 #include #include using namespace std; const int n=5; *课程数* const int m=2; *竞赛项目数* class
10、Student protected: int stuNo;string name; double GPA; *综合成绩* int(*grades)2; *各门课程成绩和学分* public: Student(const int stuNo,const string&name,int grades2) this-stuNo=stuNo;this-name=name;this-grades=grades; VirtualStudent() int getstuNo()*实现略* string getName()*实现略* _(1)_; double computeWg() int totalGra
11、des=0,totalCredits=0: for(int i=0;iN;i+) totalGrades+=gradesi0*gradesi1;totalGredits+=gradesi1; return GPA=(double)totalGradestotalCredits; ;class ActStudent;public Student int Apoints; public; ActStudent(const int stuNo,const string&name,int gs2,int Apoints) :_(2)_ this-Apoints=Apoints: double getG
12、PA()return GPA=_(3)_; ; class CmpStudent:public Student private: int(*awards)2; public: cmpstudent(const int stuNo,const string&name,int gs2,int awards2) :_(4)_ this-award=award; double getGPA()f int Awards=0; for(int i=0;iM;i+) Awards+=awardsi0*awardsi1: Return GPA=_(5)_; ; int main() 以计算 3 个学生的综合成
13、绩为例进行测试 int g12=80,3,90,2,95,3,85,4,86,3, g22=60,3,60,2),60,3,60,4,65,3, g32=80,3,(90,2,70,3,65,4,75,3; 课程成绩 int c32=2,3,3,3); 竞赛成绩 Student*student3= new ActStudent(101,”John”,g1,3), 3 为活动分 new ActStudent(102,”Zhang”,g2,0), new ActStudent(103,”Li”,g3,c3), ; 输出每个学生的综合成绩 for(int i=0;i_6.阅读以下说明和 Java 程
14、序,填充代码中的空缺,将解答填入答题纸的对应档内。 【说明】 某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即 GPA=Wg+Ag。 设一个学生共修了 n 门课程,则其加权平均成绩(Wg)定义如下: 其中,gradei、Ci 分别表示该学生第 i 门课程的百分制成绩及学分。 学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加 m 项学科竞赛): 其中,li 和 Si 分别表示学生所参加学科竞赛的级别和成绩
15、。 对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为 0 计算。 下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类 Student 描述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会活动的学生由类 ActStudent 描述,其活动分由 Apoints 表示,参加学科竞赛的学生由类 CmpStudent 描述,其各项竞赛的成绩信息由 awards 表示。 Java 代码】 abstract class Student protected String name; protected int stuNo; prot
16、ected double GPA; *综合成绩* protected intgrades; *各门课程成绩和学分* 其他信息略 public Student(int stuNo,String name,intgrades) thisstuNo=stuNo;thisname=name;thisgrades=grades; _(1)_; double computeWg() int totalGrades=0,totalCredits=0: for(int i=0;igradeslength;i+) totalGrades+=gradesi0*gradesi1; totalCredits+=gra
17、desi1; return(double)totalGradestotalCredits; class ActStudent extends Student private int Apoints; ActStudent(int stuNo,String name,intgrades,int Apoints) _(2)_; thisApoints=Apoints; public double getGPA() return GPA=_(3)_; Class CmpStudent extends Student Private intAwards; CmpStudent(int stuNo,St
18、ring name,intgrades,intawards) _(4)_; thisAwards=awards; publ ic double getGPA() int totalAwards=0; for(int I=0;iAwardslength;i+) totalAwards+=Awardsi0*Awardsi1; return GPA=_(5)_; public class GPASystem以计算 3 个学生的综合成绩为例进行测试 public static void main(Stringargs) int g12=80,3),90,2,95,3,85,4,86,3), g22=6
19、0,3),60,2,60,3,60,4,65,3), g32=80,3,90,2,(70,3,65,4,75,3);课程成绩 inte1=2,3,1,2),e2=1,3);竞赛成绩 Student student= new ActStudent(i01,”John”,g1,3),3 为活动分 new ActStudent(102,”Zhang”,g2,0), new ActStudent(103,”Li”,g3,e2), ; 输出每个学生的综合成绩 for(int i=0;istudentlength;i+) Systemoutprintln(_(6)_); (分数:15.00)_计算机水平考
20、试初级程序员 2013 年上半年下午真题答案解析(总分:90.00,做题时间:150 分钟)一、必答题(共 4 道大题,每道大题 15 分)(总题数:4,分数:60.00)1.阅读以下说明和流程图,填补流程图中的空缺(1)(5),将解答填入答题纸的对应栏内。 【说明】 平面上一个封闭区域内稳定的温度函数式一个调和函数,如果区域边界上各点的温度是已知的(非常数),那么就可以用数值方法近似地计算出区域内各点的温度(非负数)。 假设封闭区域是矩形,可将整个矩形用许多横竖线切分成比较细小的网格,并以最简单的方式建立坐标系统,从而可以将问题描述为:已知调和函数 u(i,j)在矩形0im;0jn)四边上的
21、值,求函数 u 在矩形内部各个网格点i=1,m=1;j=1,n=1上的近似值。 根据调和函数的特点可以推导出近似算式:该矩形内任一网格点上的函数值等于其上下左右四个相邻网格点上函数值的算术平均值。这样,我们就可以用迭代法来进行数值计算了。首先将该矩形内各网格点上的函数值设置为一个常数,例如 u(0,0);然后通过该迭代式计算矩形内个网格点上的新值。这样反复进行迭代计算,若某次迭代后所有的新值与原值之差别都小于预定的要求(例如 001),则结束求解过程。 【流程图】 (分数:15.00)_正确答案:( (1)0 或任意一个负数 (2)(u(i,j+1)+u(i,j 一 1)+u(i 一 1,j)
22、+u(i+1,j)4 (3)max (4)new 或(u(i,j+1)+u(i,j 一 1)+u(il,j)+u(i+1,j)4 或等价表示 (5)max)解析: 解析:本题是要完成一个算法的流程。(1)是给 max 赋初始值,由于本题所涉及的数据都是非零数,故可以给 max 赋值为 0 或者为任意一个负数。(2)循环开始后,本题要算的是该矩形内任一网格点上的函数值 new,该值等于其上下左右四个相邻网格点上函数值的算术平均,所以 new 为(u(i,j+1)+u(i,j 一1)+u(i 一 1,j)+u(i+1,j)4。(3)循环继续进行,如果|u(i,j)一 new|max,则将|u(i,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 计算机水平 考试 初级 程序员 2013 上半年 下午 答案 解析 DOC
