【计算机类职业资格】初级程序员下午试题-103及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-103及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-103及答案解析.doc(14页珍藏版)》请在麦多课文档分享上搜索。
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中所有相同元素。当链表
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 103 答案 解析 DOC
