ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:20.98KB ,
资源ID:11052578      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11052578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(六指针选择题答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

六指针选择题答案.docx

1、六指针选择题答案六、指针183. 下程序的运行结果是( A )。void ast (int x,int y,int *cp,int *dp) *cp=x+y; *dp=x-y;main() int a=4,b=3,c,d; ast(a,b,&c,&d); printf(%d,%dn,c,d);A. 7,1B. 1,7C. 7,-1D. c、d未赋值,编译出错执行 ast(a,b,&c,&d);调用ast 函数,把a传递给x,b传递给y,c的地址传递给cp,d的地址传递给dp.因为cp=&c(cp的值为c变量的地址),所以*cp等价于c,执行*cp=x+y ;后c=4+3=7同理,因为dp=&d

2、,所以*dp等价于d,执行*dp=x-y;后d=4-3=1执行 printf(%d,%dn,c,d);后输出7,1184. 有以下语句: int a5=0,1,2,3,4,5,i; int *p=a;设0i5,对a数组元素不正确的引用是( C )。A. *(&ai)B. ap-aC. *(*(a+i)D. pi1.指针运算符取地址运算符&:其功能是取变量的地址。2.取内容运算符*:用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。A . *(&ai) 等价于aiB. ap-a等价于a0C. 因为*(a+i) 等价于ai 所以 *(*(a+i)等价于 *(ai) ,又因为在*运算

3、符之后跟的变量必须是指针变量,我们断定*ai是错的,所以*(*(a+i))也是错。D.因为P=a,所以Pi等价于ai185. 若有定义int *p1,*p2; 则错误的表达式是( A )。A. p1+p2B. p1-p2C. p1p2D. p1=p2两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小,但不能相加。186. 以下叙述错误的是( D )。A. 存放地址的变量称为指针变量B. NULL可以赋值给任何类型的指针变量C. 一个指针变量只能指向类型相同的变量D. 两个相同类型的指针变量可以作加减运算D两个相同类型的指针变量相加没有意义,所以不可以作加运算,所以D错。187

4、. 以下程序段运行后,表达式*(p+4)的值为( B )。 char a=china; char *p; p=a;A. nB. aC. 存放n的地址D. 存放a的地址a是一维数组名,表示数组首地址,即等价于&a0因为p=a;即p=&a0,所以*p等价于a0因为p=a;所以p+i等价于a+i, 而a+i是ai的地址,*(a+i)等价于ai所以*(p+i)等价于ai*(p+4)=a4=a188. 以下程序段运行后,表达式*(p+)的值为( A )。 char a5=work; char *p=a;A. wB. 存放w的地址C. oD. 存放o的地址 printf( %3dn, (*p)+ ); /

5、*先输出*p,再进行(*p)+ */ printf( %3dn, *p+ ); /*先输出*p,再进行p+ */ printf( %3dn, *+p ); /*先进行+p,再输出*p */ printf( %3dn, +*p ); /*先进行+(*p),再输出*p */*(p+) 的值等于*p ,然后p+因为p等于a所以*p等于a0189. 若有定义:int *p,k=4; p=&k;以下均代表地址的是( C )。A. k, pB. &k, &pC. &k, pD. k, *pA k不是地址B k,p都是变量所以&k, &p都代表地址(&p是指针变量p的地址),所以B也是正确的C &k和p都是

6、代表变量k的地址,所以C正确D K,*p都等于4,都不是地址190. 若有定义:double *q,p;则能给输入项读入数据的正确程序段是( B )。A. q=&p;scanf(%lf,*q);B. q=&p;scanf(%lf,q);C. *q=&p;scanf(%lf,q);D. *q=&p;scanf(%lf,*q);根据课本P37,调用scanf函数的语法格式为:scanf(格式控制字符串,地址列表);所以A. *q不是地址,所以A错B.因为q=&p,即q等于p的地址,所以B正确C.D. *q=&p错误191. 若已定义: int q=5; 对 int *p=&q;和 p=&q; 这两

7、条语句理解错误的是( C )。A. 是对p定义时初始化,使p指向q;而是将q的地址赋给pB. 和中的&q含义相同,都表示给指针变量赋值C. 是对p定义时初始化,使p指向q;而是将q的值赋给p所指向的变量D. 和的执行结果都是把q的地址赋给p1 int *p=&q; 是对p定义时初始化,使p的值等于q的地址2 p=&q;是将q的地址赋值给p.C中理解错误。应该是将q的地址赋值给p.192. 下面语句错误的是( A )。A. int *p; *p=20; B. char *s=abcdef; printf(%sn,s);C. char *str=abcdef; str+;D. char *str;

8、str=abcdef;见课本P153,未经赋值的指针变量其值是随机的,可能指向系统或其他已使用的数据区,对它进行写入操作将可能出现不可预知的情况,严重时将造成系统混乱,甚至死机。A 没有对P赋值,就执行*p=20;对p所指向的单位进行写操作,可能会造成不可预知的错误,所以 A错。193. 若有定义int a23,*p=a;,则能表示数组元素a12地址的是( D )。A. *(a1+2)B. a12C. p5D. p+5A.a1是第1行的首地址(行号从0开始计算),也是第1行的首个元素(第0个元素)的地址,即&a10a1+2 是表示从a10开始往移动2个位置,即a12的地址,所以*(a1+2)等

9、价于*(&a12)等价于a12,所以不能选A。B.显然是错的D. 因为p=a,&aij 等价于p+i*3+j 其中3是数组a的列数所以&a12等价于p+1*3+2,即p+5。所以答案选D因为p=a,即p等于a00的地址(指向a00),所以p+5是从a00开始往后偏移5个位置元素的地址,即p+5是a5的地址a00 a01 a02 a10 a11 a12 a20 .p p+1 p+2 p+3 p+4 p+5 p+6 .194. 若已定义: int a=5,*p; 且 p=&a; 则以下表示中不正确的是( B )。A. &a=&(*p)B. *(&p)=aC. &(*p)=pD. *(&a)=a因为

10、p=&a;所以*p=a,所以B错195. 若有以下程序段,则叙述正确的是( C )。char s=computer;char *p;p=s;A. s和p完全相同B. 数组s的长度和p所指向的字符串长度相等C. *p与s0相等D. 数组s中的内容和指针变量p中的内容相等A.s是数组名,代表一个固定的地址(指针常量),s的值是不能改变的。P的是指针变量,可以对p的进行赋值(p的值可程序运行过程中可以修改),所以A错。B 数组长度和字符串长度是两个不同的概念。数组长度是所有元素个数,char s=computer;数组长度为9(a8=/0)字符串商都是指字符串中字符的个数(不包括字符串结束标志/0)

11、, p所指向的字符串是computer,有8个字符,所以字符串长度为8所以B错C.s等价于&s0 ,所以*p等价于s0,所以答案选CD. 数组s中的内容:s0=c,s1=o,.,s7=r,s8=0指针变量p中的内容是s,即数组s的首地址(&s0),所以D是错的。196. 以下程序段的运行结果是( B )。enum weekday aa,bb=2,cc,dd,ee week=ee;printf(%dn,week);A. eeB. 5C. 2D. 4课本P277week是枚举类型变量,它的取值为ee,因为bb=2,所以cc=3,dd=4,ee=5以%d格式输出ee,结果为5197. 若有以下程序段

12、,则不能正确访问数组元素a12的是( A )。int (*p)3;int a3=1,2,3,4,5,6,7,8,9;p = a;A. p1+2B. p12C. (*(p+1)2D. *(*(a+1)+2)P是指向一维数组(有3个元素)的指针变量,详细见课本P1643。因为p=a;所以p1+2等价于a1+2,而a1+2等价于&a12,所以p1+2等价于&a12所以A错198. 以下程序段的运行结果是( A )。 int a=1,2,3,4,5,6,7,*p=a; int n,sum=0; for(n=1;n6;n+) sum+=pn+; printf(%d,sum);A. 12B. 15C. 1

13、6D. 27因为p=a,所以 pn等价于an执行for(n=1;n6;n+) sum+=pn+;当n=1时 满足n6 所以执行循环体sum=sum+p1=0+2=2,然后n自增1两次,n的值变为3当n=3时满足n6 所以执行循环体sum=sum+p3=2+4=6,然后n自增1两次,n的值变为5当n=5时满足n6 所以执行循环体sum=sum+p5=6+6=12,然后n自增1两次,n的值变为7当n=7时不满足n6 所以结束循环。最后sum的值为12。所以答案选A199. 下面程序的运行结果是( A )。main( ) int a,b; int *p1=&a,*p2=&b,*t; a=10; b=

14、20; t=p1; p1=p2; p2=t; printf(%d,%dn,a,b); A. 10,20B. 20,10C. 10,10D. 20,20因为int *p1=&a,*p2=&b,*t;a=10; b=20;所以p1指向变量a, p2指向变量b,这时候a等于10,b等于20,*p1等于10,*p2等于20执行t=p1; p1=p2; p2=t;后P1指向变量b, p2指向变量a,这时候a等于10,b等于20,*p1等于20,*p2等于10所以答案选A200. 以下程序段运行后变量s的值为( C )。 int a=1,2,3,4,5,6,7; int i,s=1,*p; p=&a3;

15、for(i=0;i3;i+) s*=*(p+i);A. 6B. 60C. 120D. 210p=&a3;p指向a3当i=0时s=s*(*(p+0)=s*a3=1*4=4;当i=1时s=s*(*(p+1)=s*a4=4*5=20;当i=2时s=s*(*(p+2)=s*a5=20*6=120;所以最后s=120,答案选C201. 以下程序段运行后变量ans的值为( B )。 int a=1,2,3,b=3,2,1; int *p=a,*q=b; int k,ans=0; for(k=0;k3;k+) if(*(p+k)=*(q+k) ans=ans+*(p+k)*2;A. 2B. 4C. 6D.

16、12 int a=1,2,3,b=3,2,1; int *p=a,*q=b;p指向a0 q指向b0执行for(k=0;k3;k+) if(*(p+k)=*(q+k) ans=ans+*(p+k)*2;当k=0时*(p+k)=ak=a0=1*(q+k)=bk=a0=3所以*(p+k)=*(q+k)不成立,k+,满足k3,所以进入下一次循环当k=1时*(p+k)=ak=a1=3*(q+k)=bk=a1=1所以*(p+k)=*(q+k)成立,执行ans=ans+*(p+k)*2;ans=ans+*(p+k)*2=0+ak*2=0+a1*2=0+2*2=4然后k+,满足k3,所以进入下一次循环当k=2

17、时*(p+k)=ak=a2=1*(q+k)=bk=a2=3所以*(p+k)=*(q+k)不成立,k+,不满足k3,所以结束循环最后ans=4,答案选B202. 以下程序运行结果是( A )。main( ) char a=abc,*p; for(p=a;pa+3;p+) printf(%s,p); A. abcbccB. abcC. cbabaaD. cbaprintf(%s,p); 是输出p所指向的字符串a+i 等价于&aifor(p=a;pa+3;p+) printf(%s,p); 当p=a时p指向a0,所以printf(%s,p);输出以地址&a0开始的字符串,即输出”abc”当p=a+1

18、时 p指向a1,所以printf(%s,p);输出以地址&a1开始的字符串,即输出”bc”当p=a+2时 p指向a2,所以printf(%s,p);输出以地址&a2开始的字符串,即输出”c”所以最后输出结果为:abcbcc,答案选A203. 以下程序的输出结果是( B )。 #include void main() int i; char *s=ABCD; for(i=0;i3;i+) printf(%sn,s+i); A. CD BCD ABCDB. ABCD BCD CDC. AB ABC ABCDD. ABCD ABC ABs+i 第i个字符的地址执行 for(i=0;i3;i+) pr

19、intf(%sn,s+i);当i=0时printf(%sn,s+i); 输出”ABCD”,然后回车换行当i=1时printf(%sn,s+i); 输出”BCD”,然后回车换行当i=2时printf(%sn,s+i); 输出”CD”,然后回车换行所以答案选B204. 以下程序的输出结果是( B )。 #include void main() char *p=ABCDE,*q=p+3; printf(%cn,q-2); A. AB. BC. CD. Dqi等价于*(q+i)所以q-2等价于*(q-2)因为q=p+3,所以*(q-2)等于*(p+3-2)即*(p+1) 即B答案选B205. 下面程序

20、执行时,若输入5 4 3 2 1,则输出为:B #include #define N 5 void main() int aN; int *p=a; while(pa) printf(%d ,*(-p); A. 5 4 3 2 1B. 1 2 3 4 5C. 3 4 5 1 2D. 3 2 1 5 4int *p=a; p指向a0,while(pa+N) scanf(%d,p+);第一次循环:scanf(%d,p+);把5赋值给a0,然后p+,(p值变为a+1),p指向a1第二次循环:scanf(%d,p+);把4赋值给a1,然后p+,(p值变为a+2),p指向a2第三次循环:scanf(%d

21、,p+);把3赋值给a2,然后p+,(p值变为a+3),p指向a3第四次循环:scanf(%d,p+);把2赋值给a3,然后p+,(p值变为a+3),p指向a4第五次循环:scanf(%d,p+);把1赋值给a4,然后p+,(p值变为a+5),不满足pa) printf(%d ,*(-p);p的值为a+5,满足pa ,执行循环体第一次循环:printf(%d ,*(-p);p自减1(值变为a+4),然后输出*p(输出a4)p的值为a+4,满足pa ,执行循环体第二次循环:printf(%d ,*(-p);p自减1(值变为a+3),然后输出*p(输出a3)p的值为a+3,满足pa ,执行循环体第

22、三次循环:printf(%d ,*(-p);p自减1(值变为a+2),然后输出*p(输出a2)p的值为a+2,满足pa ,执行循环体第四次循环:printf(%d ,*(-p);p自减1(值变为a+1),然后输出*p(输出a1)p的值为a+1,满足pa ,执行循环体第五次循环:printf(%d ,*(-p);p自减1(值变为a),然后输出*p(输出a0)p的值为a,不满足pa ,结束循环。最后输出1 2 3 4 5所以答案选B206. 下面程序段的运行结果是( C )。 int a=1,2,3,4,5,6,*p=a; int i,sum=0; for(i=1;i6;i+) sum+=*(p+

23、); printf(%d,sum);A. 10B. 12C. 15D. 20*(p+); /*先输出*p,再进行p+*/ p=a;p指向a0for(i=1;i6;i+) sum+=*(p+);当i=1时sum=sum+*p=sum+a0=0+1=1;然后p+,p的值变为a+1,即p指向a1当i=2时sum=sum+*p=sum+a1=1+2=3;然后p+,p的值变为a+2,即p指向a2当i=3时sum=sum+*p=sum+a2=3+3=6;然后p+,p的值变为a+3,即p指向a3当i=4时sum=sum+*p=sum+a3=6+4=10;然后p+,p的值变为a+4,即p指向a4当i=5时su

24、m=sum+*p=sum+a4=10+5=15;然后p+,p的值变为a+5,即p指向a5最后printf(%d,sum);输出15,答案选C207. 下面程序运行结果是( D )。 main( ) int a=1,2,3,4,5,*p,*q,i; p=a; q=p+4; for(i=1;i5;i+) printf(%d%d,*(q-i),*(p+i); A. 24334251B. 51423324C. 15243342D. 42332415p=a; p指向a0q=p+4;q指向a4 for(i=1;i5;i+) printf(%d%d,*(q-i),*(p+i);当i=1时printf(%d%

25、d,*(q-i),*(p+i);输出a3和a1,即输出42当i=2时printf(%d%d,*(q-i),*(p+i);输出a2和a2,即输出33当i=3时printf(%d%d,*(q-i),*(p+i);输出a1和a3,即输出25当i=4时printf(%d%d,*(q-i),*(p+i);输出a0和a4,即输出15最后输出结果:42332515 ,所以答案选D208. 下面程序运行结果是( B )。 main( ) static char a=abcdefg,b=adcbehg; char *p=a,*q=b; int i; for(i=0;i=6;i+) if(*(p+i)=*(q+i

26、) printf(%c,*(q+i); A. gecaB. acegC. bdfD. Fdb这个程序的功能是比较数组a和数组b中相同位置上相等的元素是否相等,如果相等则输出该元素。char *p=a,*q=b;p指向a0,q指向b0*(p+i)等价于ai*(q+i)等价于bifor(i=0;i=6;i+) if(*(p+i)=*(q+i) printf(%c,*(q+i);当i=0时*(p+i)的值为a*(q+i)的值为a满足*(p+i)=*(q+i),所以执行printf(%c,*(q+i);输出a当i=1时*(p+i)的值为b*(q+i)的值为d不满足*(p+i)=*(q+i),所以不执行printf(%c,*(q+i);当i=2时*(p+i)的值为c*(q+i)的值为c满足*(p+i)=*(q+i),所以执行printf(%c,*(q+i);输出c当i=3时*(p+i)的值为d*(q+i)的值为b不满足*(p+i)=*(q+i),所以不执行printf(%c,*(q+i);当i=4时*(p+i)的值为e*(q+i)的值为e满足*(p+i)=*(q+i),所以执行printf(%c,*(q+i);输出e当i=5时*(p+i)的值为g*(q+i)的值为g满足*(p+i)=*(q+i),

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1