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

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

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 28 及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 【说明】 计算三角函数 sinx 给定精度 e和 n,若第 k步后的结果为 sin1,第 k+1步后的结果为 sin2,若 |sin1sin2| e,则返回 sin1的值。若没有达到精度 e,但是步骤达到 n步,则返回第 n步后的值。其流程图如下所示: 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 【程序 2.1说明】 已知一个排好序的数组,现输入一个数, 要求按原来的顺序规律,将它插入到数组中。 【程序 2.1】 #inclu

2、de stdioh #define N 100 void main() float aN+l,x; int i,p; printf(“输入已经排好序的数列: “); for(i=0; i N; i+) scanf(%f“, printf(“输入要插入的数: “); scanf(“%f“, for(i=0,p=N; i N; i+) if(x ai) (1) break; for(i=N-1; i =p; i-) (2) (3) for(i=0; i =N; i+) prinff(“%ft“,ai); 【程序 2.2说明】 本程序用变量 count统计文件中字符的个数。 【程序 2.2】 #in

3、clude stdio.h #include stdlib.h void main() FILE *fp; long count=0; if(fp=fopen(“letter.txt“,“r“)=NULL) printf(“can not open filen“); exit(0); while(!feof(fp) (4) count+; printf(“count=%dn“,count); (5) 3 阅读以下说明和 C语言程序,将应填入 (n)处的字句写在对应栏内。 【说明】 Fibonacci数列 A=1, 1, 2, 2, 5, 8, ) 有如下性质: a0=a1=1 ai=ai-1+

4、ai-2, i 1 对于给定的 n,另外有一个由 n个元素组成的数列 xn,该数列中各元素的值为: xi=ai/ai+1, i=0, 1, , n 现要求对 xn中的元素按升序进行排序,然后以分数形式输出排序后的 xn。例如n=5时,排序前的 xn=1/1, 1/2,2/3,3/5,5/8,排序后的 xn=1/2,3/5,5/8,2/3,1/1。程序中函数 make()首先生成排序前的 xn,然后调用函数 sort()进行排序,最后输出所求结果。 【程序】 #include stdio.h #include stdlib.h #include malloc.h struct fact long

5、 m,n; ; void sort(int n,struct fact *p) int a; long s,t,u,v; struct fact *q,*end; for(end=p+(n-1),a=1;a;end-) for(a=0,q=p;q end;p+) s=q- m; t=q- n; u=(q+1)- m; v=(q+1)- n; if( (1) ) q- m=u; (2) (3) (q+1)- n=t; a=1; void make(int n) int i; long a,b,c; struct fact *x,*y; x=(struct fact *)malloc(sizeof

6、(struct fact)*n); x- m=1: x- n=1; for(a=1,b=1,i=2;i =n;i+) (4) a=b; b=c; (x+(i-1)- m=a; (x+(i-1)- n=b; (5) printf(“x%d=%1d/%1d“,n,x- m,x- n); for(y=x+1;y x+n;y+) printf(“,%1d/%1d“,y- m,y- n); printf(“n“); free(x); void main() int n; printf(“input n:“); scanf(“%d“, make(n); 4 阅读以下说明和 C语言程序,将应填入 (n)处的

7、字句写在对应栏内。 【说明】 本程序对某电码文 (原文 )进行加密形成密码文,其加密算法 如下: 假定原文为C1,C2,C3, , Cn加密后形成的密文为 S1,S2,S3, , Sn,首先读入正整数 key(key 1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示: 加密时从 S1位置起顺时针计数,当数到第 key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第 key个字符位置时,将原文中字符 C2放入其中,并从环中除去该字符位置:依次类推,直至 n个原文字符全部放入密文环中。由此产生的 S1S

8、2Sn 即为原文 的密文。 例如,当 Key=3时,原文this is a decoding system 的密文为: aotgnhedi ys d imietsnc ss 当 Key=4时,该原文的密文为: ssdtyd htegiasiscnm e ion 本程序将电码的原文存放在字符数组 old中,加密钥匙存放在整数 key中。函数 decode用于将原文 old加密并返回密文字符数组的首指针。其中函数采用一个双向循环链表 CODE来表示密文环:函数 strlen用于计算一个字符串中的字符个数 (不包括字符串结尾符 O)。为了简单起见 ,程序中假设内存容量足以满足动态存储单元分配的要求。

9、 #include stdio.h #include stdlib.h typedef struct node char ch; struct node *forward;/* Link to next node. */ struct node *backward;/* Link to previous node.*/ CODE; int strlen(char *s) int len=0; while (*s+!=0) len+; return(len); char *decode(char *otd,int key) char *New; int length,count,i; CODE

10、*loop,*p; length=strlen(old); loop=(CODE *) malloc(length*sizeof(CODE); for (i=1;i length-1;i+) loopi,forward= (1) loop0.backward= loop0,forward= looplength-1.forward=loop; (2) for (p=loop,i=0;i length;i+) for (count=1 ;countkey;count+ p=p- forward; (3) p- backward- forward=p- forward; p- forward-ba

11、ckward=p- backward; (4) New=(char *)malloc(length+1) *sizeef(char); for (i=0;i length;i+) (5) Newlength=0; return (New); void main() char old256; int key, num=0; printf(“nPlease input the telegraph: n“); while (num 255 old (num=255)?num:num-1=0; do printf(“nPlease input Key (Key 1):“); scanf(“%d“, w

12、hile (key =1); printf( “nThe decode of telegraph:%sis:n%sn“,old,decode(old,key); 5 阅读以下说明及 C+程序代码,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序的功能是根据矩形左上角和右下角顶点坐标生成一个矩形对象,然后输出该矩形 4个顶点的坐标,计算并输出该矩形的面积。 【 C+代码】 #include iostream using namespace std; class MyPoint( /表示平面坐标系中的点的类 double x; double y; public: MyPoint (doub

13、le x,double y)this- x=x;this- y=y; double getX()const(1); double getY()const return y; void show()const cout ( x , y ); ; class MyRectangle /表示矩形的类 MyPoint upleft; /矩形的左上角顶点 MyPoint down right; /矩形的右下角顶点 public: MyRectangle(MyPoint upleft,MyPoint downright); MyPoint getUpLeft()constreturn up_left; /

14、返回左上角坐标 MyPoint getDownRight()constreturn down_right; /返回右下角坐标 MyPoint getUpRight()const; /返回右上角坐标 MyPoint getDownLeft()const; /返回左下角坐标 double area()const; /返回矩形的面积 ; MyRectangle: MyRectangle(2): up left(p1),down_right(p2) MyPoint MyRectangle:getUpRight()const return MyPoint(down_right.getX(),up_lef

15、t.getY(); MyPoint MyRectangle:getDownLeft()const return MyPeint(3); double (4) :area()const return (getUpLeft(),getX()-getDownRight().getX()* (getDownRight().getY()-getUpLeft().getY(); int main( ) MyRectangle r(MyPoint(0,2),MyPoint(2,0); r.getUpLeft(),show(); r.getUpRight().show(); r.getDown Right()

16、.show(); (5); cout r.area() end1; return 0; 6 阅读以下说明和 Java代码,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序通过移动滑动条修改颜色 RGB值,从而控制颜色。程序中有一个面板、 3个标签和 3个滑动条,标签和滑动条一一对应,分别对应三原色红、绿、蓝,任意拖动其中的一个滑动条,所对应的颜色值就会发生变化,面板的颜色也会发生对应的变化,如下图所示,滑动条值的范围是 0 255。 【 Java代码】 import java.awt.*; import java.awt.event.*; import javax.swing.*; p

17、ublic class simple extends JFrame implements AdjustmentListener public simple() setTitle(“simple“); setSize(300, 200); addWindowListener(new WindowAdapter() public void windowClosing(1) System.exit(0); ); Container contentPane=getContentPane(); JPanel p=(2); p.setLayout(new GridLayout(3, 2); p.add(r

18、edLabel=new JLabel(“Red 0“); p.add(red=new JScrollBar(Adjustable. HORIZONTAL, 0, 0, 0, 255); red.setBlocklncrement(16); red.addAdjustmentListener(this); p.add(greenLabel=(3) (“Green 0“); p.add(green=new JScrollBar(Adjustable.HORIZONTAL 0, 0, 0, 255); green setBIocklncrement(16); green.addAdjustmentL

19、istener(this); p.add(blueLabel=new JLabel(“Blue 0“); p.add(btue=new JScrollBar(Adjustable. HORIZONTAL, 0, 0, 0, 255); blue,setBIocklncrement(16); blue.addAdjustmentListener(this); contentPane.add(p, “South“); colorPanet=new JPanel(); colorPanet.setBackground(new Color(0, 0, 0); contentPane.add(4),“C

20、enter“); public void adjustmentValueChanged(AdjustmentEvent evt) redLabel.setText(“Red“+red.getValue(); greenLabel.setText(“Green“+green.getValue(); blueLabel.setText(“Blue“+blue.getValue(); coiorPanel.setBackground(new Color(red.getValue(), green.getValue(), blue.getValue(); colorPanel.repaint(); p

21、ublic static void main(String args) JFrame f=(5); f.show(); private JLabel redLabel; private JLabel greenLabel; private JLabel blueLabel; private JScrollBar red; private JScroilBar green; private JScrollBar blue; private JPanel colorPanel; 软件水平考试(初级)程序员 下午(应用技术)模拟试卷 28 答案与解析 1 【正确答案】 (1)i =n (3)ap=x

22、; (4)fgetc(fp); (5)fclose(fp); 【试题解析】 本题考查在 C语言中实现对数组的插入和对文件中字符个数的统计。 我们先来看程序 2.1。题目要求在程序 2.1中实现在排好序的数组中插入一个数,但不能改变数组中数字排序的规律。由于数组是已经排好序的,它有可能是按不递减的方法排序,也有可能是按不递增的方法排序。在插入时,从数组中第一个数开始,逐个 进行比较,直到找到比其大或相等的数,在其前面进行插入,在插入前应该先将数组中的元素逐个后移。 下面我们来看代码。代码中有三个循环,第 (1)空在第一个循环体下面的条件判断语句里,条件判断语句是判断要插入的数 J与数组中元素的大

23、小,如果数 x小于数组中的元素,就执行第 (1)空的语句。从上面的分析,再结合第二个循环语句的条件,我们可以知道,此空的作用是记录数要插入的位置,并把这个结果存放在变量 p 中,所以,答案为 p=i。 第 (2)空所在的位置是第二个循环体下面,根据分析,要完成的任务应该是将数组中要插入位置 后的元素逐个往后移动。所以,此空的答案为 ai+1=ai。 在完成了上述两空之后,再结合整个程序来看,很明显还有一个功能没有完成,那就是插入数 x,第 (3)空就是用于完成这个任务的。由于在代码的前面已经记录下了要插入的位置,所以,此空答案为 ap=x。 在程序 2.2中,题目要求完成的任务是用变量 cou

24、nt统计文件中字符的个数,要实现对文件中字符个数的统计,首先需要我们判断出哪些是字符,这就涉及 C语言中对文件中字符的判定。此外,还需要我们掌握对文件的基本操作。 下面,我们来看程序 2.2的代码。首先用一个条件判断语句来打开一个文件,如果打开成功,则执行下面的 while循环语句,循环体的功能是对文件中的内容逐个判断,如果是字符,则统计变量 count加 1,因此,第 (4)空的功能就是要找出文件中的所有字符。这里没有条件判断语句来判段是否是字符,需要用到 C语言中对文件处理的一个函数 fgetc(),其作用是可以取出文件中所有的字符,因此,此空答案为 fgetc(fp)。 第 (5)空在代

25、码的最后面,如果我们对文件操作很熟悉的话,不难发现文件在打开后还没有关闭,此空要实现的功能是关闭文件,因此,此空 答案为 fclose(fp)。 3 【正确答案】 (1)s*v =t*u (2)q- n=v; (3)(q+1)- m=s; (4)c=a+b; (5)sort(n,x); 【试题解析】 本题考查在 C语言中实现对数列的排序。 题目要求我们对 xn中的元素按升序进行排序,然后以分数形式输出排序后的xn,程序中函数 make()用来生成排序前的 xn,而使用函数 sort()进行排序。在生成排序前的 xn以前,我们应该仔细理解题目中给出的生成规则。 首先,我们来看函数 sort(),

26、此 函数的功能是排序。在函数体中我们可以看到它是用双重循环来实现对数列元素排序的,从整个函数我们可以分析出它排序的方法是从数列中找出一个最大的数存放到数列的最后面,在下次循环时,再从剩下的部分找出其最大的数存放到剩下部分的最后面,这样直到整个数列排好序。 第 (1)空是一个条件判断语句的条件,在第二重循环下面,根据上面的分析,该循环的作用是在数列中找出最大的数,那么,这个条件判断语句应该是判断相临两个数的大小,再结合程序中的内容,此空的答案应该是 s*v =t*u。 第 (2)空和第 (3)空是条件判断语句 结果为真的情况下执行的语句,如果条件为真,则说明前面的数要大于后面的数。而根据上面的分

27、析,要将较大:的数放到后面位置,以方便下次和再后面的数比较,因此,这两个空的作用是要实现对两个数位置的交换,答案应该分别为 q- n=v和 (q+1)- m=s。 接着,我们来看函数 make(),它的功能是用来生成排序前的 xn,在生成数列时,我们应该注意 Fibonacci 数列的性质,它的每一项等于前两项的和。在函数体中,我们可以发现第一个循环体就是用来生成排序前的 zn的。第 (4)空就在循环体内,我们仔细看代码,就可以发现 变量 c没有初值,但后面又把变量 c的值赋给了变量 b,因此,第 (4)空应该是给变量 c赋初值,但应该给它一个什么样的初值呢 ?结合 Fibonacci 数列的

28、性质 ai=ai-1+ai-2,我们很容易知道变量 c存放的就是 ai的值。因此,此空答案为 c=a+b。 第 (5)空是在循环体下面,上面我们已经说到,循环体生成了排序前的 xn,根据题目的要求,应该要调用函数 sort()进行排序了,因此,此空答案为 sort(n,x)。 4 【正确答案】 (1)loopi.backward= (2)looplength-1.backward= (3)p- ch=*old+; (4)p=p- forward; (5)Newi=loopi.ch; 【试题解析】 本题考查加密算法在 C语言中的实现及双向循环链的生成。 题目给出了具体加密算法的过程,要求函数 d

29、ecode用于将原文 old 加密并返回密文字符数组的首指针,并告诉我们函数采用一个双向循环链表 CODE来表示密文环。函数 strlen 用于计算一个字符串中的字符个数在程序中已经实现。 下面,我们来看 程序。根据题目给出的条件,我们知道函数 decode的基本功能和一些其他的性质。在函数 decode中,loop=(CODE*)malloc(length*sizeof(CODE)要求动态分配能存放 length个 CODE类型的内存空间,这说明分配了 length 个 CODE链表结点的空间,并把其首地址存放到指针变量 loop中。但题目要求 CODE 链表是双向循环链表,因此,还需要将这

30、些结点连接起来使其成为双向循环链表。程序通过一个循环语句来对除首结点和尾结点外的其他结点的前后指针域赋值,使 forward 指针域指向其后 一个结点,使 backward 指针域指向其前一个结点。因此第 (1)空的答案出来了,是 loopi.backward=&loopi-1。 为了构成循环链表,需要对链表中的首结点和尾结点进行操作,首结点的forward 指针域和 backward 指针域应该分别指向第二个结点和尾结点,而尾结点的 forward 指针域和 backward 指针域应该分别指向首结点和倒数第二个结点。因此,第 (2)空的答案应该是 looplength-1).backwar

31、d=&looplength-2。 第 (3)空和第 (4)空在一个循环体中,根据我们上面的分析,再结合代码,我们可以知道,这个循环应该是对数据实现加密的过程。加密算法规定:加密时从 S1位置起顺时针计数,当数到第 key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置,接着从环中下一个字符位置起继续计数,当再次数到第 key 个字符位置时,将原文中字符 C2放入其中,并从环中除去该字符位置;依次类推,直至 n 个原文字符全部放入密文环中。从程序中可以看出,第 (3)空处应该是当数到第 key个字符位置的时候,应该要完成的任务,那么任务就是将原文中的字符 放入该密文字符

32、位置中,同时要将原文中的字符往后移一个。所以,此空答案为 p- ch=*old+。接下来应该从环中除去该字符位置,接着从环中下一个字符位置起继续计数,而删除环中该字符位置已经实现,第 (4)空的作用只能是移动指针 p去环中下一个位置,因此答案为 p=p- forward。 接下来的代码重新动态分配了一段空间,用来存放加密后的密文,第 (5)空的作用应该是将密文环中的内容依次放入重新分配的数组 New 中,因此,此空的答案为 Newi =loopi.ch。 5 【正确答案】 (1)return x (2)MyPoint p1, MyPoint p2 (3)up_left.getX(), down

33、_right.getY() (4)MyRectangle (5)r.getDownLeft().show() 【试题解析】 本题考查 C+语言的基本语法结构和计算矩形面积。 题目要求根据矩形左上角和右下角顶点 (已知 )坐标生成一个矩形对象,然后输出该矩形 4个顶点的坐标,计算并输出该矩形的面积。要计算矩形的面积,首先应该求出其长和宽。其长等于矩形的右上角顶点的 x坐标减去矩形的左上角顶点的 x坐标;其 宽等于矩形的右上角顶点的 y坐标减去矩形的右下角顶点的 y坐标。 程序中定义了一个表示平面坐标系中点的类 MyPoint来实现对矩形的操作,在其中定义了两个成员变量和一些公有的成员方法。第 (

34、1)空在这个类的 getX()方法中,结合整个程序来看,此方法应该是用来获得平面中一点的 x坐标,从紧接着的下一个函数,我们也很容易判断出这个函数的作用,因此,此空答案为 return x。 程序中又定义了一个表示矩形的类 MyRectangle来实现对矩形的操作,在这个类中定义了很多对矩形进行各种操作的方法。第 (2)空在 其构造函数 MyRectangle()中,是构造函数的参数,根据构造函数声明可以知道,其两个是 MyPoint类型的两个点,结合其函数下面的语句可以知道,这两个点分别是 p1和 p2,因此,此空答案为 MyPointp1,MyPointp2。 在知道矩形的左上角顶点和右

35、下角顶点后,那么矩形的左下角顶点 x坐标就等于左上角顶点的 x坐标, y坐标就等于右下角顶点的 y坐标。第 (3)空在方法getDownLeft()下面,此方法的作用是求出矩形左下角顶点坐标并返回,它是通过调用类 MyPoint的构造函数来实现的,而类 MyPoint的构造函数的两个参数是平面坐标系中点的 x和 y坐标。因此,此空答案为 up_left.getX(),down_right.getY()。 根据代码中的内容我们可以知道,第 (4)空所在的函数是实现求矩形的面积。而根据类 MyRectangle中函数的声明,用来求面积的函数是它的成员函数,而 MyRectangle:area()则

36、表示函数 area()是类 MyRectangle中的成员函数。因此,此空答案为 MyRectangle。 第 (5)空在主函数里面,在主函数里面生成了一个矩形对象 r,并给出 了这个对象的左上角顶点和右下角顶点坐标。根据题目要求,最后要输出各顶点的坐标值和这个矩形的面积,而程序中已经输出了除左下角顶点外的其他顶点的坐标值,因此,此空要用来输出左下角顶点的坐标值,程序中能用来输出的函数是 show(),即此空答案为 r.getDownLeft().show()。 6 【正确答案】 (1)WindowEvent e (2)new JPanel() (3)new JLabel (4)colorPa

37、nel (5)new simple() 【试题解析】 本题考查在 Java中实现对面板颜色的控制。 题目要求三原色红、绿、蓝,通过任意拖动其对应的一个滑动条来改变,而面板的颜色也会发生对应的变化。这需要我们了解 Java中对滑动条和颜色进行定义的类。下面我们来分析程序。 第 (1)空在类 simple的构造函数中,这个类是继承 JFrame这个框架类的,这个构造函数的作用是创建一个框架。很明显此空是函数 windowClosing()的参数,而这个函数的作用我们不难看出是关闭框架用的,其参数是 WindowEvent e,因此,此空答案就为 WindowEvent e。 第 (2)空是给 JP

38、anel 类型的变量 p赋一个值, JPanel 类型是控制板类型,在程序上面申请了一个容器,此空应该是在容器中创建一个控制板,而 Java中一般用关键字 new 来创建对象,因此,此空答案为 new JPanel()。 第 (3)空是给变量 greenLabel 赋一个初值,从程序中我们不难看出 greenLabel 是一个标签类型的变量,且其中存放的是绿色的值。结合程序中上下红和蓝的处理我们也不难推断出此空的答案为 new JLabel。 第 (4)空是容器对象 contentPane的 add()函 数的参数,这个函数的作用是往其对象中增加内容,其第一个参数是要添加的对象,第二个参数是添加的位置,从程序中不难看出应该添加对象 colorPanel,这是界面中下面的板块。因此,此空答案为 colorPanel。 第 (5)空是给 JFrame 类型的变量 f赋一个值,而 JFrame是框架类 simple的父类,那么变量 f 应该是一个框架对象,关键字 new一般用来创建一个新的对象,因此,此空答案为 new simple()。

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

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

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