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

上传人:arrownail386 文档编号:1330127 上传时间:2019-10-17 格式:DOC 页数:12 大小:60KB
下载 相关 举报
【计算机类职业资格】初级程序员下午试题-69及答案解析.doc_第1页
第1页 / 共12页
【计算机类职业资格】初级程序员下午试题-69及答案解析.doc_第2页
第2页 / 共12页
【计算机类职业资格】初级程序员下午试题-69及答案解析.doc_第3页
第3页 / 共12页
【计算机类职业资格】初级程序员下午试题-69及答案解析.doc_第4页
第4页 / 共12页
【计算机类职业资格】初级程序员下午试题-69及答案解析.doc_第5页
第5页 / 共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) ; /*筛子

15、初始化*/factor = 2 ;while (factor = range) if( (2) = = 1)l /*筛子中最小数是素数*/pfinff( “% d/t“ ,factor);k = factor;while (k =range) /* 取走素数的倍数*/(3) ;k= (4) ;factor + +;问题 1将程序代码中的(1)(4)处补充完整。问题 2在上述代码的执行过程中,若 factor 为 5,从筛子中取走的头两个数是 5 和 (5) 。(分数:15.00)_正确答案:(问题 1(1)sievei=1 (2)sievefactor (3) sievek=-1 (4)k+f

16、actor问题 2(5)25)解析:初始时,2 到 range 以内的数 i 都在筛子中,即 sievei=1;(2)每用一次筛法,筛子中留存的最小数都不是前面素数的倍数,因而也是素数,我们只需用这个数来继续筛选。例如,用 factor=2、3 筛选以后,筛于中最小数是 5,所以 factor=4 的情形不需考虑,只需对fsctor=5,即 sievefactor=1 的情形继续执行筛选;(3)若 k 是素数 factor 的倍数,则将 k 从筛子中移出,即设置 sievek=-1;(4)由于 k 应该是素数 factor 的倍数,因此从韧值 factor 开始需要每次自增 factor;(5

17、)当 factor 为 2 时,取走了 2 的倍数;当 factor 为 3 时,取走了 3 的倍数;于是当 factor 为 5 时取走的第二个数是 5 的倍数、但不是 2 或者 3 的倍数,这个数应该是 25。五、试题五(总题数:1,分数:15.00)5.说明本程序提供了查询景点票价信息的功能,查询包括两种方式:按景点名称查询以及白定义查询。程序界面如下图所示:(分数:15.00)_正确答案:(1)Combo1.Text (2)Comb01.ListCount (3) Comb01.List(i)(4)Textl.Text (5)Option2.ValueAndP(i,1)= Price

18、(6)flag=True)解析:(3)ComboBox 控件常用属性及用法如下:Combo1.Text 表示组合框 Combo1 当前的文本内容; Comb01.1JstCount 表示组合框 Combo1 中列表项总个数;Comber. List(i)表示组合框 Combo1 中列表项i(编号从 0 开始)的内容;(4)Text 控件的常用眉性是 Text,表示文本框中的内容;(5)使用自定义查询时,当“旺季”单选钮被选中时,景点的旺季票价不超过 Price,此时有 Option1. Value And P(i,0)=price,类似地,当“淡季”单选钮被选中时,查询条件应该是 Option

19、2.Value And p(i,1)= price;(6)flag 标志用于标记是否有匹配查询条件的景点,初始时置为 False,一旦发现存在匹配查询条件的景点,应该置为 True。六、试题六(总题数:1,分数:15.00)6.说明本程序的功能是产生一个抽奖游戏中的随机数组合。抽奖的规则是从自然数 1 至 50 中无重复抽取 6 个数。为了保证抽取的无重复性,将 50 个自然数放在数组 source 中。每抽取了一个数,就用数组的最后一个数来改写这个被抽中的数,并把数组的长度减 1。为使输出更为清晰,把抽取出来的 6 个数放在数组 target中,经过排序(Arrays 类中的 sou 方法实

20、现排序)然后输出。注:Mathrandom 方法返回一个在 0(包含)到 1(不包含)之间的随机浮点数。Java 代码import java. util. *;public class DrawOutpublic static void main (String args) int n =50;int k =6;int source = new intn;for(int i=0; i (1) ;i+)sourcei = i + 1;int target = new intk;/将抽中的数字从 source 数组中取出,放入到 target 数组for (int i = 0; i (2) ; i

21、+ +) int r = (int) (Math. random() * (3) );targeti = sourcer;r = (4) ;(5) ;Arrays. sort(target);for (int i = 0; i target, length; i + + )System. out. prinfln ( target i );(分数:15.00)_正确答案:(1)source. length (2)target. length (3)n(4)Sourcen-1 (5)n-)解析:本处 for 循环的功能是将自然数 1 至 50 顺序放到 source 数组中。数组的下标从。开始,

22、上标是 source. length;(2)本处 for 循环的功能是将从 source 数组中取出的数字放入 target 数组。数组的下标从 0 开始,上标是 tar- get. length;(3)Math. random 方法返回一个在 0(包含)到 1(不包含)之间的随机浮点数,乘以 n(此处值为 50)是为了产生一个。至 49 之间的整数作为从 source 数组中取数字的下标;(4)本行代码的功能是把 source 数组的最后一个数字来改写这个被抽中的数字;(5)本行代码的功能是调整数组 source 的大小,将数组长度 n 减 1。七、试题七(总题数:1,分数:15.00)7.

23、说明本程序实现的功能是判断指定的文本文件中是否包含指定的字符串,并且如果包含则返回其第一次出现的位置(行号、列号)。程序运行界面如下图所示,用户只要通过驱动器列表框、目录列表框选定文件夹,文件列表框会自动列出该文件夹下所有文本文件名称,选中其中某个文件,再输入目标字符串并且单击“查找”按钮,就能看到查找的结果。(分数:15.00)_正确答案:(问题 1(1)Drivel. Drive (2)File1. Path (3)File1. filename (4)Exit Sub (5)AtEndOfStream (6)str Line, Textl. Text问题 2(7)Pattern (8)*

24、.* (9)*.jpg;*.bmp)解析:(1)(2)驱动器列表框的 Drive 属性表示当前选择的驱动器;目录列表框的 Path 属性表示当前目录的路径,如:“c:/ucdos/bin“;文件列表框的 path 属性则表示列表中文件所在的目录的路径。因此,我们通常都把驱动器列表框对象的 Path 属性和目录列表框、文件列表框的 Path 属性联系起来,以实现三者的连动;(3)文件列表框的 filename 属性返回选定的不含路径的纯文件名称,如“bkspeak.exe“、“VB 习题txt“等; (4)Exit Sub 语句用于提前结束过程,类似地语句还有 Exit For(提前退出 For

25、 循环)以及 Exit Do(提前退出 Do 循环)等;(5)文本流对象的 AtEndOfStream 属性返回 Boolean 类型的值,表示是否到达流的末尾;(6)instr 是 VB 提供的字符串查找函数,常用格式是 in- str(起始位置,字符串 1,字符串 2),功能是返回字符串 2 在字符串 1 中首次出现的位置(若字符中 2 在字符串 1 种不出现则返回 0);(7)(9)文件列表框的 Pattern 属性用于限制文件列表框中文件的类型,格式为:文件列表框名pattern=“ *.扩展名 1;*.扩展名 2;“(中间不包含空格),例如“*.txt“、“*.*“以及“*.txt;

26、*.rtf;*. htm“等。八、试题八(总题数:1,分数:15.00)8.说明以下程序的功能是实现堆栈的一些基本操作。堆栈类 stack 共有三个成员函数:empty 判断堆栈是否为空;push 进行人栈操作;pop 进行出栈操作。C+程序#include “stdafx. h“#include iostream, heonst int maxsize = 6;class stack float data maxsize;int top;public:stuck(void); stack(void);bool empty(void);void push(float a);float pop(

27、void);stack: :stack(void)top =0;cout “stack initialized.“ endl;stack: stack(void) cout “ stack destoryed.“ endl;bool stack: empty (void) return (1) ;void stack: :push(float a)if(top= =maxsize) cout “Stack is full!“ endl;return;datatop =a;(2) ;float stack: pop (void)if( (3) )cout “Stack is undcrflow

28、!“ endl;return 0;(4) ;return (5) ;void main( )stack s;coat “now push the data:“;for(inti=l;i =maxsize;i+ +) cout i “ “;s. push(i);coat endl;cout “now pop the data:“;for(i = 1 ;i = maxsize ;i + + )cout s. pop() “ “;(分数:15.00)_正确答案:(1)top=0? true:false (2)top+(或者 top =top+1)(3)top=0 (4)top-(或者 top =top-1)(5)datatop)解析:判断堆栈是否为空的条件是 top 为 0,而且本函数的返回值为布尔类型,故此处应该填写 top=0? true:false;(2)数据入栈后,栈顶指针要向上移动一个单元;(3)top 为 0 说明堆栈已经空了,此处 if 语句返回堆栈为空的提示;(4)先将栈顶指针往下移动一个单元,才可以指向要出栈的数据;(5)本行代码的功能是返回要出栈的数据。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

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