1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 40 及答案与解析 1 阅读以下说明和流程图,回答问题将解答填入对应栏。 说明 本流程图实现采用递归函数来求一个整数数组中从元素 0到元素 n中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有 n的元素的数组的最小值时,只要求将前 n-1的元素的最小值与第 n个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。 注: int min(int X,int y)为返回两数中最小数的函数。 int minInArray(int a,int n)为返回数组中最小数的函数。 min
2、A为数组中最小值。 问题 l 将流程图的 (1) (4)处补充完整。 问题 2 min()函数的定义为 (5)。 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 说明 1 本程序输入一字符串,并将其中的大写字母变成小写字母。 C函数 1 #include stdio.h void main() int i=0; char s120; printf(“Enter a string.n“); scanf(“%s“,s); while( (1) ) if( (2) ) si=si-A+a; i+; printf(“%sn“,S); 说明 2 本程序用二分法,在已按字母次序
3、从小到大排序的字符数组 listlen中,查找字符 c,若 c在数组中,函数返回字符 c在数组中的下标,否则返回 -1。 C函数 2 int search(char list, char c,int len) ( intlow=0, high=len-1,k; while( (3) ); k=(10w+high)/2; if( (4) ) return k; else if( (5) )high=k-1; else low=k+1; return -1; 3 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 说明 函 数 void diff(Node*A,Node*B,N
4、ode*r)的功能是:根据两个由整数按升序构成的单链表 L1 和 L2(分别由 A,B指向 )构造一个单链表 L3(由 *r指向 ),要求 L3 中的所有整数都是 L1,并且不是 L2 中的整数,还要求 L3 中的所有整数都两两不等。 C函数 #include malloc.h typedef struct node int data; struct node*next; Node; void diff(Node*A,Node*B,Node*r) int lastnum; Node*P; *r=NULL; if(!A) return; while(1) if(A- data B- data)
5、lastnum=A data; p=(Node*)malloc(sizeof(Node); P- data=lastnum; P- next=*r; (2); do A=A- next; while( (3) ; else iffA- data B- data) B=B- next; else (4); lastnum=A- data; while (A while(A) lastnum=A- data; p=(Node*)malloc(sizeof(Node); P- data=lastnum; (5); *r=P; while(A 4 阅读以下函数说明和 C语言函数,将应填入 (n)处的字
6、句写在对应栏内。 说明 设一个环上有编号为 0 n-1的 n粒颜色不尽相同的珠子 (每粒珠子颜色用字母表示, n粒珠子的颜色由输入的字符串表示 )。从环上的某两粒珠子间剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子 ,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。 本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如: 10粒珠子颜色对应字符串为 “aaabbbadcc”,在 0号珠子前剪开,序列为 aaabbbadcc,
7、从左端取走 3粒 a色珠子,从右端取走 2粒 c色珠子,共取走 5粒珠子。若在 3号珠子前剪开,即 bbbadccaaa,共取走 6粒珠子。 C函数 int count(char*s,int start,int end) inti,c=0,color=sstart,step=(start end)?-1:1; for(i=start;si=color;i+=step) if(step 0 (2) ; return c; void main() char t,s120; int i,j,C,len,maxc,cut=0; printf(“请输入环 上代表不同颜色珠子字符串 :“); scanf(
8、“%s“,s ); len=strlen(s); for(i=maxc=0;i len;i+) /*尝试不同的剪开方式 */ c=count(s,0,len-1); if(c len) C+=count( (3); if(c maxc)cut=i;maxc=c; ) /*数组 s的元素循环向左移动一个位置 */ t=s0; for(j=1;i len;i+) (4); (5); printf(“在第 %d号珠子前面剪开,可以取走 %d个珠子 .n“,cut,maxc); 5 阅读以下说明和 C+程序,将应填入 (n)处的字句写在对应栏内。 说明 下面程序实现十进制向其它进制的转换。 C+程序
9、#include“ioStream.h“ #include“math.h“ #include typedef struct node int data; node*next; Node; Class Transform DUDlic: void Trans(int d,int i); /d为数字 ;i为进制 void print(); private: Node*top; ; void Transform:Trans(int d,int i) int m,n=0; Node*P; while(d 0) (1); d=d/i; p=new Node; if(!n) p- data=m; (2);
10、 (3); n+; else p- data=m; (4); (5); void Transform:print() Node*P; while(top!=NULL) p=top; if(p- data 9) cout data+55; else cout data; top=p- next; delete p; 6 阅读以下说明和 Java程序,将应填入 (n)处的字句写在对应栏内 说明 以下程序的功能时三角形、矩形和正方形的面积输出。 程序由 5个类组成: areatest是主类,类 Triangle, Rectangle和 Square分别表示三角形、矩形和正方形,抽象类 Figure提
11、供了一个计算面积的抽象方法。 Java程序 public class areatest public static viod main(string args) FigureFigures= New triangle(2,3,3),new rectangle(5,8),new square(5) ; for(int i=0; i Figures.length;i+) system.out.println(Figures+“area=“+Figures.getarea(); public abstract class figure public abstract double getarea()
12、; public class rectangle extends (1) double height; double width; public rectangle (double height,double width) this.height=height; this.width=width; public string tostring() return“rectangle:height=“+height+“,width=“+width+“:“; public double getarea() return (2) public class square exends (3) publi
13、c square(double width) (4); public string tostring() return“square:width=“+width“:“; public class triangle entends (5) double la; double lb; double lc; public triangle(double la,double lb,double lc) this.la=la;this.lb=lb;this.lc=lc; public string tostring()( return“triangle:sides=“+la+“,“+lb+“,“+lc+
14、“:“; public double get area() double s=(la+lb+lc)/2.0; return math sqrt(s*(s-la)*(s-lb)*(s-lc); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 40 答案与解析 1 【正确答案】 (1) minInArray(a,n); (2) 1; (3) minA=an-1; (4) minA=min(minInArray(a,n-1), an); (5) x y?x:y; 【试题解析】 本题目考查流程图。 题目是利用递归来求数组中的最小值,则一定是反复的调用一个求数组最小值的函数,直到比较数组中最后只剩下
15、两个数,则 (1)中填入的应是“minlnArray(a,n)”,然后,判断 n的值是否为 1,如果是,则说明数组中只有一个数,则它一定就是最小值,可以直接输出,所以 (2)应填入 “1”, (3)应填入“minA=an”;如果 n的值不是 1,则说明要继续递归,则再次调用求数组最小值的函数,把数组前 n-1项的最小值同第 n项做比较,所以 (4)填入“minA=min(minInArray(a,n-1), an)”,由 于 min()是一个比较函数,返回两数中较小的数,我们可以用三元运算符直接定义为 x y?x:y。 2 【正确答案】 (1) si (2) A =si&si = Z (3)
16、low =high (4) listk=c (5) listk c或 c listk 【试题解析】 函数 1的功能是将读入的字符串中大写字母变成小写字母,因此对读入的每个字符首先判断该字符是否为 0,所以 (1)填 “si”;然后判断该字符是否为大写字母, (2)填 “A =si&si =Z”。 函数 2根据二分查找的特点,函数 search 中 while循环的过程是将 (low+high)/2对应的元素与给定的字符 C比较,找到则返回,因此 (4)填 “listk=c”;否则继续。当 listk c时, high=k-1;当 listk c时, low=k+1。所以 (5)填 “listk
17、 c”或 “c listk”。直到 low high时循环终止,所以 (3)应填 “low =high”。 3 【正确答案】 (1) A&B (2) *r=p (3) A&A- data=lastnum (4) B=B- next (5) D- next=*r 【试题解析】 程序的思路是:在链表 A和链表 B 的指针均未到链尾时,从链表A取一个元素和链表 B中第一个元素进行比较,所以 (1)应填 “A&B”。如果链表A元素小于链表 B的元素,则将链表 A中元素直接插入链表 C中,指针后移,则(2)填 “*r=p”,在后移中屏蔽所有相同元素,则 (3)应填 “A&A- data=lastnum”
18、;如果链表 A元素大于链表 B 的元素,将链表 B 指针后移;如果链表 A元素等于链表 B 的元素,链表 A和链表 B 的指针都向后移,即 (4)填 “B=B- next”。如果链表B 已经到链尾,但链表 A没有结束,则将链表 A中的剩余元素加入到链表 C中,所以 (5)应填 “p- next=*r”。 4 【正确答案】 (1) step 0&i end (2) +c (3) s,len-1,c (4) sj-1=sj (5) slen-1=t 【试题解析】 依据取珠子个数最多的规则, count函数每次从左或从右取出相同颜色的珠子,因此从右到左的条件为 step 0&i end,即 (1)应
19、填 “step 0&iend”。当是同色珠子时,计数值加 1,所以 (2)填 “+c”。从右到左计算时,函数count调用的实参次序为 s,len-1,C。即 (3)应填 “s,len-1,c”。在尝试不同的剪开方式时,数组 s的元素要循环向左移动一个位置,则 (4)填 “sj-1=sj”,(5)填 “slen-1=t”。 5 【正确答案】 (1) m=d%i (2) top=p (3) top- next=NULL (4) p- next=top (5) top=p 【试题解析】 本题考查 C+编程,主要考查了链表的使用。 所有的问题只出在函数 Trans 中,它的功能是完成将十进制数 d
20、转换为任意进制i的数,并存在数组中。函数中首先定义了一个指向链表结点的指针,然后开始进行转换,进制转换应该是一个很常见的问题,就是不断的求模运算,所以 (1)处应填入 “m=d%i”。然后,我们要把求模的结果保存到链表结点中,并使链表首指针指向该结点,结点中指向下一个结点 ”的指针设为空,所以 (2)处应填入 “top=p”,(3)处应填入 “top- next=NULL”。由于求 模运算是从低位到高位逐位求出的,所以在我们在进行完第二次求模运算后,应该将第二次运算的结果放到链表首位,所以 (4)处应填入 “P- next=top”, (5)处应填入 “top=p”。 6 【正确答案】 (1) Figure (2) height*width (3) rectangle (4) super(width,width) (5) Figure 【试题解析】 本题考查 Java编程。 Figure类是一个抽象类,其他三个类 rectangle、 square、 triangle都要直接或间接继承该类,所以 (1) (5)处应为 “Figure”。 (2)处是要计算矩形面积,矩形面积等于长乘以宽,所以 (2)处应为 “height*width”。正方形是一个特殊的矩形,所以可以继承矩形类,所以 (3)处应为 “rectangle”, (4)处应为 “super(width,width)”。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1