[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷31及答案与解析.doc

上传人:ownview251 文档编号:507377 上传时间:2018-11-29 格式:DOC 页数:12 大小:59KB
下载 相关 举报
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷31及答案与解析.doc_第1页
第1页 / 共12页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷31及答案与解析.doc_第2页
第2页 / 共12页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷31及答案与解析.doc_第3页
第3页 / 共12页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷31及答案与解析.doc_第4页
第4页 / 共12页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷31及答案与解析.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 31及答案与解析 1 阅读下列算法说明和代码,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序用古典 Eratosthenes;筛选法求从 2起到指定范围内的素数。如果要找出2 10中的素数,开始时筛中有 2 10的数,然后取走筛中最小的数 2,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数 3、 5、7、 9;重复上述步骤,再取走最小数 3,宣布它为素数,并取走 3的倍数,于是留下 5、 7。反复重复上述步骤,直到筛中为空时, 工作结束,求得 2 10中的全部素数。 【代码】 # include stdio

2、.h # define 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+) (1); factor=2; while (factor =range) if(2) /* 筛中最小数是素数 */ pri

3、ntf(“%dt“, factor); k=factor; while (k =range) /*移走素数的倍数 */ (3); k=(4); (5); 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【函数 1.1说明】 本程序可以打印出如下图形 (菱形 ): * * * * * * * 【函数 2.1】 main() int i,j,k; for(i=0;i =3;i+) for(j=0;j =2-i;j+) printf(“ “); for(1) printf(“*“); printf(“n“); for(i=0;i =2;i+) for(2) printf(

4、“ “); for(k=0;k =4-2*i;k+) printf(“*“); printf(“n“); 【函数 2.2说明】 通过本程序,可以从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件 “CsaiWgm”中保存,输入的字符串以 “!”结束。 【函数 2.2】 #include “stdio.h“ main() FILE *fp; char str100,filename10; int i=0; if(fp=fopen(“CsaiWgm“,“w“)=NULL) printf(“cannot open the filen“); exit(0); printf(“p

5、lease input a string:n“); gets(str); while(3) if(stri =a fputc(stri,fp); (5); fclose(fp); fp=fopen(“CsaiWgm“,“r“); fgets(str,stden(str)+1,fp); printf(“%sn“,str); fclose(fp); 3 阅 读以下说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【说明】 设M叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值后跟用 “()”括起来的各子树的列表 (若有子树的话 ),各子树的列表间用 “, ”分隔。例

6、如,如下图所示的三叉树可用列表 a(b(c,d),e,f(g,h,i)表示。 本程序根据输入的列表生成一棵 M叉树,并由 M叉树再输出列表。 【函数】 #include #include #define M 3 /*三叉树 */ typedef struct node int val; struct node *subTreeM; NODE; char buf255, *str=buf; NODE *d=NULL; NODE *makeTree() /*由列表生成 M叉树 */ int k; NODE *s; s=(1); s- val=*str+; for(k=0;k M;k+) s- su

7、bTreek=NULL; if(*str=() k=0; do str+; s- subTreek=(2); if(*str=) str+; break; k=k+1; while(3); return s; void walkTree(NODE *t) /*由 M叉树输出列表 */ int i; if(t !=NULL) (4); if(t- subTree0=NULL) return; putchar(); for(i=0;i M;i+) (5); if(i !=M-1 putchar(); void main() printf(“Enter exp: “); scanf(“%s“,str

8、); d=makeTree(); walkTree(d); putchar(n); 4 阅读以下说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序利用非递归算法实现二叉树后序遍历。 【函数】 #include stdio.h #include stdlib.h typedef struct node/*二叉树的结点数据结构类型 */ char data; struct node *left; struct node *right; BTREE; void SortTreelnsert(BTREE *tree, BTREE *s) if(*tree=NULL)*tree

9、=s; else if(s- data (*tree)- data) SortTreelnsert(1),s); else if(s- data =(*tree)- data) SortTreelnsert(2),s); void TraversalTree(BTREE *tree) BTREE *stack1 000,*p; int tag1000,top=0; p=tree; do while(p !=NULL) stack+top=p; (3); tagtop=0; /*标记栈顶结点的左子树已进行过后序遍历 */ while(top 0 putchar(p- data); if(top

10、0)/*对栈顶结点的右子树进行后序遍历 */ (5); tagtop=1; while(top 0); void PrintSortTree(BTREE *tree) if(tree !=NULL) printSortTree(tree- left); putchar(tree- data); pdntSortTree(tree- right); main() BTREE *root=NULL, *node; char ch; ch=getchar(); while(ch !=#) node=(BTREE*)malloc(sizeof(BTREE); node- data=ch; node-

11、left=node- right=NULL; SortTreelnsert( ch=getchar(); PrintSortTree(root); putchar(n); TraversalTree(root); 5 阅读以下说明,以及用 C+在开发过程中所编写的程序代码,将应填入 (n)处的字句写在对应栏内。 【说明 】 在下面函数横线处填上适当的字句,使其输出结果为: 构造函数 . 构造函数 . 1, 2 5, 6 析构函数 析构函数 . 【 C+代码】 #include “iostream.h“ class AA public; AA(int i,int j) A=i; B=j; cou

12、t “构造函数 .n“; AA()(1); void print(); private: int A, B; ; void AA print() cout A “,“ B endl; void main() AA *a1, *a2; (2)=new AA(1, 2); a2=new AA(5, 6); (3); a2- print(); (4) a1; (5) a2; 6 阅读以下说明和 Java代码,将应填入 (n)处的字句写在对应栏内。 【说明】 下面程序完成从键盘读入一个字符串,然后采用 parseInt方法将其转换为一个相应的整数。 import java.io.*; public c

13、lass testThrows public static (1) readString() (2) IOException int ch; String r=“; boolean done=false; while(3) ch=System.in.read(); if(ch 0 | ch=0xd) /处理回车符中第一个符号 done=true; else r=r+(char)ch; return r; public static void main(Stling args) String str; (4) str=readString(); (5) (IOException e) Syste

14、m.out.println(“error“); return; System.out.println(“input integer: “+Integer.parselnt(str); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 31答案与解析 1 【正确答案】 (1)sievei=i (2)sievefactor 0 (3)sievek=-1 (4)k+factor (5)factor+ 【试题解析】 本题考查在 C语言中实现素数的选取。 题目要求从指定范围内的数中选取其中的素数,并给出了相关的选取方法。在做题前我们首先需要清楚什么是素数,素数又叫质数,是指除 1和自身之外,没有其他约

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

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

17、放的是当前的最小素数,同时也是此素数在数组中的下标位置。题目告诉我们在处理完当前素数后,应该去取下一个素数,下标位置往后移动。因此,此空答案为 factor+。 2 【正确答案】 (1)k=0;k =2*i;k+ (2)j=0;j =i;j+ (3)stri!=! (4)stri-32 (5)i+ 【试题解析】 本题考查用 C语言实现菱 形的输出与大小写字母的转换。 在函数 2.1中,题目要求实现对菱形的输出,从图中可以看出每行的 “*”字符个数为 (2行号 -1),最长的一行其长度为 8个 “*”字符,最短的一行是 1个 “*”字符,从最短到最长一共是 4行。下面来 分析 代码。 第 (1)

18、空是第二重循环的循环条件,从程序中可以推断出这个循环的作用是用来输出一行的 “*”字符,根据上面的 分析 ,每行的 “*”字符个数为 (2行号 -1)可以得到循环的上界,再结合程序可以知道此空用的变量是 k,而每行的行号存放在变量i中,因此,此空答案为 k=0;k =2*i;k+。 第 (2)空在第二个二重循环下面,这个二重循环用来输出图形中下半部分,此空是循环的条件。由于菱形具有对称性,我们可以对照程序上面相应的循环中的条件,很容易就可以得到结果,此空答案为 j=0;j =i;j+。 在函数 2.2中,题目要求从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件 Csa

19、iWgm中保存。此题的关键在于如何将小写字母变成大写字母。 第 (3)空是循环的循环条件,从程序中可以推断出这个循环的作用是用来将字符串的小写字母全部转换成大写字母,那 么可以知道循环的条件是只要取到的字符不为结束字符 “!”,循环就继续,因此,此空答案为 stri!=!。 第 (4)空是条件判断语句下面的语句,根据程序给出的代码不难发现,如果此条件判断语句结果为真,说明当前取到的字符是小写字母,那么应该将其转换为大写字母,因此,此空答案为 stri-32。 第 (5)空是循环的最后一条语句,从程序中不难发现,循环对字符串的位置没有移动,那么此空应该用来实现对字符串位置的往后移动。而记录当前字

20、符串位置的是变量 i,因此,此空答案为 i+。 3 【正确答案】 (1)(NODE*)malloc(sizeof(NODE) (2)makeTree() (3)*str (4)putchar(t- val) (5)walkTree(t- subTreei) 【试题解析】 本题考查在 C语言中实现用列表表示 M叉树。 题目要求程序根据输入的列表生成一棵 M叉树,并由 M叉树再输出列表。题目中给出了列表与树的对应关系,从这种对应关系中我们可以看出,每个结点后紧跟的那层括号下结点的个数就是这个根结点的孩子个数,用列表表示得到的序列有点像树的先序遍历,因此,根据列表来生 成 M叉树时,应该是首先生成左

21、子树,然后才依次往右的生成过程。下面来具体 分析 代码。 第 (1)空很明显是给变量 s赋一个初值,从程序中可以知道,变量 s是一个指向NODE型结点的指针变量,但程序中并没有给出这样的结点,那么此空应该是动态创建一个这样的结点。在 C语言中,动态分配空间要用函数 malloc(),因此,此空答案为 (NODE*)malloc(sizeof(NODE)。 第 (2)空在循环体中,从程序中不难推断出此循环体的作用是由列表生成 M叉树,此空是给 s- subTreek这个指针数组赋值 ,这个数组中存放的是当前结点的孩子结点的指针,在树的生成过程中是根据列表来递归生成其对应的三叉树的,此空应该是递归

22、调用生成结点的函数 makeTree()。因此,此空答案为makeTree()。 第 (3)空是循环结束的判断条件,而这个循环的作用是根据列表来生成三叉树,只有列表的所有元素都被考虑了循环才结束。从程序中可以知道列表的元素存放在数组中,指针变量 s廿指向这个数组,且在程序中对列表的操作都是通过指针变量 str来实现的,因此,此空答案为 *str。 第 (4)空在条件判断语句下面,此条件判断语句结 果为真,说明当前取到的是结点,接下来应该把该结点的值写入列表中,从后面的程序我们很容易知道实现此功能的函数,因此,此空答案为 putchar(t- val)。 第 (5)空在一个循环体下面,根据循环的

23、条件,可以推断出这是对一个结点的所有孩子结点进行循环搜索。由 M叉树生成列表可以说是由列表生成 M叉树的逆过程,需要对树中的每个结点进行检索来生成列表,这里也要用到递归调用,而这个函数的当前检索的结点指针为 t- subTreei。因此,此空答案为 walkTree(t-subTreei)。 4 【正确 答案】 (1)&(*tree)- left (2)&(*tree)- right (3)p=p- left (4)tagtop=1 (5)p=stacktop- right 【试题解析】 本题考查二叉树后序遍历的非递归实现。 二叉树后序遍历的特点是首先按后序遍历根结点的左子树,然后按后序遍历根

24、结点的右子树,再访问根结点。后序遍历得到的序列根结点总在最后,我们可以用栈结构来实现后序遍历。下面来具体 分析 程序。 第 (1)空很明显是函数 SortTreeInsert()的第一个参数,此 函数的功能是建立一棵排序二叉树,此空在条件判断语句下面,如果条件成立,说明待插入结点的值小于当前结点的值,根据排序二叉树的生成原理,应该把待插入结点插入到当前结点的左子树中,因此,此空的参数是指向当前结点左子树的地址。这里需要注意的是,这个参数是一个二重指针,需要在一重指针前加一个取地址操作符 “&”。所以,此空答案为 &(*tree)- left。 第 (2)空也是函数 SortTreeInsert

25、()的第一个参数,但调用这个函数的条件与上面不一样,此空是在待插入结点的值大于等于当前结点的值的时候调用函数, 根据排序二叉树的生成原理,此时应该把待插入结点插入到当前结点的右子树中,因此,此空答案为 &(*tree)- right。 第 (3)空在函数 TraversalTree()中,此函数用来对树进行后序遍历,此空在一个循环体中,从程序中可以看出这个循环体的功能是将排序二叉树的所有左子树结点入栈,因此,在当前结点入栈后,接下来是它的孩子结点入栈,所以,此空答案为 p=p- left。 第 (4)空是循环的判断条件,其作用在注释中已经给出,是判断栈顶结点的右子树是否被后序遍历过。从上面程序

26、 tagtop=0表 示栈顶结点的左子树已进行过后序遍历可以推断出, tagtop的值是用来标记栈顶结点的左右子树已进行过后序遍历,因此,此空答案为 tagtop=1。 第 (5)空在条件判断语句下面,而条件判断语句为真表明要对栈顶结点的右子树进行后序遍历,那么就应该让当前需处理结点的指针指向栈顶结点的右孩子,而指向当前需要处理结点的指针变量是 p,因此,此空答案为 p=stacktop-right。 5 【正确答案】 (1)cout “析构函数 .n“ (2)a1 (3)a1 print() (4)delete (5)delete 【试题解析】 本题考查用 C+语言对输出的实现。 题目中没有

27、什么条件,只给出了输出结构,要求程序能实现这个输出。下面来具体分析代码。 第 (1)空很明显是类 AA的析构函数的函数体,类的析构函数一般在撤销一个对象时调用,根据题目的要求,要输出析构函数这样的结果,而在程序中没有与此相关的操作,那么此空应该是用来实现这个功能的,借鉴构造函数中的内容,我们很容易就得出此空答案为 cout “析构函数 .n“。 第 (2)空在主函数中,很明显此空所在的语 句是创建一个 AA类的对象,并让一个AA型的指针变量指向这个对象。在函数开始的时候声明了两个 AA型的指针变量a1和 a2,而 a2在下面已经有了值,那么这里只有用变量 a1,因此此空答案为a1。 第 (3)

28、空是在创建了两个对象后执行的语句,根据程序不难推断出,这里应该要实现对象 a1的数据输出,那么就要调用函数 print(),因此此空答案为 a1-print()。 第 (4)空所在的语句是在实现了构造函数与数据输出后执行的语句,从题目要求来分析,这里应该要调用对象的析构函数来输出 “析构函数 ”这样一个结果,上面我们已经分析到了对象的析构函数一般在撤销对象时调用。从对象的执行过程来分析,在对象的所有处理完成后也应该撤销对象来释放所占的资源,那么此空的任务应该是用来撤销 a1对象,在 C+中一般用关键字 delete,因此此空答案为delete。 第 (5)空和第 (4)空的情况一样,因此此空答

29、案为 delete。 6 【正确答案】 (1)String (2)throws (3)!done (4)try (5)catch 【试题解析】 本题考查 Java中字符串的处理。 题目要求程序完成从 键盘读入一个字符串,然后采用 parseInt方法将其转换为一个相应的整数。这里的关键是如何将一个字符串转换为一个相应的整数,而这个过程在 parseInt方法中实现了,我们要做的工作主要是如何对字符串进行操作。下面来具体分析程序。 第 (1)空在类 testThrows下面,从程序中不难看出,此空的作用是定义函数readString()的返回类型,再从程序后面的语句 return r可以知道这个

30、函数返回的是变量 r的值,而变量 r是一个字符串型的变量,因此此空答案为 String。 第 (2)空也是函数 readString()定义的内容,从此空后面的内容不难推断出,此处是要显式生成异常来处理程序中的异常。而在 Java中,一般用关键字 throws来显式生成异常,因此此空答案为 throws。 第 (3)空很明显是循环的判断条件,从程序中可以看出,这个循环是用来对输入的字符串进行相关的处理的,如果一直可以取到有效字符,循环肯定不会结束,而判断是否取到有效字符,是通过布尔变量 done来实现的,那么只要布尔变量done的值为真循环则结束,因此此空答案为 !done。 第 (4)空与第 (5)空需要结合起来看,它们都在 入口函数中,如果我们对 Java中的异常处理非常了解的话,这两个空应该很简单,从第 (5)空后面的 (IOException e)很明显地看出是要处理异常操作。在 Java中,一般 try与 catch结合起来使用,如果在 try中产生了异常,那么在 catch中对异常进行处理。因此这两个空的答案分别为 try和 catch。

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

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

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