ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:58KB ,
资源ID:1330076      下载积分:5000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-1330076.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

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

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

1、初级程序员下午试题-13 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 本程序用古典 Eratosthenes;筛选法求从 2起到指定范围内的素数。如果要找出 210 中的素数,开始时筛中有 210 的数,然后取走筛中最小的数 2,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数 3、5、7、9;重复上述步骤,再取走最小数 3,宣布它为素数,并取走 3的倍数,于是留下 5、7。反复重复上述步骤,直到筛中为空时,工作结束,求得 210 中的全部素数。 【代码】 # include stdio.h # de

2、fine MAX 22500 /*程序中用数组 sieve表示筛子,数组元素 sievei的值为 1时,表示数 i在筛子中,值为-1 时表示数 i已被取走*/ main() unsigned int i, range, factor, k; int sieveMAX; printf(“please input the range:“); scanf(“%d“, /* range 指出在多大的范围内寻找素数*/ for(i=2; i=range; i+) U (1) /U; factor=2; while (factor=range) if(U (2) /U) /* 筛中最小数是素数 */ pr

3、intf(“%d/t“, factor); k=factor; while (k=range) /*移走素数的倍数 */ U (3) /U; k=U (4) /U; U (5) /U; (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【函数 2.1说明】 有 1、2、3、4 四个数字,输出由这些数字组成的互不相同且无重、复数字的三位数。【函数 2.1】 main() int i,j,k; printf(“/n“); for(U (1) /U) /*以下为三重循环*/ for(j=1; j5;j+) for (k=1;k5;k+) if (U (2) /U) /*确保

4、i, j, k 三位互不相同*/ printf(“%d,%d,%d/n“,i,j,k); 【函数 2.2说明】 计算并输出 100之内的素数,每行输出 10个,超过 10个则换行。 【函数 2.2】 #include stdio.h #include “math.h“ #define N 101 main() int i,j,line,aN; for(i=2;iN;i+)U (3) /U; for(i=2;isqrt(N);i+) for(j=i+1;jN;j+) if(ai!=0 printfC/n“); for(i=2,line=0;iN;i+) if(ai!=0) prinff(“%5d

5、“,ai); U (5) /U; if(line=10) prinff(“/n“); line=0; (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 设串 s和串 t采用顺序存储结构,编写函数实现串 s和串 t的比较操作,要求比较结果包括大于、小于和等于 3种情况。 【函数】 int StrCompare(SStrType s, SStrType t) int n=s.length, m=U (1) /U, i,j,tag; i=0; j=0; while(U (2) /U) if(U (3) /U) i+; j+; else if(s.strit.strj

6、) tag=1; return tag; else tag=-1; return tag; if(n=m) tag=0; else if(U (4) /U) tag=1; else if(nm) tag=-1; U (5) /U; (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】 著名的四色定理指出任何平面区域均可以用 4种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过 4种颜色的着色方案。 【函数】 # include stdio.h #define N 10 /*要着色的 N个区域*/ void output(int color

7、) /*输出一种着色方案 colori的值为区域 i所着颜色*/ int i; for (i=0; iN; i+) printf(“%4d“, colori); printf(“/n“); int back(int *ip, int colorj /*回溯*/ int c=4; while (c=4) if (*ip=0) return 0: -(*ip); c=U (1) /U; color*ip=-1; return c; /*检查区域 i,考查 c种颜色的可能性 */ int colorOK(iht i, int c, int adjN, int color) int j; for(j=

8、0; ji; j+) if (U (2) /U) return 0; return 1; /*为区域 i选一种可着的颜色*/ int select(int i, int c, int adjN, int color) /*寻找各种着色方案 adjij=1 表示区域 i与区域 j不相邻*/ int k; for (k=c; k=4; k+) /*4 种颜色*/ if (colorOK(U (3) /U) return k; return 0; int coloring(int adjN) int colorN, i, c, cnt; for (i=0; iN; i+) colori=-1: i=

9、c=0; cnt=0; while (1) if (c=U (4) /U)=0) c=back( if (c=0) return cnt; else U(5) /U; i+; if(i=N) output(color); +cnt; c=back( else c=0; void main() int adjNN= 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0

10、, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0 ; printf(“共有%d 组解./n“, coloring(adj);(分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 本程序通过移动滑动条修改颜色 RGB值,从而控制颜色。程序中有一个面板、3 个标签和 3个滑动条,标签和滑动条一一对应,分别对应

11、三原色红、绿、蓝,任意拖动其中的一个滑动条,所对应的颜色值就会发生变化,面板的颜色也会发生对应的变化,如下图所示,滑动条值的范围是 0255。 (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当 n=5时,对应的螺旋方阵如下: 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 【C+代码】 #include“stdio.h“ #include“iostream,h“ int array111

12、1; int temp; int ROW; void godown(int temp=ROW;temp+) if(arraytempa=0) arraytempa=U (1) /U; a+; void goright(int temp=ROW;temp+) if(arraybtemp=0) arraybtemp=m+; b-; void goup(int temp0;temp-) if(arraytempc=0) arraytempc=m+; c-; void goleft(int temp0;temp-) if(arraydtemp=0) arraydtemp=m+; U(2) /U; vo

13、id main() int a,b,c,d,max,m; cinROW; coutend1; for(a=1;a=ROW;a+) for(b=1;b=ROW;b+) U (3) /U; m=1; a=d=1; b=c=ROW; max=U (4) /U; whiie(m=max) godown(m,a); U (5) /U(m,b); goup(m,c); goleft(m,d): for(a=1;a=ROW;a+) for(b=1;b=ROW;b+) printf(“%3d “,arrayab); coutend1; (分数:15.00)_初级程序员下午试题-13 答案解析(总分:90.00

14、,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 本程序用古典 Eratosthenes;筛选法求从 2起到指定范围内的素数。如果要找出 210 中的素数,开始时筛中有 210 的数,然后取走筛中最小的数 2,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数 3、5、7、9;重复上述步骤,再取走最小数 3,宣布它为素数,并取走 3的倍数,于是留下 5、7。反复重复上述步骤,直到筛中为空时,工作结束,求得 210 中的全部素数。 【代码】 # include stdio.h # define MAX 22500 /*程序中用数组 sie

15、ve表示筛子,数组元素 sievei的值为 1时,表示数 i在筛子中,值为-1 时表示数 i已被取走*/ main() unsigned int i, range, factor, k; int sieveMAX; printf(“please input the range:“); scanf(“%d“, /* range 指出在多大的范围内寻找素数*/ for(i=2; i=range; i+) U (1) /U; factor=2; while (factor=range) if(U (2) /U) /* 筛中最小数是素数 */ printf(“%d/t“, factor); k=fac

16、tor; while (k=range) /*移走素数的倍数 */ U (3) /U; k=U (4) /U; U (5) /U; (分数:15.00)_正确答案:()解析:(1)sievei=i (2)sievefactor0 (3)sievek=-1 (4)k+factor (5)factor+ 分析 本题考查在 C语言中实现素数的选取。 题目要求从指定范围内的数中选取其中的素数,并给出了相关的选取方法。在做题前我们首先需要清楚什么是素数,素数又叫质数,是指除 1和自身之外,没有其他约数的正整数。下面我们来分析程序。 第(1)空在第一层循环体下面,题目要求用数组 sieve表示筛子,但在程

17、序中并没有给数组输入值,此空应该是在循环下往数组中存放数值,其存放的位置与数值的大小对应,因此,此空答案为 sievei=i。 第(2)空是条件判断语句的条件,从注释中我们可以知道,这个条件判断语句的作用是筛中最小数是素数,是素数的话一定在数组中,元素的值就应该大于 0。那么条件应该是判断数组中当前位置的值是否大于 0,如果是,则执行判断语句下的语句,即筛选出这个数且这个数是素数。结合题目给出的条件,知道此空答案为 sievefactor0。 第(3)空是移走素数的倍数这个循环下面的语句,此循环的作用就是移走当前最小素数的倍数,题目要求在移走了数值以后,数组中相应的值为-1,那么此空的作用应该

18、是将数组中该移走数的相应值变为-1,因此,此空答案为 sievek=-1。 第(4)空是紧接着上面一空来的,变量 k中存放的是数组当前的下标,而变量 factor中存放的是当前最小的素数。此空所在循环体的作用是移走当前最小素数的倍数,求倍数时,只要在该数的基础上加上该数,那就是两倍,再加一个就是三倍,由此直到最大范围。因此,此空答案应该是 k+factor。 第(5)空是while(factor=range)循环下的最后一条语句,我们从程序中可以看出,factor 中存放的是当前的最小素数,同时也是此素数在数组中的下标位置。题目告诉我们在处理完当前素数后,应该去取下一个素数,下标位置往后移动。

19、因此,此空答案为 factor+。二、B试题二/B(总题数:1,分数:15.00)2.【函数 2.1说明】 有 1、2、3、4 四个数字,输出由这些数字组成的互不相同且无重、复数字的三位数。【函数 2.1】 main() int i,j,k; printf(“/n“); for(U (1) /U) /*以下为三重循环*/ for(j=1; j5;j+) for (k=1;k5;k+) if (U (2) /U) /*确保 i, j, k 三位互不相同*/ printf(“%d,%d,%d/n“,i,j,k); 【函数 2.2说明】 计算并输出 100之内的素数,每行输出 10个,超过 10个则

20、换行。 【函数 2.2】 #include stdio.h #include “math.h“ #define N 101 main() int i,j,line,aN; for(i=2;iN;i+)U (3) /U; for(i=2;isqrt(N);i+) for(j=i+1;jN;j+) if(ai!=0 printfC/n“); for(i=2,line=0;iN;i+) if(ai!=0) prinff(“%5d“,ai); U (5) /U; if(line=10) prinff(“/n“); line=0; (分数:15.00)_正确答案:()解析:(1)i=1;i5;i+ (2

21、)i!=k i=0; j=0; while(U (2) /U) if(U (3) /U) i+; j+; else if(s.strit.strj) tag=1; return tag; else tag=-1; return tag; if(n=m) tag=0; else if(U (4) /U) tag=1; else if(nm) tag=-1; U (5) /U; (分数:15.00)_正确答案:()解析:(1)t.length (2)in for (i=0; iN; i+) printf(“%4d“, colori); printf(“/n“); int back(int *ip,

22、 int colorj /*回溯*/ int c=4; while (c=4) if (*ip=0) return 0: -(*ip); c=U (1) /U; color*ip=-1; return c; /*检查区域 i,考查 c种颜色的可能性 */ int colorOK(iht i, int c, int adjN, int color) int j; for(j=0; ji; j+) if (U (2) /U) return 0; return 1; /*为区域 i选一种可着的颜色*/ int select(int i, int c, int adjN, int color) /*寻

23、找各种着色方案 adjij=1 表示区域 i与区域 j不相邻*/ int k; for (k=c; k=4; k+) /*4 种颜色*/ if (colorOK(U (3) /U) return k; return 0; int coloring(int adjN) int colorN, i, c, cnt; for (i=0; iN; i+) colori=-1: i=c=0; cnt=0; while (1) if (c=U (4) /U)=0) c=back( if (c=0) return cnt; else U(5) /U; i+; if(i=N) output(color); +

24、cnt; c=back( else c=0; void main() int adjNN= 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,

25、 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0 ; printf(“共有%d 组解./n“, coloring(adj);(分数:15.00)_正确答案:()解析:(1)color*ip (2)adjij=1 int temp; int ROW; void godown(int temp=ROW;temp+) if(arraytempa=0) arraytempa=U (1) /U; a+; void goright(int temp=ROW;temp+) if(arraybtemp=0) arraybtemp=m+; b-; void goup(in

26、t temp0;temp-) if(arraytempc=0) arraytempc=m+; c-; void goleft(int temp0;temp-) if(arraydtemp=0) arraydtemp=m+; U(2) /U; void main() int a,b,c,d,max,m; cinROW; coutend1; for(a=1;a=ROW;a+) for(b=1;b=ROW;b+) U (3) /U; m=1; a=d=1; b=c=ROW; max=U (4) /U; whiie(m=max) godown(m,a); U (5) /U(m,b); goup(m,c

27、); goleft(m,d): for(a=1;a=ROW;a+) for(b=1;b=ROW;b+) printf(“%3d “,arrayab); coutend1; (分数:15.00)_正确答案:()解析:(1)m+ (2)d+ (3)arrayab=0 (4)ROW*ROW (5)goright 分析 本题考查 C+中螺旋方阵的实现。 题目要求在用户输入该方阵的行列数后,自动生成对应的螺旋方阵。首先我们来简单分析一下螺旋方阵的特点,顾名思义,其基本结构是成螺旋形状的,按照螺旋的方向数值逐渐增大,直到最中间的一点结束。程序中分别用 4个函数来实现其螺旋方向向下、向右、向上和向左时,数组

28、中相应元素的变化,结合程序可以发现数组的初值是全 0。 第(1)空在螺旋方向向下的实现函数中,当螺旋方向向下时,二维数组中列不变而逐行加 1,从程序中可以看出此空所在行的作用就是用来改变数组中元素的值,结合整个程序知道变量 m中存放的是当前位置的数值,因此,此空答案为 m+。 第(2)空在螺旋方向向左的实现函数中,当螺旋方向向左时,二维数组中行不变而随列下标 temp的变化逐列加 1,直到数组元素不为 0,这个时候说明已经到了被螺旋线经过的列,因此,要往后退一列即列下标变量 d加 1,此空答案为 d+。 第(3)空在一个二重循环下面,程序声明了一个二维数组且没有初值,结合程序可以推断出此空的任务就是给数组赋初值。而根据上面的分析,数组的初值应该是全 0,因此,此空答案为 arrayab=0。 第(4)空很明显是给变量 max赋初值,这要求先去弄清楚变量 max的作用。由语句 while(m=max)我们可以推断出变量 max中存放的是最大的数据项,而一个 n阶的方阵中最多有 nn个元素,从程序中可以知道,这是一个 ROW阶的方阵,因此,此空答案为 ROW*ROW。 第(5)空是调用上面的 4个函数,根据螺旋方阵的生成规则,应该是先向下,接着向右,再向上,最后向左,结合程序我们知道此空是调用向右的函数。因此,此空答案为 goright。

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