1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 45(无答案)0 说明 信息处理过程中经常需要将图片或汉字点阵作旋转处理。一个矩阵以顺时针方向旋转 90后可以形成另一个矩阵,如下图所示。1 2 3 在上述流程图 a 和 b 所示的算法中:(1) 矩阵 A 第 i 行第 j 列的元素 A(i,j)被复制到矩阵 B 中的哪个位置?(2) A(i,j)后来又被复制到矩阵 C 中的哪个位置?(3) 填补流程图 b 中的空缺。4 函数 int factors(int n)的功能是判断整数 n(n=2)是否为完全数。如果 n 是完全数,则函数返回 0,否则返回-1。所谓“完全数 ”是指整数 n 的所有
2、因子(不包括 n)之和等于 n 自身。例如,28 的因子为 1,2,4,7,14,而 28=1+2+4+7+14,因此 28 是“完全数”。C 函数 1int factors(int n) int i,s;for(i=1,s=0;i=n/2;i+)if(n%i=0) (1)_;if( (2)_ )return 0;rerurn-1;说明 2函数 int maxint(int a,int k)的功能是用递归方法求指定数组中前 k 个元素的最大值,并作为函数值返回。C 函数 2int maxint(int a,int k) int t;if( (3)_ ) return (4)_;t=maxint
3、(a+1, (5)_ );return(a0t)?a0:t;5 已知一棵二叉树用二叉链表存储,t 指向根节点, P 指向树中任一节点。下列算法为输出从 t 到 P 之问路径上的节点。C 程序#define MaxSize 1000typedef struct node TelemType data ;struct node *ichiid,*rchiid;BiNode,*BiTree;void Path(BiTree t,BiNode *P)BiTree *stackMaxsize,*stacklMaxsize,*q;int tagMaxsize,top=0,topl;q=t;/*通过先序遍历
4、发现 P*/dowhile(q!=NULL q!=p)/*扫描左孩子,_日相应的节点不为 P*/ (1) ;stacktop=q;tagtop=0;(2) ;if(top0) if(stacktop=P) break; /*找到 P,栈底到栈顶为 t 到 P*/if(tagtop=1)top-;else q=stacktop;q=q-rchiid;tagtop=1; (3) ;top-;topl=0;while(top 0) q=stacktop; /*反向打印准备*/topl+;(4) ;top-;while( (5) ) /*打印栈的内容*/q=stackltopljprintf(q-da
5、ta);topl-;6 设一个环上有编号为 0n-1 的 n 粒颜色不尽相同的珠子(每粒珠子颜色用字母表示,n 粒珠子的颜色由输入的字符串表示)。从环上的某两粒珠子问剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如,10 粒珠子颜色对应字符串为 aaabbbadcc,在 0 号珠子前剪开,序列为 aaabbbadcc,从左端取
6、走 3 粒 a 色珠子,从右端取走 2 粒 c 色珠子,共取走 5 粒珠子。若在 3 号珠子前剪开,即 bbbadccaaa,共取走 6 粒珠子。C 函数int count(char *s,int start,int end) int i,c=0,color:sstart,step=(startend)?-1:1;for(i=Start;si=color;i+=step)if(step0 return c;void main() char t,s120;int i,k,c,len ,maxc,cut=0;printf(“请输入环上代表不同颜色珠子字符串:“);scanf(“%s”,s);len
7、=strlen(s);for(i=maxc=0; ilen;i+)( /*尝试不同的剪开方式*/c=count(s,0,len-1);if(clen) c+=count( (3) );if(cmaxc) cut=i;maxc=c;)/*数组 s 的元素循环向左移动一个位置*/t=s0;for(j=1;j len;j+) (4) ;(5) ;printf(“在第%d 号珠子前面剪开,可以取走%d 个珠子n“,cut,maxc);7 已知类 SubClass 的 getSum 方法返回其父类成员 i 与类 SubClass 成员 i 的和,类SuperClass 中的 getSum 为纯虚拟函数,
8、程序中的第 23 行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第 15 行且尚未执行第 15 行的语句时成员变量 j 的值,最后给出程序运行后的输出结果。C+代码01 #inclUdeiostream02 using namespace std;03 class SuperClass 04 private:05 int i;06 publiC:07 SuperClass()(i=5;)08 virtual iht getValueO(return i ;)09 virtual int getSum()=0;10 ;11 class SubClass:pub
9、lic SuperClass12 int J ;13 public:14 SubClass(int j):j(0)15 (1) =j; /用参数 j 的值更新数据成员16 ;17 int getValue()return j;)18 int getSum()19 return (2) getValue()+j;20 21 ;22 void main(void)23 SuperClass s=new SubClass(-3);24 couts- getValue()“;25 touts-getSum()endl;26 delete s;27 8 已知类 SubClass 的 getSum 方法返
10、回其父类成员 i 与类 SubClass 成员 j 的和;类SuperClass 中的 getSum 为抽象函数,程序中的第 14 行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第 22 行且尚未执行第 22 行语句时成员变量 i 的值,最后给出程序运行后的输出结果。Java 代码行号 代码01 public class UainJava02 public static void main(Stringargs)03 SuperClass s=new SubClass();04 Systemoutprintin(s.getValue();05 System.o
11、ut.printIn(s.getSum():06 07 08 abstract class SuperClass 09 private int i;10 public SuperClass()i=5;11 public int getValue()12 return i:13 14 public final abstract int getSum():15 16 class SubClass extends SuperClass17 int j;18 public SubClass()19 this(-3);20 21 public SubClass(int j)22 (1) .j=j;23 24 publiC int getValue()(return j;25 public int getSum()26 return (2) getValue()+j ;27 28