【计算机类职业资格】初级程序员下午试题-69及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-69及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-69及答案解析.doc(12页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-69 及答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数: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 用于记录每次除法所得的商值。流程图问题 1将流程图中的(1)(4)处补充完整,其中(1)(3)处要求使用 C 语言格式书写:(1)处为逻辑表达式,(2)、(3)两处为算术表达式;(4)则须按照“循环变量名:循环初值,循环终值,增量”格式描述。问题 2该算法运行的结果 (5) 。(分数:15.00)_二、试题二(总题数:1,分数:15.00)2.说明函数 Printprime(int UpBound)的功能是输出 1
3、到 UpBound 以内的全体素数。函数 2.1void PrintPrime(int UpBound)printf(“2,“ );for(i=3; iUpBound; i+ =2) int k = sqrt(i);for(j=3; j= k; (1) ) /*检查 i 是否有 3 到 k 以入的奇因数*/if( (2) ) break;fi( (3) ) printf(“%d“, i);函数 2.2 说明递归函数 invert(int a,int k),int k)的功能是将数组 a 中的前 k 个元素逆置。函数 2.2void invert(int a , int k)int t;if (
4、 (4) ) invert( (5) );t=a0;a0 =ak-1;ak-l=t;(分数:15.00)_三、试题三(总题数:1,分数:15.00)3.说明本程序包含的函数及其功能说明如下:(1)函数 first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元;(2)函数 reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与已知链表的表元链接顺序相反;(3)函数 Print_link()用来输出链表中各表元的值;(4)函数 free_link()用来释放链表全部表元空间。程序#include stdio. h #include mallo
5、e. 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; /* 为新表元赋值*/* p = (1) ; NODE * reverse_copy( NODE * p)NODE * u;for(u=NULL; p!=NULL; p=p-next) first_insert( (2) );return u; void printlink(NODE *
6、p )for(; (3) ) prinff(“%d/t“, p-val);printf(“ /n“);void free_link( NODE * p)NODE * u;while(p! =NULL) u=p-next;free(p); (4) ; void main( ) NODE * link1 , * link2;int i;link1 = NULL;for(i=1; i= 10; i+ + )first_insert(link2 = reverse_copy(link1 );(5) ;free_link( linkl ) ;free_link(link2);(分数:15.00)_四、试
7、题四(总题数:1,分数:15.00)4.说明本程序用古典的 Eratosthenes 的筛法求从 2 起到指定范围内的素数。如果要找出 2 至 10 中的素数,开始时筛中有 2 到 10 的数,然后取走筛中的最小的数 2,宜布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数 3、5、7、9:重复上述步骤,再取走最小数 3,宣布它为素数,井取走 3的倍数,于是留下 5、7。反复重复上述步骤,直至筛中为空时,工作结束,求得 2 至 10 中的全部素数。程序中用数组 sieve 表示筛子,数组元素 sievei的值为 1 时,表示数 i 在筛子中,值为-1 时表示数 i已被取走。
8、程序#include stdio, h #define MAX 22500main( )unsigned 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 中有意义的那部分值,应
9、以数组下标 i-1 为循环初值,以数组下标 1 为循环终值,以 1 为增量;(5)由于 25978=3245,3248=404,408= 50,5+8=05,因此算法运行结果为 5045。二、试题二(总题数:1,分数:15.00)2.说明函数 Printprime(int UpBound)的功能是输出 1 到 UpBound 以内的全体素数。函数 2.1void PrintPrime(int UpBound)printf(“2,“ );for(i=3; iUpBound; i+ =2) int k = sqrt(i);for(j=3; j= k; (1) ) /*检查 i 是否有 3 到 k
10、以入的奇因数*/if( (2) ) break;fi( (3) ) printf(“%d“, i);函数 2.2 说明递归函数 invert(int a,int k),int k)的功能是将数组 a 中的前 k 个元素逆置。函数 2.2void invert(int a , int k)int t;if ( (4) ) invert( (5) );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 以内的奇数所整除,因此循环
11、增量应该是2。并且一旦 i 被某个 3 到 k 以内的奇数整除,那么内层 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的值即可。三、试题三(总题数:1,分数:15.00)3.说明本程序包含的函数及其功能说明如下:(1)函数 first_insert()的功能是在已知链表的首表元之前
12、插入一个指定值的表元;(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 * * p,int v)NODE *q = (NODE *) malloe(sizeof(NODE)
13、;q-val = v; q-next = *p; /* 为新表元赋值*/* p = (1) ; NODE * reverse_copy( NODE * p)NODE * u;for(u=NULL; p!=NULL; p=p-next) first_insert( (2) );return u; void printlink(NODE * p )for(; (3) ) prinff(“%d/t“, p-val);printf(“ /n“);void free_link( NODE * p)NODE * u;while(p! =NULL) u=p-next;free(p); (4) ; void
14、main( ) NODE * link1 , * link2;int i;link1 = NULL;for(i=1; i= 10; i+ + )first_insert(link2 = reverse_copy(link1 );(5) ;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=range; i+) (1) ; /*筛子
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 69 答案 解析 DOC
