问题 单项选择题

下面程序有注释的语句中,错误的语句是( )。 #include <iostream> using namespace std; class A{int a; public:void show A(){cout<<"this is A!";} }; class B:public A{int b; public:void show B(){cout<< "this is B!";} }; void main(){A ia,*piA;B ib,*piB;piA=ia; //第一个测试语句piA=&ib; //第二个测试语句piA->showA(); //第三个测试语句piA->showB(); //第四个测试语句 }

A.第一个测试语句

B.第二个测试语句

C.第三个测试语句

D.第四个测试语句

答案

参考答案:A

解析: ia应进行取地址操作。

选择题
问答题

【说明】 已知某二叉树的非叶子结点都有两个孩子结点,现将该二叉树存储在结构数组Ht中。结点结构及数组Ht的定义如下: #define MAXLEAFNUM 30 struct node{ char ch;/*当前结点表示的字符,对于非叶子结点,此域不用*/ char *pstr; /*当前结点的编码指针,非叶子结点不用*/ int parent; /*当前结点的父结点,为0时表示无父结点*/ int lchild,rchild; /*当前结点的左、右孩子结点,为0时表示无对应的孩子结点*/ }; struct node Ht[2*MAXLEAFNUM]; /*数组元素Ht[0]不用*/ 该二叉树的n个叶子结点存储在下标为1~n的Ht数组元素中。例如,某二叉树如果其存储结构如下图所示,其中,与叶子结点a对应的数组元素下标为1,a的父结点存储在Ht[5],表示为Ht[1].parent=5。Ht[7].parent=0表示7号结点是树根,Ht[7].child=3、Ht[7].rchild=6分别表示7号结点的左孩子是3号结点、右孩子是6号结点。

如果用0或1分别标识二叉树的左分支和右分支(如上图所示),从根结点开始到叶子结点为止,按所经过分支的次序将相应标识依次排列,可得到一个0、1序列,称之为对应叶子结点的编码。例如,上图中a,b,c,d的编码分别是100,101,0,11。 函数LeafCode(Ht[],n)的功能是:求解存储在Ht中的二叉树中所有叶子结点(n个)的编码,叶子结点存储在Ht[1]~Ht[n]中,求出的编码存储区由对应的数组元素pstr域指示。 函数LeafCode从叶子到根逆向求叶子结点的编码。例如,对上图中叶子结点a求编码的过程如下图所示。

typedef enum Status {ERROR,OK} Status;【C函数】Status LeafCode(struct node Ht[], int n){int pc, pf; /*pc用于指出树中的结点,pf则指出pc所对应结点的父结点*/int i,start;char tstr[31] = {’\0’}; /*临时存储给定叶子结点的编码,从高下标开始存入*/for(i = 1; (1) ; i++){ /*对所有叶子结点求编码,i表示叶结点在HT数组中的下标*/ start = 29; pc = i; pf = Ht[i].parent; while (pf != (2) ) {/*没有到达树根时,继续求编码*/if ( (3) .lchild == pc ) /*pc所表示的结点是其父结点的左孩子*/tstr[--start] = ’0’;elsetstr[--start] = ’1’;pc = (4) ; pf = Ht[pf].parent; /*pc和pf分别向根方向回退一层*/ }/* end of while */ Ht[i].pstr = (char *) malloc(31-start); if (!Ht[i].pstr) return ERROR; strcpy(Ht[i].pstr, (5) ); }/* end of for */ return OK;}/* and of LeafCode */