如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
●试题一阅读以下算法说明和流程图,回答问题1和问题2。【算法说明】下面是一段插入排序的程序,将R[k+1]插入到R[1…k]的适当位置。R[0]=R[k+1];j=k;while(R[j]>R[0]){R[j+1]=R[j];j--;}R[j+1]=R[0];【流程图】图2算法的流程图【测试用例设计】(while循环次数为0、1、2次)【问题1】指出算法的流程图中(1)~(3)处的内容。【问题2】指出测试用例设计中(4)~(9)处的内容。●试题一[问题1]【答案】(1)F(2)R[j+1]=R[0]〒(3)T[问题2]【答案】(4)①③(5)①②②③(6)①②②③(7)>#include#includechar*fun(chartt[]){inti;for(i=0;tt[i];i++){if((tt[i]>=′A′)&&((1)))(2);}return((3));}main(){chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));}●试题四【答案】(1)p&&p->data!=e或p&&(*p).data!=e(2)p->Lchild或(*p).Lchild(3)s->Rchild或(*s).Rchild(4)p->Lchild或(*p).Lchild(5)p==pp->Lchild或p(*pp).Lchild【解析】(1)程序的第一条语句是变量的声明及赋初值,p指向二叉查找树的根。接下来从while循环的注释部分可以看出,该循环的功能是查找键值为e的结点。当循环的判断条件edata时,进入左子树查找,否则到右子树查找。程序中没有关于找到结点的处理代码,即循环内部只处理了没找到结点的情况,所以循环条件应该是当找到键值为e的结点时退出循环。另外,应注意一个隐含的限制条件"p=NULL"时,表示已经查找完毕,无需进入循环。通过分析,(1)应填p&&p->data!=e。(2)if程序段是处理第三种情况的,由循环中的语句"s=s->Rchild;"可看出,s用于要删结点的左子树中查找键值最大的结点,所以s的初值应是要删除结点的左子结点。可见,(2)应填写p->Lchild。(3)根据前面所述的二叉树规则可知,要找的结点s应是左子树中查找键值最大慕岬悖?s的初值应是要删除结点的左子结点。可见,(3)应填p->Rchild。本题把①、②结合在一起进行处理,所以引入了一个中间变量c,用c来存储用于替换p的结点。现在的关键问题是什么条件可以使这两种情况和在一起,因为若删除的结点为叶子结点时,p->Rchild与p->Lchild都为NULL;若删除的结点有一个子结点时,如果有左子结点,则p->Rchild为p->Rchild;如果有右子结点,则p->Lchild为NULL。当p->Lchild不为NULL时,说明是第二种情况,p结点含左子结点,所以c=p->Lchild;当p->Lchild为NULL时,说明有两种可能:第一:p->Rchild也为NULL,则p是叶子结点。第二:p->Rchild不为NULL,则p是有右子结点的结点。这两种情况都可以用c=p->Rchild,因为当p是叶子结点的时候用NULL代替p的位置即可,所以第(4)应填p->Lchild。在程序中很多地方都出现了变量pp,其实只要仔细看一下前面的程序就知道,pp一直指向的是p结点的前一个结点,即p的父结点,所以(5)的作用是判断p是其父结点的左子结点还是右子结点,(5)应填pp->Lchild=p。●试题五阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。【说明】①在类体中添加函数move(doubleax,doubleay)的定义,使得点的坐标x和y分别移动ax和ay个单位。②在类定义外完成重载的两个构造函数CPosition()和CPosition(doubledx,doubledy),其中前者为不带参数的构造函数,使CPosition对象的默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分别初始化为参数dx和dy的值。③完成函数doubledistance(doublebx,doubleby)的定义,该函数返回*this和点(bx,by)的距离。注意:除在指定的位置添加