指针练习题与答案(共11页).doc

上传人:飞****2 文档编号:7089825 上传时间:2022-02-18 格式:DOC 页数:12 大小:42KB
返回 下载 相关 举报
指针练习题与答案(共11页).doc_第1页
第1页 / 共12页
指针练习题与答案(共11页).doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《指针练习题与答案(共11页).doc》由会员分享,可在线阅读,更多相关《指针练习题与答案(共11页).doc(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上编程题1用指向数组的指针变量输出数组的全部元素#includevoid main( ) int a10, i; int *p; for (i=0; iai;for (p=a; pa+10; p+) cout*pt;#includevoid main( ) int a10, i; int *p=a; for (i=0; iai; for (i=0; i10; i+) cout*p+t;2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出#includevoid inv(int *x, int n);void main( ) int i, a10=3,7,9

2、,11,0,6,7,5,4,2; inv(a,10); for (i=0;i10; i+) coutait;void inv(int *x, int n) 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; void inv(int x , int n) int t, i, j, m=(n-1)/2; for (i=0;i=m; i+) j=n-1-i; t=xi; xi=xj; xj=t; 一 判断题 1指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址

3、值,这两个地址值是相等的。 2指针的类型是它所指向的变量或对象的类型。 3定义指针时不可以赋初值。 4指针可以赋值,给指针赋值时一定要类型相同,级别一致。 5指针可以加上或减去一个int型数,也可以加上一个指针。 6两个指针在任何情况下相减都是有意义的。 7数组元素可以用下标表示,也可以用指针表示。 8指向数组元素的指针只可指向数组的首元素。 9字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 10引用是一种变量,它也有值和地址值。 11引用是某个变量的别名,引用是被绑定在被引用的变量上。 12创建引用时要用一个同类型的变量进行初始化。 13指针是变量,它可以有引用,而引用不能有引

4、用。二 单选题1下列关于定义一个指向double型变量的指针,正确的是( B )。Aint a(5);double *pd=a;Bdouble d(2.5),*pd=&d;Cdouble d(2.5),*pd=d;Ddouble a(2.5),pd=d;2下列关于创建一个int型变量的引用,正确的是( A )。Aint a(3),&ra=a;Bint a(3),&ra=&a;Cdouble d(3.1);int &rd=d;Dint a(3),ra=a;3下列关于指针概念的描述中,错误的是( B )。A指针中存放的是某变量或对象的地址值B指针的类型是它所存放的数值的类型C指针是变量,它也具有一

5、个内存地址值D指针的值是可以改变的4下列关于引用概念的描述中,错误的是( A )。A引用是变量,它具有值和地址值B引用不可以作数组元素C引用是变量的别名D创建引用时必须进行初始化5已知:int a5,*p=a;则与+*p相同的是( D )。A*+p Ba0C*p+D+a06已知:int a =1,2,3,4,5,*p=a;在下列数组元素地址的表示中,正确的是( C )。A&(a+1)B&(p+1)C&p2D*p+7已知:int a(5),&ra=a;下列描述中,错误的是( D )。Ara是变量a的引用,即为变量的别名Bra的值为5Cra的地址值为&aD改变ra的值为10,变量a值仍为58若有以

6、下定义,则说法错误的是( D )。 int a=100,*p=&a ;A声明变量p,其中*表示p是一个指针变量B变量p经初始化,获得变量a的地址C变量p只可以指向一个整形变量D变量p的值为1009若有以下定义,则赋值正确的是(C )。int a ,b , *p;float c, *q;Ap=&c Bq=p Cp=NULL Dq=new int10如果x是整型变量,则合法的形式是( D )。A(x+5)B*xC&*xD*&x11若要建立如下关系,错误的语句组是( A )。10xp A B C D int *p=&x, x; int x, *p=&x; int *p, x=10; int *p,

7、x; *p=10; *p=10; p=&x; p=&x ; x=10;12若有语句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;则( B )不是对a数组元素的正确引用(其中0i10)。ApiB*(*(a+i)Cap-aD*(&ai)13以下程序的输出结果是( B )。#include void main() int a3=10,15,20; / a0=10,a1=15,a2=20int *p1=a,*p2=&a1; / p1取a0地址,p2取a1地址 *p1=*(p2-1)+5; / a0=15,a1=15,a2=20*(p1+1)=*p1-5; / a0=15,a1=10

8、,a2=20couta1endl;A5B10C15D2014以下程序的输出结果是( C )。#include void fun(int x,int y,int *cp,int *dp) cp=x+y; /*cp=30+50=80 dp=x-y; /*dp=30-50=-20void main()int a,b,c,d;a=30,b=50;fun(a,b,&c,&d);coutc,dendl;A50,30B30,50C80,20D80,2015要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( A )。Afuna(int *x,int *y)Bfunb(in

9、t x,int y) int *p=new int ; int t;p=*x; t=x;*x=*y; x=y;*y=*p; y=t; Cfunc(int *x,int *y)Dfund(int x,int y)*x=*y;*x=*x+*y; *y=*x; *y=*x-*y; *x=*x-*y; 16以下程序的输出结果是( C )。#include void main()char *s=;int v1=0,v2=0,v3=0,v4=0;for (int k=0;sk;k+)switch(sk)default:v4+;case 1:v1+;case 3:v3+;case 2:v2+;coutv1,

10、v2,v3,v4endl;A4,2,1,1 B4,9,3,1C5,8,6,1D8,8,8,8答案:C分析:C+语言中的switch语句中,如果没有break语句,一旦满足某一条件进入,就一直运行到switch的结束,如在本题s1=1,除v1加1之外,v2和v3都要加1。故运行结果是“5,,8,6,1”,选择C。如果程序做下面修改: switch(sk)default:v4+; break;case 1:v1+; break;case 3:v3+;break;case 2:v2+;break;运行结果是“4,2,1,1”,选择A。二、读下列程序结果1:写出下列程序运行结果:#includevoi

11、d main()int *pn, n=10,m=20; float *pf, px=3.14159,py=2.71828; pn=&n; *pn+=m; cout”n 现在的值是: ”*pnendl; pf=&px; py+=5*(*pf); cout”py现在的值是:”pyendl;运行结果是: n 现在的值是: 30pf 现在的值是:18.42623分析:指针是通过在变量前加一个“*”来定义,使用用“*”加变量名存取指针所指的值,用运算“&”取变量的地址,但是不能存取无指向的指针所指向内容,这样会导致系统故障。2:写出下列程序运行结果:#includevoid main()int I,*p

12、,a=10,20,30,40,50,60; p=a; for(I=0;I5;I+) cout”a“I”=”aIt”*(a+”I”)=”*(a+I)t”*(p+”I”)=”*(p+I)t”p“I”=”pIendl;运行结果:a0=10 *(a+0)=10 *(p+0)=10 p0=10 a1=20 *(a+1)=20 *(p+1)=20 p1=20 a2=30 *(a+2)=30 *(p+2)=30 p2=30 a3=40 *(a+3)=40 *(p+3)=40 p3=40 a4=50 *(a+4)=50 *(p+4)=50 p4=50 a5=60 *(a+5)=60 *(p+5)=60 p5=

13、60 3:void grt(int *x , int *y , int *z) cout +*x, +*y,*(z+)endl;int a=10, b=40, c=20;void main( ) prt (&a, &b, &c); prt (&a, &b, &c); 答案:11,41,20,12,42,204 static int a =1, 3,5, 7, 11, 13;main( ) int *p;p=a+3; cout*pt(*p+)endl; cout*(p-2)t*(a+4)endl;答案 11,7 5,11三;填空题1下列函数change的功能是,将字符串中的小写字母转成大写字母,

14、请填空。#include#includevoid change( ) /1int i=0; for(i=0; ;i+) /2 if(ai=a&ai=z) ; /3void main()char p80; cout n; cin.getline(p,80) ; /读一行字符,中间可以有空格 change(p); coutpendl;如程序运行时得到以下结果:请输入一行字符:This is a book.THIS IS A BOOK.答案:(1)char *a 或 char a80(2) ai 或 ai!=0(3) ai= ai 32 分析: (1) 由指针和字符串关系知:当实参是数组,形参可以是

15、字符串变量,也可以是字符指针变量。(2) 循环语句结束条件是字符标记0。(3) 大写字母的ASCII码比小室字母的ASCII码小32。 例题12:下列函数swap实现数据交换功能功能,请填空。#includevoid swap(int *p,int *q)int temp; temp=*p; ; /1 ; /2void main()int a,b;int *p1,*p2;coutab;p1=&a;p2=&b;swap(p1,p2);cout结果a和b的值:a,bendl;如程序运行时得到以下结果:请输入两个正数:10 20结果a和b的值:20,10答案:(1) *p=*q(2) *q=temp

16、;分析:实参和形参都是指针变量,所以指针变量p1和p指向同一个地址,同样p2和q也指向同一个地址。函数swap()是交换两个数,故应填写语句*p=*q、*q=temp。3:下列函数sort实现对字符串按字典顺序由小到大排序,请填空。#include#includevoid sort( ) /1char ; /2 int i,j; for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(strcmp( ) /3 temp=pj; ; /4 pj+1=temp; void main() char *a5=student,worker,cadre,soldier,apen; sort(a,5); for(int i=0;i5;i+) coutai0(4)pj=pj+1分析:(1)由实参得知函数sort()有两个形参,根据上题得char *p,int n。(2)有下面语句temp=pj可以得到temp是字符中指针。(3)根据冒泡排序方法和字符串比较函数得到pj,pj+1)0。(4)字符串指针可以通过赋值语句传递值,字符串变量不能够使用赋值语句传递值。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 教育教学

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com