【计算机类职业资格】初级程序员下午试题-37及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-37及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-37及答案解析.doc(6页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-37 及答案解析(总分:120.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.说明 给定一个十进制整数 A,将其转换为 R进制数的方法是:将 A的整数部分逐次除以 R,直到商等于 0为止,将所得的余数由低位到高位排列在一起,就得到了对应 R的进制数。以 A=11,R=2 为例,112=51,52=21,22=10,12=01 中各式的余数依次为:1,1,0,1,于是与 A对应的二进制数为 1011。 下面的流程图实现了将十进制数 2597转换为八进制数的功能,其中: (1)循环 1执行除法运算并将余数依次记录在数组 a中(假定数组长度足够长
2、),如 a1, a2,ak; (2)循环2则用于将这些余数按逆序输出,即 ak,ak-1,a1; (3)图中 i,j分别是循环 1和循环 2中的循环变量; (4)图中 q用于记录每次除法所得的商值。 流程图 (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.说明 函数 Printprime(int UpBound)的功能是输出 1到 UpBound以内的全体素数。 函数 2.1 void PrintPrime(int UpBound) printf(“2,“ ); for(i=3; iUpBound; i+ =2) int k = sqrt(i); for(j=3; j
3、= k;U (1) /U) /*检查 i是否有 3到 k以入的奇因数*/ if(U (2) /U) break; fi(U (3) /U) printf(“%d“, i); 函数 2.2说明 递归函数 invert(int a,int k),int k)的功能是将数组 a中的前 k个元素逆置。 函数 2.2 void invert(int a , int k) int t; if (U (4) /U) invert(U (5) /U); t=a0; a0 =ak-1; ak-l=t; (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.说明 本程序包含的函数及其功能说明如
4、下: (1)函数 first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元; (2)函数 reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与 已知链表的表元链接顺序相反; (3)函数 Print_link()用来输出链表中各表元的值;(4)函数 free_link()用来释放链表全部表元空间。 程序 #include stdio. h #include malloe. h typodef struct node int val; struct node * next; NODE; void first_insert(NODE * *
5、p,int v) NODE *q = (NODE *) malloe(sizeof(NODE); q-val = v; q-next = *p; /* 为新表元赋值*/ * p =U (1) /U; NODE * reverse_copy( NODE * p) NODE * u; for(u=NULL; p!=NULL; p=p-next) first_insert(U (2) /U); return u; void printlink(NODE * p ) for(;U (3) /U) prinff(“%d/t“, p-val); printf(“ /n“); void free_link(
6、 NODE * p) NODE * u; while(p! =NULL) u=p-next;free(p);U (4) /U; void main( ) NODE * link1 , * link2; int i; link1 = NULL; for(i=1; i= 10; i+ + )first_insert( link2 = reverse_copy(link1 ); U (5) /U; free_link( linkl ) ;free_link(link2); (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.说明 本程序用古典的 Eratosthenes的筛法求
7、从 2起到指定范围内的素数。如果要找出 2至 10中的素数,开始时筛中有 2到 10的数,然后取走筛中的最小的数 2,宜布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数 3、5、7、9:重复上述步骤,再取走最小数 3,宣布它为素数,井取走 3的倍数,于是留下 5、7。反复重复上述步骤,直至筛中为空时,工作结束,求得 2至 10 中的全部素数。 程序中用数组 sieve表示筛子,数组元素 sievei的值为 1时,表示数 i在筛子中,值为-1 时表示数 i已被取走。 程序 #include stdio, h #define MAX 22500 main( ) unsigne
8、d int i , range , factor , k; int sieveMAX; prinff( “please input the range:“ ); scanf(“ %d“ , /* range 指出在多大的范围内寻找素数* / for(i=2 ;i0),循环 1会被重复执行;并且循环 1的循环体中对 q进行一次除法运算,因此商等于 q/R,余数 ai=qR; (4)在开始执行循环 2时,i 的值是余数的个数加上 1,因此,在以 j为循环变量逆序输出数组 s中有意义的那部分值,应以数组下标 i-1为循环初值,以数组下标 1为循环终值,以 1为增量; (5)由于 25978=3245
9、,3248=404,408= 50,5+8=05,因此算法运行结果为 5045。二、B试题二/B(总题数:1,分数:15.00)2.说明 函数 Printprime(int UpBound)的功能是输出 1到 UpBound以内的全体素数。 函数 2.1 void PrintPrime(int UpBound) printf(“2,“ ); for(i=3; iUpBound; i+ =2) int k = sqrt(i); for(j=3; j= k;U (1) /U) /*检查 i是否有 3到 k以入的奇因数*/ if(U (2) /U) break; fi(U (3) /U) print
10、f(“%d“, i); 函数 2.2说明 递归函数 invert(int a,int k),int k)的功能是将数组 a中的前 k个元素逆置。 函数 2.2 void invert(int a , int k) int t; if (U (4) /U) invert(U (5) /U); t=a0; a0 =ak-1; ak-l=t; (分数:15.00)_正确答案:()解析:(1)j+=2 (2)i%j=0 (3)jk (4)k1(5)a+1,k-2解析(1)(3)由于(1)处循环只检查 i是否能被 3到 k以内的奇数所整除,因此循环增量应该是 2。并且一旦 i被某个 3到 k以内的奇数整
11、除,那么内层 for应当立即终止,此时 jk,则表明 i没有 3到 k以内的奇因数,即 i是一素数,应该输出;(4)由于函数递归的终止条件是 k不大于 1,于是仅在 k1 时需要继续进行递归;(5)为了将数组 a的前 k个元素 a0、ak-1置逆,只需先将 a1、ak-2这 k-2个元素置逆,即调用 invert(a+1,k-2),再交换 a0和 ak-1的值即可。三、B试题三/B(总题数:1,分数:15.00)3.说明 本程序包含的函数及其功能说明如下: (1)函数 first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元; (2)函数 reverse_copy()的功
12、能是按已知链表复制出一个新链表,但新链表的表元链接顺序与 已知链表的表元链接顺序相反; (3)函数 Print_link()用来输出链表中各表元的值;(4)函数 free_link()用来释放链表全部表元空间。 程序 #include stdio. h #include malloe. h typodef struct node int val; struct node * next; NODE; void first_insert(NODE * * p,int v) NODE *q = (NODE *) malloe(sizeof(NODE); q-val = v; q-next = *p;
13、 /* 为新表元赋值*/ * p =U (1) /U; NODE * reverse_copy( NODE * p) NODE * u; for(u=NULL; p!=NULL; p=p-next) first_insert(U (2) /U); return u; void printlink(NODE * p ) for(;U (3) /U) prinff(“%d/t“, p-val); printf(“ /n“); void free_link( NODE * p) NODE * u; while(p! =NULL) u=p-next;free(p);U (4) /U; void mai
14、n( ) NODE * link1 , * link2; int i; link1 = NULL; for(i=1; i= 10; i+ + )first_insert( link2 = reverse_copy(link1 ); U (5) /U; free_link( linkl ) ;free_link(link2); (分数:15.00)_正确答案:()解析:(1)q (2) int sieveMAX; prinff( “please input the range:“ ); scanf(“ %d“ , /* range 指出在多大的范围内寻找素数* / for(i=2 ;i=rang
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 37 答案 解析 DOC
