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

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

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 27 及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 【说明】 在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组: int x34=1, 0, 0, 0, 0, 5, 0,0), 0, 0, 7, 2; 可用以下数组 a来表示 : int a3=3, 4, 4, 0, 0,1, 1, 1, 5), 2, 2,

2、 7, 2, 3, 2; 其中三元数组 a的第 1行元素的值分别存储稀疏矩阵 的行数、列数和非零元素的个数。 下面的流程图描述了稀疏矩阵转换的过程。 【流程图】 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 【程序 2.1说明】 求所有满足如下条件的三位数:它除以 11得的商等于它各位数字的平方和。例如 550,除以 11商为 50, 50=52+52+02。 【程序 2.1】 void main() int i, j,n,s; for(i=100;i =999;i+) n=i; j=n/11; s=0; while(1) (2) n/=10; if(3) pri

3、ntf(“%dt“,i); 【程序 2.2说明】 本程序输入一字符串,将其中的大写字母改变成小写字母。 【程序 2.2】 void main() int i=0; char s120; scanf(“%s“,s); while(4) if(5) si=si- A+a; i+; printf(“%sn“,s); 3 阅读以下说明和 C语言程序,将应填入 (n)处的字句写在对应栏内。 【说明】 设有 3n+2个球互连,将自然数 1 3n+2分别为这些球编号,使相连的两球编号之差的绝对值正好是数列 1, 2, , 3n+1中的各数,如下图所示: 其中填自然数的思想如下; (1)先自左向右,第 1列中

4、间 1个填数,然后第 2列上、下 2个填数,每次 2列;但若 n为偶数,最后 1次 只排第 1列中间一个数。 (2)自右向左,先右第 1列中间填数;若 n是奇数,再右第 2列中间填数。然后依次右第 1列上、下 2个填数,再右第 2列中间 1个填数,直到左第 2列为止。 【程序】 #include stdio.h #define size 10 int a3size; void main() int i,k,m,n; printf(“imput the n:“); scanf(“%d“, k=1; for(i=0; i =n/2; i+) a12*i=k; k+; if(i=n/2) k+; (

5、2) k+; if(n%2=1) (3) k+; m=n; else (4) for(i=0; i n/2; i+) a1m-2*i=k; k+; (5) k+; a2m-2*i-1=k; k+; a11=k; printf(“n“); printf(“ “); for(i=1; i =n; i+) printf(“%6d“,a0i); printf(“nn“); for(i=0; i =n+1; i+) printf(“%6d“,a1i); printf(“nn“); printf(“ “); for(i=1; i =n; i+) printf(“%6d“,a2i); printf(“n“)

6、; 4 阅读以下说明和 C语言程序,将应填入 (n)处的字句写在对应栏内。 【说明】 计算 n的合数。一个整数 n可以有多种划分,使其划分的一列整数之和为 n。例如,整数 5的划分为: 5 4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 共有 7种划分。这种划分的程序如下所示。 【程序】 #include stdio.h int n1000,m,k; void output sum() int j; for(j=0;nj!=0;j+) printf(“%dt“,nj); printf(“n“); void sum(int i) if(m-ni ni) m=m-ni;

7、 (1) i+; ni+1=0; else (2) m-=ni; i+; if(m!=ni) sum(i); else output_sum(); if(ni 1) ni-; (3) else while(ni=1) (4) if(i!=0) (5) sum(i); void main() int i; scanf(“%d“, m=k=n0; for(i=1;i =k;i+) ni=0; while(n0!=1) n0-; i=0; sum(0); m=k; 5 阅读以下说明和 C+程序,将应填入 (n)处的字句写在对应栏内。 【说明】 字符串在程序设计中扮演着重要角色。现需要设计字符串基类

8、string,包含设置字 符串、返回字符串长度及内容等功能。另有一个具有编辑功能的串类edlt_string,派生于 string,在其中设置一个光标,使其能支持在光标处的插入、删除操作。 【程序】 #include iostream.h #include stdio.h #include string.h class string int length; char *data; public: int get_length() return length; char *get_data() return data; string() delete data; int set data(int

9、 in_length, char *in_data); int set_data(char *data); void print() cout data endl; ; class edit_string: public string int cursor; public: int get_cursor() return cursor; void move_cursor(int dis) cursor=dis; int add_data(string *new_data); void delete_data(int num); ; int string:set_data(int in_leng

10、th,char *in_data) length=in_length; if(!data) delete data; (1) strcpy(data,in_data); return length; int string:set data(char *in_data) (2) if(!data) delete data; (1) strcpy(data,in_data); return length; int edit_string:add_data(string *new_data) int n,k,m; char *cp,*pt; n=new_data- get_length(); pt=

11、new_data- get_data(); cp=this- get_data(); m=this- get_length(); char *news=new charn+m+1; for(int i=0; i cursor; i+) newsi=cpi; k=i; for(int j=0; j n; i+,j+) newsi=ptj; cursor=i; for(j=k; j m; j+,i+) (3) newsi=0; (4) delete news; return cursor; void edit string:delete_data( int num) int m; char *cp

12、; cp=this- get_data(); m=this- get_length(); for(int i=cursor; i m; i+) (5) cpi=0; 6 阅读以下说明和 Java代码,将应填入 (n)处的语句写在对应栏内。 【说明】 进行两个整数之间的比较,由考生通过输入窗口分别输入两个整数,程序比较出结果。例如:先后输入的两个数分别为 25和 36。 比较结果显示: 25!=36 25 36 25 =36 【 Java代码】 import javax.swing.JOptionPane; public class Java3 public static void main(S

13、tring args) String (1) / 用户输入第 1个字符串 secondNumber, / 用户输入第 2个字符串 result; / 包含输出 int number1, / 比较的第 1个数 number2; / 比较的第 2个数 / 用户输入的第 1个 字符串 firstNumber = JOptionPane. (2) (“Enter first integer:“); /读用户输入的第 2个字符串 secondNumber = JOptionPane.showlnputDialog(“Enter second integer:“); 将字符串类型转换成整数类型 numbe

14、r1= Integer. (3) (firstNumber); number2= Integer.parselnt(secondNumber); result= “: if (4) result=number1+“=“+number2; if (number1 != number2) result=number1+“!=“+number2; if (number1 number2) result=result+“n“+number1+“ “+ number2; if (number1 number2) result=result+“n“+number1+“ “+number2; if (num

15、ber1 =number2) result=result+“n“+number1+“ =“+number2; if (numbed =number2) result=result+“n“+number1+“ =“+number2; /显示结果 JOptionPane.(5).( null, result, “Comparison Results“, JOptionPane. INFORMATION_MESSAGE); /程序正常退出 System.exit(0); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 27 答案与解析 1 【正确答案】 (1)a02=W; (2)xij0; (3

16、)ak2=xij; (4)k+; (5)i+; 【试题解析】 本题考查程序流程图及数组的操作。 根据题目的意思,本题的流程图是用来描述稀疏矩阵转换过程的。而三元数组 d的第 1行元素的值分别用来存储稀疏矩阵 x的行数、列数和非零元素个数,在第 (1)空位置处,前面已经分别存储了稀疏矩阵 x的行数和列数,只差非零元素的个数没有存储进数组 a。因此,此空应该填 a02=W。 在第 (2)空的前面有两条判断语句,我们可以看出它们是为了保证取到的元素是稀疏矩阵中的元素,再往下我们应该判断此元素是否是 0,因此,此空应该填xij0。 根据程序流程图,如果第 (2)空中的条件为真,即取到的元素不为 0,那

17、么我们应该将该元素存放到三元数组 a中,第 (3)空的前面两条语句已经分别用于存储了稀疏矩阵非 0元素的行号和列号,那么接下来应该是保存其值。因此,此空的答案是 ak2=xij。 由题目中对三元数组 a的描述可以知道,三元数组 a的每一行只存储 3个元素。再看流程图,第 (4)空的前面三条语句都表示向三元数组 a中存储一个元素。因此,如果再要往数组中添加元素,就需要存放到另外一行。因此,第 (4)空应该是将数组的行号加 1,即 k+。 结合流程图中三个判断语句的结构和作用来分析,第 (5)空应 该是 i+,它的作用是保证能取到稀疏矩阵中每一行的元素。 2 【正确答案】 (1)n (2)s=s+

18、(n%10)*(n%10); (3)j=s (4)si (5)si =A (3)a1n+1=k; (4)m=n+1; (5)a0m-2*i-1=k; 【试题解析】 本题考查 C语言中具体算法的实现。 题目中要求将 3n+2个球互连,并用自然数 1 3n+2分别为这些球编号,使相连的两球编号之差的绝对值正好是数列 1, 2, , 3n+1中的各数。题目中还给出了具体的填自然数的思想。我们要完成的工作就 是用 C语言描述出题目中给出的思想。首先我们需要对其思想有个正确的认识,这是关键所在。 下面,我们来分析代码。结合整段程序代码,我们可以分析出,二维数组 a用来存放我们要填的数字,第一维表示行数,

19、总行数应该是 3。第二维表示列数,总列数应该是 n+2。其中的第 (1)空所在的位置是表示一个条件判断语句的条件,在这之前已经对第 1列的中间 1个进行了填数,那么根据 “先自左向右,第 1列中间 1个填数,然后第 2列上、下 2个填数,每次 2列 ”的思想,再结合下面的填数程序语句,我们可以知道,此语句就是用来实现在先第 1列中间 1个填 数后,对第 2列上、下 2个进行填数,每次 2列这个思想的。因此,第 (2)空的答案就出来了,是对第 2列下 (第 3行 )进行填数,因此,答案为 “a22*i+1=k”。因为条件判断语句下面是进行了 2次填数,因此可以判断 n 应该是个奇数,因为若 n为

20、偶数,最后 1次只排第 1列中间一个数,就不需要这个操作了。因此,第 (1)空的作用应该是用来判断 n是奇数,所以此空答案为 (n%2=1)。 第 (3)空所在的位置在条件 n%2=1成立的情况下才执行,条件 n%2=1成立表明 n 是奇数,根据若 n是奇数,再右第 2列中间填数的 思想,我们可以知道,此处应该是对右第 2列中间填数,因此,答案为 a1n+1=k。 第 (4)空所在的位置是条件 n%2=1不成立的情况下才执行,在上面我们知道 n%2=1是用来判断 n是否为奇数,如果 n 不是奇数,我们不做什么,但为了方便后面的操作,应该将 n+1的值保存起来,因此,此空的答案为 m=n+1。

21、根据思想:若 n 是奇数,再右第 2列中间填数。然后依次右第 1列上、下 2个填数,再右第 2列中间 1个填数,直到左第 2列为止。在前面程序中,我们已经完成了前面部分,第 (5)空所在的循环体就是用来完成后 面部分的,在循环体中已经实现了对中、下进行填数,缺一个对上进行填数的代码,因此,第 (5)空要完成的任务就是对上行进行填数,因此,答案为 a0m-2*i-1=k。 4 【正确答案】 (1)ni+1=m; (2)ni+1=ni; (3)sum(i); (4) m+=ni; (5)ni-; 【试题解析】 本题考查 C语言中计算 n 合数方法的实现。 题目要求计算 n 的合数,我们首先来了解一

22、下什么是 n的合数。在正整数 n 的所有不同的划分中,将最大加数 n1不大于 m的划分个数记作 q(n,m)。可以建立q(n,m)的如下递推关系。 (1)q(n, 1)=1, n1 当最大数 n1不大于 1时,任何正整数只有一种划分形式,就是全 1。 (2)q(n,m)=q(n,n), mn 最大加数 n1实际上不能大于 n。因此, q(1, m)=1。 (3)q(n,n)=1+q(n,n-1) 正整数 n 的划分由 n1=n 的划分和 n1n-1的划分组成。 (4)q(n,m)=q(n,m-1)+q(n-m,m), n m 1 正整数 n 的最大加数 n1不大于 m的划分 由 n1=m的划分

23、和 n1m-1的划分组成。要想求出所有解,只有递归到最底层即全为 1为止。 知道了上述特性,下面我们来看代码。在代码中首先声明一个数组和两个全局变量 k,m。结合程序可以看出,其中数组 ni中存放的是当前划分的最大加数,而 m中存放的是当前被划分的数。程序代码中有三个函数,一个是主函数、一个output_sum()函数和一个 sum()函数,函数 output_sum()的功能很简单,就是输出一次划分结果,在 sum()函数中被调用。 经过分析不难发现,函数 sum()的作用是实现整数的划 分。在函数体中,首先是一个条件判断语句,其作用是判断当前被划分的数 m是否小于当前最大加数的两倍,如果条

24、件成立,说明数被划分为两个数后,其最大加数大于另一个数,而另一个数应该存放在数组中。此时执行语句 m=m-ni来求出另一个数,接下来应该是保存这个数到数组中的下个位置,第 (1)空就用来完成这个任务,因此,答案为ni+1=m。 第 (2)空所在的位置是条件不成立的情况下运行的语句,条件不成立,说明数被划分为两个数后,其最大加数小于另一个数,数可以有更大的最大加数,因此,将当前的最大加数保存到数组中的 下个位置,此空答案为 ni+1=ni。 第 (3)空也在一个条件选择语句下面,此条件语句用于判断当前最大加数是否大于 1,如果大于 1,则需要接着划分,因此要调用函数 sum(),其参数是 i,所

25、以此空答案为 sum(i)。 第 (4)空是条件不成立即当前最大加数为 1的情况下执行的语句,当最大加数为 1时,说明递归到了最底层,此时,递归应该往回走了,这需要还原当前最大划分数 m(为这个数的其他划分做准备 ),因此,这个空的答案为 m+=ni。 第 (5)空是在条件 i!=0为真的情况下执行的语句,如果条件 为真,说明递归还没有回到最上层,应该求当前被划分数在当前最大加数变小后的其他划分情况,因此,此空答案为 ni-。 5 【正确答案】 (1)data=new charlength+1; (2)length=strlen(in_data); (3)newsi=cpj; (4)set_d

26、ata(news); (5)cpi=cpi+num; 【试题解析】 本题考查 C+中字符串的操作。 字符是程序设计中常用的一种数据类型,而字符串表示一串字符,在程序设计中扮演着重要角色,是考 试中常出现的内容。题目要求设计一个基类能实现字符串设置、返回字符串长度及内容等功能,设计一个子类能支持在光标处的插入、删除操作。 下面我们来看代码。首先定义了一个 string基类,在 string基类中,声明了两个成员变量和几个成员函数。接着定义了一个继承 string类的派生类 edit_string。再下面是对类中成员函数的实现。 第 (1)空在 set_data()函数体中, int string

27、:set_data()表明此函数是基类中的成员函数,根据基类要实现的功能,此函数要实现返回字符串长度和设 置其内容,在函数体中其长度已经给出,但分配存储空间被 delete data删除掉了,应该重新分配,在 C+中一般用关键字 new 实现空间的动态分配。因此,第 (1)空的答案是data=new charlength+1。 第 (2)空在另一个 set_data()函数体中,这两个函数同名,但参数不同,这是 C+ 中用同名函数实现多态的技巧。此函数功能同上一个函数,但它的形参中没有指明字符串的长度,因此,在函数开始时要求出字符串的长度,用函数 strlen()。所以,此空答案为 lengt

28、h=strlen(in_data)。 第 (3)空和第 (4)空在函数 add_data()中,此函数是派生类中的成员函数,根据题目要求它要实现的功能是在光标处进行插入。在此函数体中重新分配了一块内存空间,其长度是原有字符串长度和要插入字符串长度之和加 1,用来存放这两个字符串。第 (3)空所在的位置是循环体下面,根据循环体的判断条件 i m我们可以想到这是要对长度为 m的字符串进行插入。因此,此空答案为 newsi=cpj。而第(4)空是在完成了插入工作以后,根据程序上下文推断,应该是计算字符长度并返回,因此,答案为 Set_data(news)。 第 (5)空在函数 delete_data

29、()中,根据题目要求,此函数应该是实现子类在光标处进行删除的功能。删除一般采用覆盖技术,即将后面的字符往前移动来覆盖掉要删除的字符,第 (5)空实现的就是这个功能,要删除 num个字符,后面的字符应该往前移动 num,因此,此空答案为 cpi=cpi+num。 6 【正确答案】 (1)firstNumber (2)showInputDialog (3)parseInt (4)number1=number2 (5)showMessageDialog 【试题解析】 本题考查 Java中的语法结构和两个数大小比较的实现。 题目要求由考生通过输入窗口分别输入两个整数,比较其大小并输出结果。下面来分析程

30、序代码,程序中定义了一个类 Java3,在这个类中实现题目要求的功能。 第 (1)空所在代码行的注释是用户输入第 1个字符串,但这在程序的开始,没有进行输入操作,应该是声明一个字符串型变量用来存放用户输入的第 1个字符串,而在这个空的前面有一个关键字 String 用来表明所声明的变量是字符串型的,结合后面的程序,我们知道用来存放输 入的第 1个字符串的变量是firstNumber,因此,此空答案为 firstNumber。 根据注释,第 (2)空所在代码行的作用是读用户输入的第 1个字符串,而实现这个功能的是 JOptionPane包中的 showlnputDialog()函数,结合后面的程

31、序,我们不难找出此空的答案,为 showlnputDialog。 再根据注释,我们知道第 (3)空所在代码行的作用是将第 1个字符串类型的内容转换成整数类型,在 Java中,一般通过类型对象的 parseInt()方法,结合后面的程序,我们也不难找出此空的答 案,为 parseInt。 第 (4)空是条件判断语句中的条件,根据整个程序,我们不难发现变量 result中存放的是要输出的结果,而语句 result=number1+“ “+number2 是将number1=number2 这样一个结果存放到 result中,那么只有当 number1 等于number2 时,才输出这个结果,因此,第 (4)空的作用应该是确定 number1 等于number2。所以,此空答案为 number1=number2。 第 (5)空在注释显示结果下面,从上面的程序中我们知道,变量 result中存放的是要输出的结果,根据下面的程序,很明显是要调用包 JOptionPane中的某个方法来实现输出。此方法应该是 showMessageDialog(),因此,此空答案为showMessageDialog。

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

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

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