C指针习题参考答案Word格式.docx
《C指针习题参考答案Word格式.docx》由会员分享,可在线阅读,更多相关《C指针习题参考答案Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
strcpy(a,st);
D.chara[],*p;
strcpy(p=a[1],st+2);
5、设有数组intarray[3][4],下列引用数组元素的方法中错误的是D
A.array[i][j]B.*(*(array+i)+j)
C.*(array[i]+j)D.*(array+i*4+j)
6、有定义ints[4][5],(*ps)[5];
ps=s;
则对数组s中元素引用的正确
的是C
A.ps+1B.*(ps+3)C.ps[0][2]D.*(ps+1)+3
7、设有说明intb[4][4],以下不能等价表示元素b[3][3]的是:
B
A.*&
b[3][3]B.(*(*(b+3))+3)C.*(b[3]+3)D.*(*(b+3)+3)
8、若有说明char*s[]={?
.78,9012,?
6,_x0007_890};
则表达
式*s[1]>
*s[3]比较的是B
A.?
?
尴和9012B.'
5'
和'
3'
C.'
l'
9'
D.?
尸和?
6
9、设语句char*s[]={Student,Teacher,Father,Mother},*ps=s[2];
执行语句cout<
<
*s[1]<
'
'
ps<
*ps<
\n'
;
则输出结果是A
A.T,Father,FB.Teacher,F,Father
C.Teacher,Father,FatherD.语法错无输出
10、设有以下说明语句:
charsl[20]=hello,s2[20]=china;
constchar*ptr=s1;
以下语句中不符合C++语法规则的语句是D
A.strcpy(s2,ptr);
B.ptr=s2;
C.ptr=ptr+4;
D.*ptr=*s2;
11、设s和t分别为指向两个长度相同的字符数组的指针,则循环语句while(C);
可以正确实现字符串t到s的完整复制功能。
A.*s=*t&
&
*t!
=OB.s++=t++&
=0
..
C.*s++=*t++D.*(++s)=*(++t)
12、设有说明:
chars1[10],*s2=s1;
则以下正确的语句是C
A.s1[]=”computer”B.s1[10]=”computer”
C.s2=”computer”D.*s2=”computer”
13、设有说明:
inta[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);
以下可得数值为9的表达式是B
A.p+=3,*p++B.p+=4,*(p++)
C.p+=4,*++pD.p+=4,++*p
14、设有说明:
inta[4][4]={1,2,3,4,5,6,7,8,9,10},*p=a[1],(*q)[4]=a;
则以下不能访问数值为7的数组元素的表达式是A
A.*(a+1)+2B.p[2]C.*(a[1]+2)D.q[1][2]
二、填空题
1、在如下定义中floata[]={100,200,300};
float*p[]={&
a[0],&
a[1],
a[2]};
语句cout<
*p[2]的输出是300
2、若有说明语句char*name=
ewspaper;
则cout<
name+2的输出是
wspaper,cout<
*(name+3)的输出是s。
3、inta[5]={100,200,300,400,500},*p1=&
a[0];
则表达式(*p1)++的值是100。
4、有如下定义中char*str[]={“Followme”,“BASIC”,“GreatWall”,
“Department”}中输出”BASIC”字符串的语句是:
cout<
str[1]
5、执行以下语句:
inta[5]={25,14,27,18},*p=a;
(*p)++;
则*p的值为26,再执行语句:
*p++;
则*p的值为14
6、设有说明语句档牡猠嵛尽㈱尳瑜?
尶ぜ?
,*p=s;
执行以下两个语句:
*(p+5)<
(p+5)<
则输出为5和56。
7、设有如下函数定义。
如果在主函数中有语句cout<
f(“goodbye!
”);
则输出9
intf(char*s){char*p=s;
while(*p++);
return(p—s);
}
8、执行以下程序后,y的值是10
intmain(){
inta[4]={2,4,6};
inty=0,*p=a;
for(;
)if(*p)y+=*p;
cout<
y<
endl;
9、
三、程序阅读题
1、写出如下程序的运行结果。
chars[]=abcdefgh,*p=s;
p+=3;
strlen(strcpy(p,ABCD))<
//4
s<
//abcABCD
2、写出如下程序的运行结果。
char*p=abcdefgh,*r;
long*q=(long*)p;
q++;
r=(char*)q;
r<
//efgh
3、写出如下程序的运行结果。
voidsub(intx,inty,int*z)
{
*z=y-x;
intmain()
inta,b,c;
sub(10,5,&
a);
sub(7,a,&
b);
sub(a,b,&
c);
a<
\t'
b<
c<
//-5-12-7
return0;
4、写出如下程序的运行结果。
voidss(char*s,chart)
while(*s)
{
if(*s==t)
*s=t-'
a'
+'
A'
s++;
}
charstr1[100]=abcddfefdbd,c='
d'
ss(str1,c);
str1<
//abcDDfefDbD
5、voidswap(int*p1,int*p2)
{int*p;
p=p1;
p1=p2;
p2=p;
*p1<
*p2<
intmain(void)
{inta=5,b=9;
swap(&
a,&
程序第一行输出95,第二行输出59
6、voidexchange(int*x,int*y)
{inttemp;
temp=*x;
*x=*y;
*y=temp;
voidmain(void)
intdata[8]={15,12,20,0,8,-5,17,1};
for(inti=0;
i<
=7;
i++){
for(intj=i;
j<
j++){
if(data[i]>
data[j])
exchange(&
data[i],&
data[j]);
data[i]<
函数exchange的作用是:
交换指针变量指向的数,&
data[i]表示的是:
data[i]的地址,程序的输出结果是:
-501812151720
7、写出如下程序的输出结果
voidinvert(char*a,intx,inty)
chart,*p,*q;
p=a+x;
q=a+y;
while(p<
q)
t=*p;
*p=*q;
*q=t;
p++;
q--;
chardt[13]=GoodBookNice;
inti=0,n=1;
while(i<
8)
{invert(dt,i,i+5);
潣瑵?
第?
渼?
次计算:
for(intj=i;
=i+5;
j++)
dt[j]<
i+=6;
共执行了?
椼?
次计算。
第1次计算:
o,B,d,o,o,G,
第2次计算:
e,c,i,N,k,o,
共执行了12次计算
8、写出如下程序的运行结果。
charch[2][5]={934,8254};
char*p[2];
inti,j,s=0;
for(i=0;
2;
i++)
p[i]=ch[i];
for(j=0;
p[i][j]>
0'
p[i][j]<
='
j+=2)
s+=10*(p[i][j]-'
);
s;
//220
9、写出如下程序的运行结果。
intsum(intp[],int*w,intn)
inti;
ints=0,m=0;
n;
{s+=p[i];
if(p[i]>
m)
m=p[i];
*w=i;
returns;
intaa[3][3]={2,4,8,7,5,3,2,6,9};
introw[3],col[3]={0,0,0};
3;