若说明int*p,n;则通过语句scanf能够正确读入数据的程序段是 A.p=&n;scanf("%d",&
若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是
A.p=&n;scanf("%d",&p);
B.p=&n;scanf("%d",*p);
C.scanf("%d",n);
D.p=&n;scanf("%d",p);
若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是
A.p=&n;scanf("%d",&p);
B.p=&n;scanf("%d",*p);
C.scanf("%d",n);
D.p=&n;scanf("%d",p);
若已定义x为int类型变量,说明指针变量p的正确语句是______。
A.int p=&x;
B.int*p=x;
C.int *p=&x;
D.*p=*x;
若有定义int *p,n;则通过语句scanf能够正确读入数据的程序段是()。
A.p=&n;scanf("%d",&p);
B.p=&n;scanf("%d",*p);
C.scanf("%d",n);
D.p=&n;scanf("%d",p);
A.*(a+i)
B.a[p-a]
C.p+i
D.*(&a[i])
A.p=2*(int*)malloc (sixeof(int))
B.p=(int*)calloc (2*sixeof(int))
C.p=(int*)malloc (2*sizeof(int))
D.p=2*(int*)calloc (sizeof(int))
(8 )有如下的函数定义:
int Xfun(int *a, int n){
int x=*a;
for(int *pa=a+1; pa<a+n; pa++)
if(*pa>x) x=*pa;
return x;
}
若执行了语句
int x[5]={23,46,78,55,16};
后,通过表达式 Xfun(x,5) 调用该函数,则得到的返回值为 【 8 】 。
试题四
阅读下列函数说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
[函数说明]
函数DeleteNode(Bitree *r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:
typedef struct Tnode{
int data;
struct Tnode *Lchild,*Rchild;
}*Bitree;
在二叉查找树上删除一个结点时,要考虑三种情况:
1若待删除的结点p是叶子结点,则直接删除该结点;
2若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;
3若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述1、2情况之一。
[函数代码]
int DeleteNode(Bitree *r,int e) {
Bitreep = *r, pp, s, c;
while((1) ) { /*从树根结点出发查找键值为e的结点*/
pp = p;
if (e< p->data) p = p -> Lchild;
else p = p->Rchild;
}
if(!p) return –1; /* 查找失败 */
if(p->Lchild && p->Rchild) { /* 处理情况3 */
s = (2);pp = p;
while ((3) ) { pp = s; s = s-> Rchild; }
p->data = s ->data; p = s;
}
/*处理情况1、2*/
if((4) ) c = p -> Lchild;
elsec = p -> Rchild;
if(p == *r) *r = c;
elseif ((5) ) pp -> Lchild = c;
elsepp->Rchild = c;
free(p);
return 0;
}
设有定义:int n=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是
A.p=1;
B.*q=2;
C.q=p;
D.*p=5;