第六章试题归类.docx
《第六章试题归类.docx》由会员分享,可在线阅读,更多相关《第六章试题归类.docx(34页珍藏版)》请在冰点文库上搜索。
第六章试题归类
(基础题)
一、选择题
(227)若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是
A)a,point,*&a
B)&*a,&a,*point
C)*&point,*point,&a
D)&a,&*point,point
A
(246)下面说明不正确的是
A)chara[10]="china";
B)chara[10],*p=a;p="china"
C)char*a;a="china";
D)chara[10],*p;p=a="china"
C
(251)有以下函数
charfun(char*p)
{returnp;}
该函数的返回值是
A)无确切的值
B)形参p中存放的地址值
C)一个临时存储单元的地址
D)形参p自身的地址值
B
(256)若说明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);
D
(268)设有定义:
intn=0,*p=&n,**q=&p,则下列选项中正确的赋值语句是
A)p=1;
B)*q=2;
C)q=p;
D)*p=5;
D
(270)下面程序的输出结果是
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));}
A)3
B)4
C)1
D)2
A
(271)有如下程序
inta[10]={1,2,3,4,5,6,7,8,9,10};
int*p=&a[3],b;b=p[5];
则b的值是
A)5
B)6
C)9
D)8
C
(426)现有如下定义:
inta,b,*p,*q;,则下列赋值语句错误的是
A)p=&a;
B)q=&b;
C)p=q;
D)p=a;
D
(427)现有如下程序段
#include"stdio.h"
int*fun(int*a,int*b)
{intc;
c=*a%*b;
return&c;}
main()
{inta=5,b=19,*c;
c=fun(&a,&b);
printf("%d\n",++*c);}
则程序段执行后的结果为
A)8
B)7
C)6
D)5
C
(428)现有inta,*b;,b=&a;,则下列运算错误的是
A)*&a
B)&*a
C)*&b
D)&*b
B
(430)现有如下定义语句
int*p,s[20],i;
p=s;
表示数组元素s[i]的表达式不正确的是
A)*(s+i)
B)*(p+i)
C)*(s=s+i)
D)*(p=p+i)
C
(436)有下面程序段
#include"stdio.h"
#include"string.h"
main()
{chara[3][20]={{"china"},{"isa"},{"bigcountry!
"}};
chark[100]={0},*p=k;
inti;
for(i=0;i<3;i++)
{p=strcat(p,a[i]);}
i=strlen(p);
printf("%d\n",i);}
则程序段的输出结果是
A)18
B)19
C)20
D)21
B
(465)下列不合法的指针变量的定义是
A)int*_k;
B)char*_245;
C)int*p;
D)double*5_is
D
(466)下列关于指针变量赋空值的说法错误的是
A)当赋空值的时候,变量指向地址为0的存储单元
B)赋值语句可以表达为变量名=′\0′;
C)赋值语句可以表达为变量名=0;
D)一个指针变量可以被赋空值
A
(468)阅读下面程序,则输出结果是
#include"stdio.h"
voidfun(int*a,int*b)
{intc=20,d=25;
*a=c/3;
*b=d/5;}
main()
{inta=3,b=5;
fun(&a,&b);
printf("%d,%d\n",a,b);}
A)6,5
B)5,6
C)20,25
D)3,5
A
(474)现有如下程序段
#include"stdio.h"
voidfun(int*a,int*b,int*c)
{*c=*a+*b;}
main()
{inta[2]={12,23},c;
fun(a,a+1,&c);
printf("%d\n",c);}
则程序的输出结果为
A)23
B)12
C)0
D)35
D
(477)阅读下面程序,则执行后的结果为
#include"stdio.h"
main()
{ char*str="abcdefghijklmnopq";
while(*str++!
=′e′);
printf("%c\n",*str);}
A)f
B)a
C)e
D)q
A
(503)现有定义inta=10,*p=&a;则不能使a的内容增1的语句是
A)*p++;
B)*p=*p+1;
C)++*p;
D)*p+=1;
A
(510阅读下面程序,则程序的输出结果为
#include"stdio.h"
main()
{intc[]={1,2,3,4,5,6};
int*p;
p=c;
printf("%d,",*p);
printf("%d\n",*++p);}
A)1,2
B)2,1
C)1,1
D)2,2
A
145下面程序的输出结果是____。
#include
char*p="abcdefghijklmnopq";
main()
{inti=0;
while(*p++!
='e');
printf("%c\n",*p);
}
A)cB)dC)eD)f
D
146下面程序的输出结果是____。
#include
f(intx,inty)
{return(y-x);
}
main()
{inta=5,b=6,c;
intf(),(*g)()=f;
printf("%d\n",(*g)(a,b));
}
A)1B)2C)3D)前面三个参考答案均是错误的
A
147下面程序的输出结果是____。
#include
main()
{inta=1,*p,**pp;
pp=&p;
p=&a;
a++;
printf("%d,%d,%d\n",a,*p,**pp);
}
A)2,1,1B)2,1,2C)2,2,2D)程序有错误
C
148下面程序的输出结果是____。
main()
{char*alpha[7]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX","YZ"};
char**p;
inti;
p=alpha;
for(i=0;i<4;i++)
printf("%c",*(p[i]));
printf("\n");
}
A)AEIMB)BFJNC)ABCDD)DHLP
A
149下面程序的输出结果是____。
#include
char*pp[2][3]={"abc","defgh","ijkl","mnopqr","stuvw","xyz"};
main()
{printf("%c\n",***(pp+1));/*①*/
printf("%c\n",**pp[0]);/*②*/
printf("%c\n",(*(*(pp+1)+1))[4]);/*③*/
printf("%c\n",*(pp[1][2]+2));/*④*/
printf("%s\n",**(pp+1));/*⑤*/
}
①A)aB)dC)iD)m
②A)aB)dC)iD)m
③A)hB)lC)qD)w
④A)kB)oC)uD)z
⑤A)ijklB)mnopqrC)stuvwD)xyz
DADDB
(530下面函数的功能是
char*fun(char*str1,char*str2)
{while((*str1)&&(*str2++=*str1++));
returnstr2;
}
A)求字符串的长度
B)比较两个字符串的大小
C)将字符串str1复制到字符串str2中
D)将字符串str1接续到字符串str2中
C
(277)执行以下程序后,a,b的值分别为
main()
{inta,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
A)-1,5
B)1,6
C)0,7
D)4,10
C
(247)以下程序的输出结果是
#include
voidprt(int *x,int *y,int *z)
{printf("%d,%d,%d\n",++*x,++*y,*(z++));}
main()
{inta=10,b=40,c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);}
A)11,42,31
12,22,41
B)11,41,20
12,42,20
C)11,21,40
11,21,21
D)11,41,21
12,42,22
D
(254)设有如下定义:
strucksk
{inta;
floatb;
}data;
int*p;
若要使P指向data中的a域,正确的赋值语句是
A)p=&a;
B)p=data.a;
C)p=&data.a;
D)*p=data.a;‘
C
(262)以下程序的输出是
structst
{intx;int*y;}*p;
intdt[4]={10,20,30,40};
structstaa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};
main()
{p=aa;
printf("%d\n",++(p->x));
}
A)10
B)11
C)51
D)60
C
(275)下列程序的输出结果是
intb=2;
intfunc(int*a)
{b+=*a;return(b);}
main()
{inta=2,res=2;
res+=func(&a);
printf("%d\n",res);
}
A)4
B)6
C)8
D)10
B
(276)下面能正确进行字符串赋值操作的是
A)chars[5]={"ABCDE"};
B)chars[5]={′A′,′B′,′C′,′D′,′E′};
C)char*s;s="ABCDE";
D)char*s;chara;scanf("%s",&s)
C
(292)以下程序有错,错误原因是
main()
{int*p,i;char*q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
......
}
A)p和q的类型不一致,不能执行*p=*q;语句
B)*p中存放的是地址值,因此不能执行*p=40;语句
C)q没有指向具体的存储单元,所以*q没有实际意义
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以执行*p=*q;没有意义,可能会影响后面语句的执行结果
D
(304)若有说明:
int*p,m=5,n;以下正确的程序段是
A)p=&n;scanf("%d",&p);
B)p=&n;scanf("%d",*p)
C)scanf("%d",&n);*p=n;
D)p=&n;*p=m;
D
(331)下面判断正确的是
A)char*a="china";等价于char*a;*a="china";
B)charstr[5]={"china"};等价于charstr[]={"china"};
C)char*s="china";等价于char*s;s="china";
D)charc[4]="abc",d[4]="abc";等价于charc[4]=d[4]="abc";
C
(356)若有下面的程序片段:
int[12]={0},*p[3],**pp,i;
for(i=0;i<3;i)
p[i]=&a[i*4];
pp=p;
则对数组元素的错误引用是
A)pp[0][1]
B)a[10]
C)p[3][1]
D)*(*(p+2)+2)
C
(363)有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。
则不能把结点b连接到结点a之后的语句是
structnode
{chardata;
structnode*next;
}a,b,*p=&a,*q=&b;
A)a.next=q;
B)p.next=&b;
C)p->next=&b;
D)(*p).next=q;
B
(281)若有以下程序
#include
inta[]={2,4,6,8};
main()
{inti;
int*p=a;
for(i=0;i<4;i++)a[i]=*p;
printf("%d\n",a[2]);
}
上面程序输出结果是
A)6
B)8
C)4
D)2
D
(315)下面程序段的运行结果是
chara[]="lanuage",*p;
p=a;
while(*p!
=′u′){printf("%c",*p-32);p++;}
A)LANGUAGE
B)language
C)LAN
D)langUAGE
C
(316)下面程序段的运行结果是
charstr[]="ABC",*p=str;
printf("%d\n",*(p+3));
A)67
B)0
C)字符′C′的地址
D)字符′C′
B
(328)下列程序的输出结果是
main()
{inta[5]={2,4,6,8,10},*p,**k;
p=a;
k=&p;
printf("%d",*(p++));
printf("%d\n",**k);
}
A)4
B)22
C)24
D)46
C
(330)下面程序段的运行结果是
char*p="abcdefgh";
p+=3;
printf("%d\n",strlen(strcpy(p,"ABCD")));
A)8
B)12
C)4
D)7
C
142下面程序的输出结果是____。
#include
main()
{inta[]={1,2,3,4,5};
intx,y,*p;
p=&a[0];
x=*(p+2);
y=*(p+4);
printf("%d,%d,%d\n",*p,x,y);
}
A)1,3,5B)1,2,3C)1,2,4D)1,4,5
A
143下面程序的输出结果是____。
voidive(x,n)
intx[],n;
{intt,*p;
p=x+n-1;
while(x
{t=*x;
*x++=*p;
*p--=t;
}
return;
}
main()
{inti,a[]={1,2,3,4,5,6,7,8,9,0};
ive(a,10);
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
A)1234567890B)0987654321
C)1357924680D)0864297531
B
(337)以下定义中,标识符prtint(*prt)[3]
A)定义不含法
B)是一个指针数组名,每个元素都是一个指向整数变量的指针
C)是一个指针,它指向一个具有三个元素的一维数组
D)是一个指向整型变量的指针
D
338函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。
能正确执行此功能的函数是()。
A)funa(int*x,int*y){B)funb(intx,inty){
intt;intt;
*t=x;x=y;y=*t;t=x;x=y;y=t;
}}
C)func(int*x,int*y){D)func(int*x,int*y){
*x=*y;*y=*x;*x=*x+*y;*y=*x-*y;*x=*x-*y;
}}
D
(392)已知inta;则下面的说明指针变量p的语句正确的是
A)intp=&a
B)int*p=a
C)int*p=&a
D)int*p=*a
C
(400)阅读下列程序,则执行后的结果为
#include"stdio.h"
main()
{intc[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};
printf("%x,%x\n",c[2][2],*(*(c+1)+1));}
A)3e,6
B)62,5
C)56,5
D)3E,6
A
(535)设有如下定义
char*s[2]={"abcd","ABCD"};
则下列说法错误的是
A)s数组元素的值分别是"abcd"和"ABCD"两个字符串的首地址
B)s是指针数组名,它含有两个元素分别指向字符型一维数组
C)s数组的两个元素分别存放的是含有4个字符的一维字符数组中的元素
D)s数组的两个元素中分别存放了字符′a′和′A′的地址
C
(544)下列程序的运行结果是
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=2004,b=9,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A)20049
B)92004
C)00
D)编译时出错
A
619已知:
inta,*y=&a;则下列函数调用中错误的是____。
A)scanf("%d",&a);B)scanf("%d",y);
C)printf("%d",a);D)printf("%d",y);
D
621设有说明int(*p)[4];其中的标识符p是____。
A)4个指向整型变量的指针变量
B)指向4个整型变量的函数指针
C)一个指向具有4个整型元素的一维数组的指针
D)具有4个指向整型变量的指针元素的一维指针数组
C
624已知:
chars[6],*ps=s;则正确的赋值语句是____。
A)s="12345";B)*s="12345";C)ps="12345";D)*ps="12345";
C
622已知:
chars[10],*p=s,则在下列语句中,错误的语句是____。
A)p=s+5;B)s=p+s;C)s[2]=p[4];D)*p=s[0];
B
625已知:
chara[3][10]={"BeiJing","ShangHai","TianJin"},*pa=a;不能正确显示字符串"ShangHai"的语句是____。
A)printf("%s",a+1);B)printf("%s",*(a+1));
C)printf("%s",*a+1);D)printf("%s",&a[1][0]);
C
626已知:
inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*ptr)[3]=a,*p=a[0];
则以下能够正确表示数组元素a[1][2]的表达式是____。
A)*(*(a+1)+2)B)*(*(p+5))C)(*ptr+1)+2D)*((ptr+1)[2])
A
627已知:
inta[