指针练习题与答案.docx
- 文档编号:27835467
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:13
- 大小:21.40KB
指针练习题与答案.docx
《指针练习题与答案.docx》由会员分享,可在线阅读,更多相关《指针练习题与答案.docx(13页珍藏版)》请在冰豆网上搜索。
指针练习题与答案
编程题
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的值:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 练习题 答案