欢迎来到麦多课文档分享! | 帮助中心 海量文档,免费浏览,给你所需,享你所想!
麦多课文档分享
全部分类
  • 标准规范>
  • 教学课件>
  • 考试资料>
  • 办公文档>
  • 学术论文>
  • 行业资料>
  • 易语言源码>
  • ImageVerifierCode 换一换
    首页 麦多课文档分享 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    【计算机类职业资格】初级程序员下午试题-103及答案解析.doc

    • 资源ID:1330065       资源大小:60.50KB        全文页数:14页
    • 资源格式: DOC        下载积分:5000积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    二维码
    微信扫一扫登录
    下载资源需要5000积分(如需开发票,请勿充值!)
    邮箱/手机:
    温馨提示:
    如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如需开发票,请勿充值!如填写123,账号就是123,密码也是123。
    支付方式: 支付宝扫码支付    微信扫码支付   
    验证码:   换一换

    加入VIP,交流精品资源
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【计算机类职业资格】初级程序员下午试题-103及答案解析.doc

    1、初级程序员下午试题-103 及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)说明下面的流程图用来说明如何利用数组求前 n个质数。要确定一个数 m是否是质数,可以用已知求出的质数对 m的整除性来确定,对于任意整数 m,如果它不能被小于它的质数整除,则 m也是质数。注:primes是质数表,已经求得的质数的个数为 pc。(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_二、试题二(总题数:1,分数:15.00)说明函数 diff的功能是:根据两个由整数(都大于-32768)按升序构成的单链表 L1和 L2(分别由

    2、 A,B 指向)构造一个单链表 L3(由*r 指向),要求 L3中的所有整数都是 L1并且不是 L2中的整数,还要求 L3中的所有整数都两两不等。函数#include malloc.htypedef struct node int d;struct node *nextNode;void diff (Node *A, Node *B, Node *r)int lastnum;Node *p;* r=NULL ;if (!A) return;while( (1) )if (A-d B-d)lastnum=A-d;p=(Node*) malloc (sizeof (Node) ;p-d=lastn

    3、um;p-next=*r; (2) ;doA=A-next ;while( (3) );else if (A-d B-d)B=B-next ;else (4) ;lastnum=A-d;while (AA-d=last num) A=A-next ;while (A)lastnum=A-d;p=(Node*) malloc (sizeof (Node) ;p-d=lastnum;(5) ;*r=p;while(AA-d=lastnum) A=A-next;(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、试题三(总题数:1,分数:15.00)说明设有

    4、一个带头结点的双向循环链表 L,每个结点有 4个数据成员:指向前驱结点的指针 prior、指向后继结点的指针 next、存放数据的成员 data和访问频度 freq。所有结点的 freq初始时都为 0。每当在链表上进行一次 L.Locate(x)操作时,令元素值 x的结点的访问频度 freq加 1,并将该结点前移,链接到现在它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。函数void Locate(int x)结点类型说明*p=first-next; while(p!=first (1) )p=p-next;if(p!=first)

    5、(2) ;结点类型说明*current=p; current-prior-next=current-next;current-next-prior=current-prior;p=current-prior;while(p!=first (3) )p=p-prior;current-next= (4) ; curren-prior=p;p-next-prior=current;p-next= (5) ; else printf(“sorry.Not find! /n“);(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、试题四(总题数:1,分数:15

    6、.00)说明假设银行整存整取存款不同期限的月息利率分别为:0.63%(1 年),0.66%(2 年),0.69%(3 年),0.75%(5年),0.84%(8 年),其中,利息=本金*月息利率*12*存款年限。现在某人手中有 2000元钱,请通过计算选择一种存钱方案,使得钱存入银行 20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。设 2000元存 20年,其中 1年存 i1次,2 年存 i2次,以此类推,则到期时存款人应得到的本利合计为:2000*(1+rate1)i1*(1+rate2)i2*(l+rate3)i3*(l+rate5)i5*(l+rate8)i8其中,

    7、rateN 为对应存款年限的利率。年限还有如下限制条件:0i820i5(20-8*i8)/5013(20-8*i8-5*i5)/30i2(20-8*i8-5*i5-3*i3)/20i1=20-8*i8-5*i5-3*i3-2*i2用穷举法穷举出所有的 i8、i5、i3、i2、i1,代入求本利的公式计算出最大值。函数#includestdio.h#includemath. hvoid main()int i8, i5, i3, i2, i1, n8, n5, n3, n2, n1;float max=0, term;clrscr(); for (i8=0;i83;i8+) /*穷举所有可能的存款

    8、方式*/for (i5=0; i5= (20-8*i8)/5;i5+)for (i3=0; (1) ; i3+)for (i2=0; (2) ; i2+)i1=20-8 *18-5 *i5-3 *i3-2 *12:(3) ; /*计算到期时的本利合计*/if( (4) )(5) ; n1=i1; n2 =i2; n3 =i3; n5=i5; n8 =i8;printf(“For maxinum profit, he should so save his money in a bank:/n“);printf(“ made fixed deposit for 8 year: %d times /

    9、n“,n8);printf(“ made fixed deposit for 5 year: %d times/n“,n5);printf(“ made fixed deposit for 3 year: %d times/n“,n3);printf(“ made fixed deposit for 2 year: %d times/n“,n2);printf(“ made fixed deposit for 1 year: %d timesYn“,n1);printf(“ Toa1: %.2f/n“, max);/*输出存款方式*/puts (“/n Press any key to qui

    10、t.”);getch(); (分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_五、试题五(总题数:1,分数:15.00)说明下面程序计算正方体、球体和圆柱体的表面积和体积。C+程序#includeiostream.hclass containerprotected:double radius;public:container(double radius)container:radius=radius;(1) ; (2) ; ; class cube: (3) public:cube(double radius):container(radius)();d

    11、ouble surface_area()return radius*radius*6;double volume()return radius*radius*radius; class sphere: public container(4) ; double surface_area()return 4*3.1416 *radius*radius;double volume()return 3.1416*radius *radius*radius*4/3; class cylinder:public containerdouble height;public:cylinder(double r

    12、adius, double height):container(radius)(5) ; double surface_area()return 2*3.1416*radius*(height+radius);double volume()return 3.1416 *radius*radius*height; void main()container *p;cube obj1(5); sphere obj2 (5); cylinder obj3(5,5); p=obj1;cout“正方体表面积:“p-surface_area()endl;cout“正方体体积:“p-volume()endl;

    13、p=obj2; cout“球体表面积:“p-surface_area()endl;cout“球体体积:“p-volume()endl;p=obj3; cout“圆柱体表面积:“p-surface_area()endl;cout“圆柱体体积:“p-volume()endl;(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_六、试题六(总题数:1,分数:15.00)说明下面程序定义了一个类 Point及其成员函数,然后从类 Point派生出类 Circle及其成员函数。Java程序class Mainjavapublic static void main (

    14、String arg)Circle c=new Circle(2.5,3.7,4.3);System.out.println(“ X coordinate is “+c.getX()+“/nRadius is: “+c.get Radius(); (1) ; /设置新的圆心(2,2)Point pRef=c;System.out.println(“/n Circle printed as a point is : “+“+ (2) +“.“+ (3) +“):class Point protected double x,y;public Point (double a, double b) x

    15、 = a; y = b;)void setPoint (double a, double b) x = a; y = b; final double getX () return x; final double getY () return y; class Circle (4) protected double radius;public Circle(double r, double a, double b) (5) ;radius=r ;void setRadius (double r) radius=r; final double getRadius () return radius;

    16、 final double area () return 3.14159*radius*radius; (分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_初级程序员下午试题-103 答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)说明下面的流程图用来说明如何利用数组求前 n个质数。要确定一个数 m是否是质数,可以用已知求出的质数对 m的整除性来确定,对于任意整数 m,如果它不能被小于它的质数整除,则 m也是质数。注:primes是质数表,已经求得的质数的个数为 pc。(分数:15.00)填空项 1:_ (正确答

    17、案:PCn;)解析:填空项 1:_ (正确答案:mprimespc-1*primespc-1;)解析:填空项 1:_ (正确答案:k=1;)解析:填空项 1:_ (正确答案:k=k+1;)解析:填空项 1:_ (正确答案:primespc+=m;)解析:解析 本题考查的是流程图。通过阅读流程图,我们可以大致判断出该流程图的思路。首先我们要求的是前 n个质数,所以就要判断已经求得的质数的个数 pc是否已经为 n个,即空(1)应该填入 pcno 如果小于 n,那么进入下一步的判断,即进入了子流程图。子流程图的功能是:调整 m,使 m成为下一个质数,在进行完这个步骤后,得到的 m就是下一个质数,所以

    18、空(5)应该填入 primespctt=m。在子流程图中,主要任务是找到另一个质数,可以用已知求出的质数对 m的整除性来确定,对于任意整数 m,如果它不能被小于它的质数整除,则 m也是质数,所以空(2)应该填入 mprimespc-1*primespc-1。然后开始判断 m是否能被 primesk整除。如果可以,则说明它不是质数,那么 m加 2,从 k=1开始,进行下一次判断,即空(3)填入 k=1。如果 m不能被 primesk整除,那么判断 m能否被下一个 primesk整除,即空(4)填入 k=k+1。二、试题二(总题数:1,分数:15.00)说明函数 diff的功能是:根据两个由整数(

    19、都大于-32768)按升序构成的单链表 L1和 L2(分别由 A,B 指向)构造一个单链表 L3(由*r 指向),要求 L3中的所有整数都是 L1并且不是 L2中的整数,还要求 L3中的所有整数都两两不等。函数#include malloc.htypedef struct node int d;struct node *nextNode;void diff (Node *A, Node *B, Node *r)int lastnum;Node *p;* r=NULL ;if (!A) return;while( (1) )if (A-d B-d)lastnum=A-d;p=(Node*) ma

    20、lloc (sizeof (Node) ;p-d=lastnum;p-next=*r; (2) ;doA=A-next ;while( (3) );else if (A-d B-d)B=B-next ;else (4) ;lastnum=A-d;while (AA-d=last num) A=A-next ;while (A)lastnum=A-d;p=(Node*) malloc (sizeof (Node) ;p-d=lastnum;(5) ;*r=p;while(AA-d=lastnum) A=A-next;(分数:15.00)填空项 1:_ (正确答案:AB)解析:填空项 1:_ (正

    21、确答案:*r=p)解析:填空项 1:_ (正确答案:AA-d=lastnum)解析:填空项 1:_ (正确答案:B=B-next)解析:填空项 1:_ (正确答案:p-next=*r)解析:解析 函数的功能在函数说明已经讲得很清楚了,这里就不再重复了。程序的思路是:从链表 A取一个元素和链表 B中第一个元素进行比较,如果链表 A元素小于链表 B的元素,则将链表 A中元素插入到链表 C中,指针后移,在后移时要屏蔽所有相同元素; 如果链表 A元素大于链表 B的元素,将链表 B指针后移; 如果链表 A元素等于链表 B的元素,链表 A和链表 B的指针都向后移,而且要屏蔽链表 A中所有相同元素。当链表

    22、A和链表 B都没有结束时,循环执行上述操作。如果链表 B已经到链尾,但链表 A没有结束,则将链表 A中的剩余元素加入到链表 C中,同时也要屏蔽所有相同元素。根据上面的分析,空(1)处需要填写循环条件,显然是链表 A没有结束而且链表 B也没有结束,即“A!=NULLB!=NULL”或 AB 或其等价形式。至(2)所在的语句块是处理链表 A元素小于链表 B的元素的情况,需要将链表 A中元素插入到链表 C中,在它的前一条语句已经把这个结点后继指针指向链表 C的第一个结点,这里需要将链表 C的第一个结点设置成该结点,即“*r=p”。空(3)处所在 do.while循环的目的是屏蔽所有相同元素,需要写出

    23、这个循环的条件,显然是当一个结点的值不等于刚刚插入的结点的值或链表 A已经到了链尾时就要退出循环。因此空(3)处应填写“AA-d= =lastnum”及其等价形式。空(4)所在语句块是处理链表 A元素等于链表 B元素的情况,链表 A和链表 B的指针都向后移,而且要屏蔽链表 A中所有相同元素。链表 A的指针向后移已经写出,因此,空(4)应填写“B=B-next”。至(5)所在 while循环是处理链表 B已经到链尾,但链表 A没有结束的情况。这时需要将链表 A中的剩余元素加入到链表 C中,插入的方法和空(2)处所在语句块插入方法一致。空(5)需将要插入结点的指针域指向链表 C的头指针*r,因此空

    24、(5)处应填写“p-next=*r”。三、试题三(总题数:1,分数:15.00)说明设有一个带头结点的双向循环链表 L,每个结点有 4个数据成员:指向前驱结点的指针 prior、指向后继结点的指针 next、存放数据的成员 data和访问频度 freq。所有结点的 freq初始时都为 0。每当在链表上进行一次 L.Locate(x)操作时,令元素值 x的结点的访问频度 freq加 1,并将该结点前移,链接到现在它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。函数void Locate(int x)结点类型说明*p=first-next

    25、; while(p!=first (1) )p=p-next;if(p!=first) (2) ;结点类型说明*current=p; current-prior-next=current-next;current-next-prior=current-prior;p=current-prior;while(p!=first (3) )p=p-prior;current-next= (4) ; curren-prior=p;p-next-prior=current;p-next= (5) ; else printf(“sorry.Not find! /n“);(分数:15.00)填空项 1:_

    26、(正确答案:p-data!=x)解析:填空项 1:_ (正确答案:p-freq+)解析:填空项 1:_ (正确答案:current-freqp-freq)解析:填空项 1:_ (正确答案:p-next)解析:填空项 1:_ (正确答案:current)解析:解析 空(1)所在的循环是定位 x,将指针指向 x结点,即应填 p-data!=x。空(2)是使该结点的访问频度加 1,即应填 p-freq+。空(3)所在的循环是根据访问频度定位 x结点的新位置,用 P指向 x结点的前驱,应填 current-freqp-freqo 空(4)、空(5)之间的语句是将结点 x插入到 P之后,则空(4)填 p

    27、-next,空(5)填 current。四、试题四(总题数:1,分数:15.00)说明假设银行整存整取存款不同期限的月息利率分别为:0.63%(1 年),0.66%(2 年),0.69%(3 年),0.75%(5年),0.84%(8 年),其中,利息=本金*月息利率*12*存款年限。现在某人手中有 2000元钱,请通过计算选择一种存钱方案,使得钱存入银行 20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。设 2000元存 20年,其中 1年存 i1次,2 年存 i2次,以此类推,则到期时存款人应得到的本利合计为:2000*(1+rate1)i1*(1+rate2)i2*(

    28、l+rate3)i3*(l+rate5)i5*(l+rate8)i8其中,rateN 为对应存款年限的利率。年限还有如下限制条件:0i820i5(20-8*i8)/5013(20-8*i8-5*i5)/30i2(20-8*i8-5*i5-3*i3)/20i1=20-8*i8-5*i5-3*i3-2*i2用穷举法穷举出所有的 i8、i5、i3、i2、i1,代入求本利的公式计算出最大值。函数#includestdio.h#includemath. hvoid main()int i8, i5, i3, i2, i1, n8, n5, n3, n2, n1;float max=0, term;clr

    29、scr(); for (i8=0;i83;i8+) /*穷举所有可能的存款方式*/for (i5=0; i5= (20-8*i8)/5;i5+)for (i3=0; (1) ; i3+)for (i2=0; (2) ; i2+)i1=20-8 *18-5 *i5-3 *i3-2 *12:(3) ; /*计算到期时的本利合计*/if( (4) )(5) ; n1=i1; n2 =i2; n3 =i3; n5=i5; n8 =i8;printf(“For maxinum profit, he should so save his money in a bank:/n“);printf(“ made

    30、 fixed deposit for 8 year: %d times /n“,n8);printf(“ made fixed deposit for 5 year: %d times/n“,n5);printf(“ made fixed deposit for 3 year: %d times/n“,n3);printf(“ made fixed deposit for 2 year: %d times/n“,n2);printf(“ made fixed deposit for 1 year: %d timesYn“,n1);printf(“ Toa1: %.2f/n“, max);/*输

    31、出存款方式*/puts (“/n Press any key to quit.”);getch(); (分数:15.00)填空项 1:_ (正确答案:i3=(20-8*18-5*i5)/3)解析:填空项 1:_ (正确答案:i2=(20-8*i8-5*i5-3*i3)/2)解析:填空项 1:_ (正确答案:term=2000.0*pow(1+0.0063*12),i1)*pow(1+2*0.0063*i2),i2)*pow(1+3*0.0069*12),i3)*pow(1+5*0.0075*12),i5)*pow(1+8*0.0084*12),i8))解析:填空项 1:_ (正确答案:term

    32、max)解析:填空项 1:_ (正确答案:max=term)解析:解析 根据题目给出的条件,以及已知的程序部分,我们可以得出内层循环的控制条件,空(1)应该填入 i3=(20-8*i8-5*i5)/3,空(2)应该填入 i2=(20-8*18-5*i5-3*i3)/2。函数说明中已经给出了求解利息的公式,这里我们只要熟悉 C语言的函数就可以表达出公式了,空(3)应该填入term=2000.0*pow(+0.0063*12),i1)*pow(1+2*0.0063*12),i2)*pow(1+3*0.0069*12),i3)*pow(1+5*0.0075*12),15)*pow(1+8*0.008

    33、4*12),i8);每次计算出一个利息值后,应将其与目前保存的最大值比较,所以空(4)应该填入 termmax,如果计算出的值大于目前的最大值,那么就要将刚计算出来的值赋给max,所以空(5)要填入 max=term。五、试题五(总题数:1,分数:15.00)说明下面程序计算正方体、球体和圆柱体的表面积和体积。C+程序#includeiostream.hclass containerprotected:double radius;public:container(double radius)container:radius=radius;(1) ; (2) ; ; class cube: (3

    34、) public:cube(double radius):container(radius)();double surface_area()return radius*radius*6;double volume()return radius*radius*radius; class sphere: public container(4) ; double surface_area()return 4*3.1416 *radius*radius;double volume()return 3.1416*radius *radius*radius*4/3; class cylinder:publ

    35、ic containerdouble height;public:cylinder(double radius, double height):container(radius)(5) ; double surface_area()return 2*3.1416*radius*(height+radius);double volume()return 3.1416 *radius*radius*height; void main()container *p;cube obj1(5); sphere obj2 (5); cylinder obj3(5,5); p=obj1;cout“正方体表面积

    36、:“p-surface_area()endl;cout“正方体体积:“p-volume()endl;p=obj2; cout“球体表面积:“p-surface_area()endl;cout“球体体积:“p-volume()endl;p=obj3; cout“圆柱体表面积:“p-surface_area()endl;cout“圆柱体体积:“p-volume()endl;(分数:15.00)填空项 1:_ (正确答案:virtual double surface_area()=0)解析:填空项 1:_ (正确答案:virtual double volume()=0)解析:填空项 1:_ (正确答

    37、案:public container)解析:填空项 1:_ (正确答案:shpere(double radius):container(radius))解析:填空项 1:_ (正确答案:cylinder:height=height)解析:解析 本题主要考察 C+语言程序设计中的几个问题,主要包括纯虚函数,类的派生,初始化。根据给出的程序,可知,container 是一个公共基类,并且它是一个抽象类,在其中定义求表面积和体积的纯虚函数,因为抽象类本身是没有表面积和体积可言的,所以空(1)应该填入 virtual double surface_area()=0,空(2)应该填入 virtual d

    38、ouble volume()=0。空(3)考察类的继承,应填入 public container。空(4)考察类的初始化问题,构造函数不能继承,所以,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象,应填入 shpere(double radius):container(radius)。空(5)考察对成员数据的初始化,由于使用了相同名字的变量名,所以在初始化时,要引入作用于运算符,应填入cylinder:height=height。六、试题六(总题数:1,分数:15.00)说明下面程序定义了一个类 Point及其成员函数,然后从类 Point派生出类 Circle及其成员函数。Ja

    39、va程序class Mainjavapublic static void main (String arg)Circle c=new Circle(2.5,3.7,4.3);System.out.println(“ X coordinate is “+c.getX()+“/nRadius is: “+c.get Radius(); (1) ; /设置新的圆心(2,2)Point pRef=c;System.out.println(“/n Circle printed as a point is : “+“+ (2) +“.“+ (3) +“):class Point protected dou

    40、ble x,y;public Point (double a, double b) x = a; y = b;)void setPoint (double a, double b) x = a; y = b; final double getX () return x; final double getY () return y; class Circle (4) protected double radius;public Circle(double r, double a, double b) (5) ;radius=r ;void setRadius (double r) radius=

    41、r; final double getRadius () return radius; final double area () return 3.14159*radius*radius; (分数:15.00)填空项 1:_ (正确答案:c.setPoint(2,2))解析:填空项 1:_ (正确答案:pRef.getX())解析:填空项 1:_ (正确答案:pRef.getY())解析:填空项 1:_ (正确答案:extends Point)解析:填空项 1:_ (正确答案:super(a,b))解析:解析 本题以 Java语言为载体,考查面向对象程序设计中的几个重要概念派生类型,构造函数,

    42、以及对象的引用。首先,根据题中说明 Circle类继承自 Point,故空(4)处应填 extends Pointo而类 Point没有默认构造函数,派生类构造函数首先需要初始化基类,方法是在派生类构造函数的第一个语句用 super引用调用基类相应派生类,故空(5)处应填 super(a,b)。主函数中空(1)处我们根据题目给出的说明,要求重新设置圆心为(2,2),调用基类设置点的函数setPoint,所以空(1)处应填入 c.setPoint(2,2)。最后考察的是对象的引用,派生类对象可以初始化基类引用,在这种情况下,只能访问从相应基类中继承来的成员,而不允许访问从其他基类的成员或在派生类中增加的成员,所以,空(2)处应填入 pRef.getX(),空(3)处应填入 pRef.getY()。


    注意事项

    本文(【计算机类职业资格】初级程序员下午试题-103及答案解析.doc)为本站会员(lawfemale396)主动上传,麦多课文档分享仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文档分享(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
    备案/许可证编号:苏ICP备17064731号-1 

    收起
    展开