[语言类考试复习资料大全](A)初级程序员2013上半年下午试题_第1页
[语言类考试复习资料大全](A)初级程序员2013上半年下午试题_第2页
[语言类考试复习资料大全](A)初级程序员2013上半年下午试题_第3页
[语言类考试复习资料大全](A)初级程序员2013上半年下午试题_第4页
[语言类考试复习资料大全](A)初级程序员2013上半年下午试题_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、书山有路勤为径,学海无涯苦作舟。祝愿天下莘莘学子:学业有成,金榜题名!语言类考试复习资料大全(A)初级程序员2013上半年下午试题(A)初级程序员2013上半年下午试题试题一说明 平面上一个封闭区域内稳定的温度函数式一个调和函数,如果区域边界上各点的温度是已知的(非常数),那么就可以用数值方法近似地计算出区域内各点的温度(非负数)。 假设封闭区域是矩形,可将整个矩形用许多横竖线切分成比较细小的网格,并以最简单的方式建立坐标系统,从而可以将问题描述为:已知调和函数u(i,j)在矩形0im;0jn)四边上的值,求函数u在矩形内部各个网格点i=1,m-1;j=1,n-1)上的近似值。 根据调和函数的

2、特点可以推导出近似算式:该矩形内任一网格点上的函数值等于其上下左右四个相邻网格点上函数值的算术平均值。这样,我们就可以用迭代法来进行数值计算了。首先将该矩形内各网格点上的函数值设置为一个常数,例如u(0,0);然后通过该迭代式计算矩形内个网格点上的新值。这样反复进行迭代计算,若某次迭代后所有的新值与原值之差别都小于预定的要求(例如0.01),则结束求解过程。 流程图 1.答案:0或任意一个负数2.答案:(u(i,j+1)+u(i,j-1)+u(i-1,j)+u(i+1,j)43.答案:max4.答案:new或(u(i,j+1)+u(i,j-1)+u(i-1,j)斗u(i+1,j)/4或等价表示

3、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,j)-new|的值赋值给max,所以填max,(4)若|u(i,j)-new|max不成立,则将new或者(u(i,j+1)+u(i,j-1)+u(i-1,j)+u(i+1,

4、j)/4赋值给u(i,j)。(5)循环结束,判断max是否小于0.01,故填max。如果成立,则迭代算法结束,若不成立,则继续迭代算法。试题二阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。 说明 函数GetDateld(DATE date)的功能是计算并返回指定合法日期date是其所在年份的第几天。例如,date表示2008年1月25日时,函数的返回值为25,date表示2008年3月3日时,函数返回值为63。 函数Kday_Date(int theyear,int k)的功能是计算并返回指定合法年份theyear(theyear1900)的第k天(1k365)所对应的日

5、期。例如,2008年的第60天是2008年2月29日,2009年的第60天是2009年3月1日。 函数isLeapYear(int y)的功能是判断y代表的年份是否为闰年,是则返回1,否则返回0。 DATE类型定义如下: typedef struct int year,month,day; DATE; C函数1 int GetDateld(DATE date) Const int days_month13=0,31,28,31,30,31,30,31,31,30,31,30,31; int i,date id=date.day; for(i=0;i_;i+) date_id+=days_mon

6、thi; if(_ return date_id; C函数2 _Kday_Date(int theyear,int k) int i; DATE date; int days_month13=0,31,28,31,30,31,30,31,31,30,31,30,31); assert(k=1*不满足断言时程序终止* date.year=_; if(isLeapYear(date.year)days_month2+; for(i=1;) k=k-days_monthi+; if(k=0)date.day=k+_;date.month=i-1;break; return date; 1.答案:da

7、te.month2.答案:date.month2或其等价形式3.答案:DATE4.答案:theycar5.答案:days_monthi-1或其等价形式解析 本题考查的知识点是填写程序,本题的程序的功能是计算出某个日期为该年的第几天和某年的第几天是该年的几月几号。函数1是填写GctDateld这个函数,其中的for循环函数的功能是汁算该日期是该年的第几天,所以(1)应填date.month,但是是在普通年份下计算的,接下来的if条件语句是判断该年份是甭为闰年,若为闰年且超过2月份,则需要在原来的基础上再加一天,若不是闰年或者没超过2月份则不用加一天,所以(2)应填date.month2。函数2是

8、某年的第k天对应的日期,首先要定义下Kday_Date函数,该函数符合DATE类型,所以用DATE定义该函数,(3)应填DATE,(4)是将date.year赋值为theyear,所以应该填theyear,接下来k=k-days_monthi+是计算日期,如果k0,则k=k-davs_monthi+,若k=0,则date.day=days_monthi-1,故(5)应该填days_monthi-1。试题三阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。 说明 埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2

9、是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。 下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sievei(i0)的下标i对应自然数i,sievei的值为1/0分别表示i在不在序列中,也就是将i划去(去掉)时,就将sievei设置为0。 C程序 #includestdio.h #define N 10000 int main() char sieveN+1=

10、0; int i=0,k; *初始时2N都放入sieve数组* for(i=2;_;i+) sievei=1; for(k=2;) *找出剩下的数中最小者并用K表示* for(;kN+1_); if(_)break; print(%dt,k);*输出素数* *从sieve中去掉k及其倍数* for(i=k;iN+1;i=_) _; return 0; * end of main* 1.答案:iN+1或其等价形式2.答案:k+或+k或其等价形式3.答案:kN或kN+1或其等价形式4.答案:i+k或其等价形式5.答案:sievei=0或其等价形式解析 本题要求是完成程序,该程序的功能是找到不超过自

11、然数N的所有索数。首先在初始时2N都放入sieve数组中,所以i的取值范围为2N,包含N,所以(1)应该填i的最大取值为N,所以(1)填iN+1或者iN,并赋值sievei=1,表示所有的数,无论是否为素数都放入数组中,接F来找出剩下的数中最小者并用K表示,在for循环中,每执行一次循环就k值就要加1,所以(2)应该填k+或+k或其等价形式,当循环执行到kN或kN+1时,即k值超过了N值时,该循环结束用break跳出里而的循环语句,故(3)应该填kN或kN+1或其等价形式,接下来输出素数再删除素数的倍数,这也是一个循环语句,此时变量i是从i开始到i+k结束,所以(4)应填i+k或其等价形式,找

12、到是素数的倍数后,再将该素数的倍数赋值为0,从sicvei数组中划去,所以(5)应填sievei=0或其等价形式。试题四阅读以下说明和C程序,填充函数中的空缺,将解答填入答题纸的对应栏内。 说明 N个游戏者围成一圈,从1N顺序编号,游戏方式如下;从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。 下面的函数playing(Linklist head)模拟上述游戏过程并返回获胜者的编号。其中,N个人围成的圈用一个包含N个结点的单循环链表来表示,如图所示,游戏者的编号放在结点的数据域中。 在函数中,以删除结点来模拟游戏者退出圈子的处理。整型变量c

13、(初值为1)用于计数,指针变量p的初始值为head,如图所示。游戏时,从p所指向的结点开始计数,p沿链表中的指针方向遍历结点,c的值随p的移动相应地递增。当c计数到2时,就删除p所指结点的下一个结点(因下一个结点就表示报数到3的游戏者),如图所示,然后将c设置为0后继续游戏过程。 结点类型定义如下: typedef struct node int code; *游戏者的编号* struct node*next; NODE,*LinkList; C函数 int playing(LinkList head, int n) /*head指向含有n个结点的循环单链表的第一个结点(即编号为1的游戏者)*

14、 LinkList p=head,q; int thewinner,c=1; while(n_) if(c=2) *当c等于2时,p所指向结点的后继即为将被删除的结点* q=p-next; p-next=_; printf(%dt,q-code);*输出退出圈子的游戏者编号* free(q); c=_; n-; * if* p=_; c+; * while* theWinner=_; free(p); return theWinner;*返回最后一个游戏者(即获胜者)的编号* 1.答案:12.答案:q-next或p-next-next3.答案:04.答案:p-next5.答案:p-code解析

15、 本题要求完成程序,该程序的功能是删除报号为3的结点,直到剩下一个结点为止。while语句中的n的取值范围从1到N,又因为whtle语句先执行中括号里的语句在判断n值,所以(1)应填n1,while语句中的if条件语句是判断p指向的下一结点是否该删除,若当c为2时,则p指向的当前结点报号为2,p指向的下一个结点,即p-next的报号应为3,该删除,这时应该将p-next的指向c为3的结点的下一个结点,即p-next-next,再将p-next删除,所以(2)应该填p-next-next,删除p-next之后将开始新一轮的报数,根据题意,将c值重新设置为0后继续,所以(3)对c重新赋值,应该填0

16、,此时,n个数已经删去一个数,所以n的值相应的要减少,if语句执行完后,跳出if语句,将p重新赋值,即(4)p=p-next,当从1到n都执行一遍后,会有一个人留下,即为获胜者,(5)是给获胜者编号赋值所以应该填p-code,最后返回获胜者编号,该程序执行完毕。试题五阅读下列说明和C+代码,填充代码中的空缺,将解答填入答题纸的对应栏内。 说明 某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即GPA=Wg+Ag。 设一个学生共修了n门课程,则其加权平均成绩(Wg)定义如下: 其中,gradei、Ci分别表示该学生第i门课程的

17、百分制成绩及学分。 学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加m项学科竞赛): 其中,li和si分别表示学生所参加学科竞赛的级别和成绩。 对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。 下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Student描述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛

18、的学生由类CmpStudcnt描述,其各项竞赛的成绩信息由awards表示。 C+代码 #includestring #includeiostream uslng namespace std; const int n=5; *课程数* const int m=2; *竞赛项目数* class Student protected; int stuNo;string name; double GPA; *综合成绩* int(*grades)2; *各门课程成绩和学分* public: Student(const int stuNo,const stringthis-name=name;this-g

19、rades=grades; VirtualStudent() int getstuNo()*实现略* string getName()*实现略* _; double computeWg() int totalGrades=0,totalCredits=0; for(int i=0;iN;i+) totalGrades+=gradesi0*gradesi1;totalGredits+=gradesi1; return GPA=(double)totalGrades/totalCredits; ; class ActStudent;public Student int Apoints; publi

20、c; ActStudent(const int stuNo,const string double getGPA()(return GPA=_; ); class CmpStudent:public Student private; int(*awards)2; public: CmpStudent(const int stuNo,const string double getGPA() int Awards=0; for(int i=0;iM;i+) Awards+=awardsi0*awardsi1; Return GPA=_; ; int main() 以计算3个学生的综合成绩为例进行测

21、试 int g12=80,3,90,2,95,3,85,4,86,3, 922=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;i3;i+) cout_endl; delete*stucient;

22、 return 0; 1.答案:virtual double getGPA()=02.答案:Student(stuNo,name,gs)3.答案:computeWg()+Apoints或Student:computeWg()+Apoints4.答案:Student(stuNo,name,gs)5.答案:computeWg()+Awards或Student:comp-uteWg()+Awards6.答案:studcntsi-getGPA()解析 本题的程序功能是计算学生的综合成绩(GPA)其中GPA由其课程加权平均成绩Wg与附加分Ag构成,即GPA=Wg+Ag。首先定义了一个getGPA()函数

23、并为函数赋初始为0,(1)填virtual double getGPA()=0,其中virtual是指在windows下C+的开发环境,double定义了GPA的值都为双精度浮点数。(2)是计算学生的活动的附加分,调用Student()函数,括号内的变量用已经定义过的变量名替代,即Student(stuNo,name,gs)。在Student()函数中调用了getGPA函数,引用了题目中给的公式GPA=Wg+Ag,所以(3)应填computeWg()+Apoints。(4)是计算学生竞赛的附加分的函数,其中又调用了一次Student函数,所以同(2)一样填Student(stuNo,name,

24、gs)。(5)同(3)一样,是在Student函数中调用了ger-GPA函数,引用了题目中给的公式GPA=Wg+Ag,所以(5)应填computeWg()+Awards,与(3)不同的是,这次wg加的是竞赛的附加分。(6)是在主函数的for循环里面,由于共有3个学生,所以i的取值范围为03,并将studentsi的值赋值给GPA,所以(6)应填studentsi-getGPA()。试题六 阅读以下说明和Java程序,填充代码中的空缺,将解答填入答题纸的对应档内。 说明 某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即GPA

25、=Wg+Ag。 设一个学生共修了n门课程,则其加权平均成绩(Wg)定义如下: 其中,gradei、Ci分别表示该学生第i门课程的百分制成绩及学分。 学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加m项学科竞赛): 其中,li和si分别表示学生所参加学科竞赛的级别和成绩。 对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。 下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Student描述,包括学号(stuNo)、姓名(name)、课程成绩学分(

26、grades)和综合成绩(GPA)等,参加社会活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛的学生由类CmpStudent描述,其各项竞赛的成绩信息由awards表示。 Java代码 abstract class Student protected String name; protected int stuNo; protected double GPA; *综合成绩* protected intgrades; *各门课程成绩和学分* 其他信息略 public Student(int stuNo,String name,intgrades) this.st

27、uNo=stuNo;=name;this.grades=grades; _; double computeWg() int totalGrades=0,totalCredits=0; for(int i=0;igrades.length;i+) totalGrades+=gradesi0*gradesi1; totalCredits+=gradesi1; return(double)totalGrades/totalCredits; class ActStudent extends Student private int Apoints; ActStudent(int stu

28、No,String name,intgrades,int Apoints) _; this.Apoints=Apoints; public double getGPA() return GPA=_; ) Class CmpStudent extends Student( Private intAwards; CmpStudent(int stuNo,String name,intgrades,intawards) _; this.Awards=awards; public double getGPA() int totalAwards=0; for(int I=0;iAwards.length;i+) totalAwards+=Awardsi0*Awardsi1; return GPA=_; public class GPASystem以计算3个学生的综合成绩为例进行测试 public static void main(String args) 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;课程成绩 inte1=2,3,1,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论