指针练习题与答案.docx

上传人:b****7 文档编号:15543926 上传时间:2023-07-05 格式:DOCX 页数:13 大小:21.40KB
下载 相关 举报
指针练习题与答案.docx_第1页
第1页 / 共13页
指针练习题与答案.docx_第2页
第2页 / 共13页
指针练习题与答案.docx_第3页
第3页 / 共13页
指针练习题与答案.docx_第4页
第4页 / 共13页
指针练习题与答案.docx_第5页
第5页 / 共13页
指针练习题与答案.docx_第6页
第6页 / 共13页
指针练习题与答案.docx_第7页
第7页 / 共13页
指针练习题与答案.docx_第8页
第8页 / 共13页
指针练习题与答案.docx_第9页
第9页 / 共13页
指针练习题与答案.docx_第10页
第10页 / 共13页
指针练习题与答案.docx_第11页
第11页 / 共13页
指针练习题与答案.docx_第12页
第12页 / 共13页
指针练习题与答案.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

指针练习题与答案.docx

《指针练习题与答案.docx》由会员分享,可在线阅读,更多相关《指针练习题与答案.docx(13页珍藏版)》请在冰点文库上搜索。

指针练习题与答案.docx

指针练习题与答案

编程题

1用指向数组的指针变量输出数组的全部元素

#include

voidmain()

{inta[10],i;

int*p;

for(i=0;i<10;i++)

cin>>a[i];

for(p=a;p

cout<<*p<<‘\t’;

}

#include

voidmain()

{inta[10],i;

int*p=a;

for(i=0;i<10;i++)

cin>>a[i];

for(i=0;i<10;i++)

cout<<*p++<<‘\t’;

}

2使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出

#include

voidinv(int*x,intn);

voidmain()

{inti,a[10]={3,7,9,11,0,6,7,5,4,2};

inv(a,10);

for(i=0;i<10;i++)

cout<

}

voidinv(int*x,intn)

{int*p,t,*i,*j,m=(n-1)/2;

i=x;j=x+n-1;p=x+m;

for(;i<=p;i++,j--)

{t=*i;*i=*j;*j=t;

}

}

voidinv(intx[],intn)

{intt,i,j,m=(n-1)/2;

for(i=0;i<=m;i++)

{j=n-1-i;

t=x[i];x[i]=x[j];x[j]=t;

}

}

一判断题

×1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。

√2.指针的类型是它所指向的变量或对象的类型。

×3.定义指针时不可以赋初值。

√4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。

×5.指针可以加上或减去一个int型数,也可以加上一个指针。

√6.两个指针在任何情况下相减都是有意义的。

√7.数组元素可以用下标表示,也可以用指针表示。

×8.指向数组元素的指针只可指向数组的首元素。

√9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。

×10.引用是一种变量,它也有值和地址值。

√11.引用是某个变量的别名,引用是被绑定在被引用的变量上。

√12.创建引用时要用一个同类型的变量进行初始化。

√13.指针是变量,它可以有引用,而引用不能有引用。

二单选题

1.下列关于定义一个指向double型变量的指针,正确的是(B)。

A.inta(5);double*pd=a;B.doubled(2.5),*pd=&d;

C.doubled(2.5),*pd=d;D.doublea(2.5),pd=d;

2.下列关于创建一个int型变量的引用,正确的是(A)。

A.inta(3),&ra=a;B.inta(3),&ra=&a;

C.doubled(3.1);int&rd=d;D.inta(3),ra=a;

3.下列关于指针概念的描述中,错误的是(B)。

A.指针中存放的是某变量或对象的地址值

B.指针的类型是它所存放的数值的类型

C.指针是变量,它也具有一个内存地址值

D.指针的值是可以改变的

4.下列关于引用概念的描述中,错误的是(A)。

A.引用是变量,它具有值和地址值

B.引用不可以作数组元素

C.引用是变量的别名

D.创建引用时必须进行初始化

5.已知:

inta[5],*p=a;则与++*p相同的是(D)。

A.*++pB.a[0]

C.*p++D.++a[0]

6.已知:

inta[]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是(C)。

A.&(a+1)B.&(p+1)

C.&p[2]D.*p++

7.已知:

inta(5),&ra=a;下列描述中,错误的是(D)。

A.ra是变量a的引用,即为变量的别名

B.ra的值为5

C.ra的地址值为&a

D.改变ra的值为10,变量a值仍为5

8若有以下定义,则说法错误的是(D)。

inta=100,*p=&a;

A.声明变量p,其中*表示p是一个指针变量

B.变量p经初始化,获得变量a的地址

C.变量p只可以指向一个整形变量

D.变量p的值为100

9若有以下定义,则赋值正确的是(C)。

inta,b,*p;

floatc,*q;

A.p=&cB.q=pC.p=NULLD.q=newint

10如果x是整型变量,则合法的形式是(D)。

A.&(x+5)B.*x   C.&*x   D.*&x

11若要建立如下关系,错误的语句组是(A)。

 

A.B.C.D.

int*p=&x,x;intx,*p=&x;int*p,x=10;int*p,x;

*p=10;*p=10;p=&x;p=&x;x=10;

12若有语句inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则(B)不是对a数组元素的正确引用(其中0≤i<10)。

A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])

13以下程序的输出结果是(B)。

#include

voidmain()

{inta[3]={10,15,20};//a[0]=10,a[1]=15,a[2]=20

int*p1=a,*p2=&a[1];//p1取a[0]地址,p2取a[1]地址

*p1=*(p2-1)+5;//a[0]=15,a[1]=15,a[2]=20

*(p1+1)=*p1-5;//a[0]=15,a[1]=10,a[2]=20

cout<

}

A.5B.10C.15D.20

14以下程序的输出结果是(C)。

#include

voidfun(intx,inty,int*cp,int*dp)

{cp=x+y;//*cp=30+50=80

dp=x-y;//*dp=30-50=-20

}

voidmain()

{inta,b,c,d;

a=30,b=50;

fun(a,b,&c,&d);

cout<

}

A.50,30B.30,50C.80,-20D.80,20

15要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。

能正确执行此功能的函数是(A)。

A.funa(int*x,int*y)B.funb(intx,inty)

{int*p=newint;{intt;

p=*x;t=x;

*x=*y;x=y;

*y=*p;}y=t;}

 

C.func(int*x,int*y)D.fund(intx,inty)

{*x=*y;{*x=*x+*y;

*y=*x;*y=*x-*y;

}*x=*x-*y;}

16以下程序的输出结果是(C)。

#include

voidmain()

{char*s="12134211";

intv1=0,v2=0,v3=0,v4=0;

for(intk=0;s[k];k++)

switch(s[k])

{default:

v4++;

case'1':

v1++;

case'3':

v3++;

case'2':

v2++;

}

cout<

}

A.4,2,1,1B.4,9,3,1C.5,8,6,1D.8,8,8,8

答案:

C

分析:

C++语言中的switch语句中,如果没有break语句,一旦满足某一条件进入,就一直运行到switch的结束,如在本题s[1]=’1’,除v1加1之外,v2和v3都要加1。

故运行结果是“5,,8,6,1”,选择C。

如果程序做下面修改:

switch(s[k])

{default:

v4++;break;

case'1':

v1++;break;

case'3':

v3++;break;

case'2':

v2++;break;

}

运行结果是“4,2,1,1”,选择A。

 

二、读下列程序结果

1:

写出下列程序运行结果:

#include

voidmain()

{int*pn,n=10,m=20;

float*pf,px=3.14159,py=2.71828;

pn=&n;

*pn+=m;

cout<<”n现在的值是:

”<<*pn<

pf=&px;

py+=5*(*pf);

cout<<”py现在的值是:

”<

}

运行结果是:

n现在的值是:

30

pf现在的值是:

18.42623

分析:

指针是通过在变量前加一个“*”来定义,使用用“*”加变量名存取指针所指的值,用运算“&”取变量的地址,但是不能存取无指向的指针所指向内容,这样会导致系统故障。

 

2:

写出下列程序运行结果:

#include

voidmain()

{intI,*p,a[]={10,20,30,40,50,60};

p=a;

for(I=0;I<5;I++)

cout<<”a[“<

<<’\t’<<”*(p+”<

}

运行结果:

a[0]=10*(a+0)=10*(p+0)=10p[0]=10

a[1]=20*(a+1)=20*(p+1)=20p[1]=20

a[2]=30*(a+2)=30*(p+2)=30p[2]=30

a[3]=40*(a+3)=40*(p+3)=40p[3]=40

a[4]=50*(a+4)=50*(p+4)=50p[4]=50

a[5]=60*(a+5)=60*(p+5)=60p[5]=60

3:

voidgrt(int*x,int*y,int*z)

{cout<<++*x<<‘,’<<++*y<<‘,’<<*(z++)<

inta=10,b=40,c=20;

voidmain()

{prt(&a,&b,&c);

prt(&a,&b,&c);

}

答案:

11,41,20,

12,42,20

4staticinta[]={1,3,5,7,11,13};

main()

{int*p;

p=a+3;

cout<<*p<<'\t'<<(*p++)<

cout<<*(p-2)<<'\t'<<*(a+4)<

}

答案11,7

5,11

三;填空题

1.下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。

#include

#include

voidchange()//1

{inti=0;

for(i=0;;i++)//2

if(a[i]>='a'&&a[i]<='z')

;//3

}

voidmain()

{charp[80];

cout<<"\n";

cin.getline(p,80);//读一行字符,中间可以有空格

change(p);

cout<

}

如程序运行时得到以下结果:

请输入一行字符:

Thisisabook..

THISISABOOK.

答案:

(1)char*a或chara[80]

(2)a[i]或a[i]!

=’\0’

(3)a[i]=a[i]–32

分析:

(1)   由指针和字符串关系知:

当实参是数组,形参可以是字符串变量,也可以是字符指针变量。

(2)循环语句结束条件是字符标记’\0’。

(3)大写字母的ASCII码比小室字母的ASCII码小32。

例题12:

下列函数swap实现数据交换功能功能,请填空。

#include

voids*p,int*q)

{inttemp;

temp=*p;

;//1

;//2

}

voidmain()

{inta,b;

int*p1,*p2;

cout<<"请输入两个正数:

";

cin>>a>>b;

p1=&a;

p2=&b;

s);

cout<<"结果a和b的值:

"<

}

如程序运行时得到以下结果:

请输入两个正数:

1020

结果a和b的值:

20,10

答案:

(1)   *p=*q

(2)   *q=temp;

分析:

实参和形参都是指针变量,所以指针变量p1和p指向同一个地址,同样p2和q也指向同一个地址。

函数swap()是交换两个数,故应填写语句*p=*q、*q=temp。

 

3:

下列函数sort实现对字符串按字典顺序由小到大排序,请填空。

#include

#include

voidsort()//1

{char;//2

inti,j;

for(i=0;i

for(j=0;j

if(strcmp()//3

{temp=p[j];

;//4

p[j+1]=temp;

}

}

voidmain(){

char*a[5]={"student","worker","cadre","soldier","apen"};

sort(a,5);

for(inti=0;i<5;i++)

cout<

}

程序运行结果如下:

apen

cadre

soldier

student

worker

答案:

(1)char*p[],intn

(2)*temp

(3)p[j],p[j+1])>0

(4)p[j]=p[j+1]

分析:

(1)由实参得知函数sort()有两个形参,根据上题得char*p[],intn。

(2)有下面语句temp=p[j]可以得到temp是字符中指针。

(3)根据冒泡排序方法和字符串比较函数得到p[j],p[j+1])>0。

(4)字符串指针可以通过赋值语句传递值,字符串变量不能够使用赋值语句传递值。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2