C语言指针练习(包括答案和详解)

上传人:小** 文档编号:175315181 上传时间:2022-12-19 格式:DOC 页数:27 大小:183KB
收藏 版权申诉 举报 下载
C语言指针练习(包括答案和详解)_第1页
第1页 / 共27页
C语言指针练习(包括答案和详解)_第2页
第2页 / 共27页
C语言指针练习(包括答案和详解)_第3页
第3页 / 共27页
资源描述:

《C语言指针练习(包括答案和详解)》由会员分享,可在线阅读,更多相关《C语言指针练习(包括答案和详解)(27页珍藏版)》请在装配图网上搜索。

1、第七章指针7.1选择题1. 若有说明:inta二2,知二&a,*q=p;,则以下非法的赋值语句是(D)。A. p二q;B*p二*q;C-a二*q;D.q=a;a是整型数,int*p,*q定义了指针,p,q是指向整型的指针。p取得a的地址,而q取得p的地址P,q是指针(也就是一个地址),而*戸和*q是这个指针指向的整型数值(存放在这个地址的值)。A)把q的地址赋给p,则P和q完全一样了,都指向一个数2B)把q中数据个PC)把q中数据给aD)a中数据是2,不能够给一个地址。除非*q=a2. 若定义:inta=511,*b=&a;,则printf(dn,*b);的输出结果为:DA. 无确定值B.a的

2、地址C.512D.511inta二511,*b二&a;a是整形变量b是整形指针变量,指向aprintf(%dn,*b);就是输出指针变量b,所指变量的值输出结果5113. 己有定义inta二2,*pl二&a,*p2=&a;下面不能正确执行的赋值语句是(B)。A. a=*pl+*p2;B.pl二a;C.pl二p2;D.a二*pl*(*p2);47、己知在程序中定义了如下的语句:int*P1,*P2;intk;pl=&k;p2=&k;则下列语句中不能正确执行是(B)A、2*P1+*P2;B、p2=k;C、Pl二P2;D、K二*Pl*(*P2);PlP2是指针,K是整型变量,变量怎么可以赋值给指针呢

3、?A其实是执行了K二K+K(P1和P2都指向K,所以*P1*P2其实都是指K)C是赋值语句D其实执行了K二K*K4. 变量的指针,其含义是指该变量的(B)。A. 值B.地址C.名D.一个标志5. 若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)oA. scanf(,z%d%d%d,z,&a,&b,d);B. scanfa,b,d);C-scanf(,z%d%d%dz,,&a,&b,&d);D.scanf(“d%d%d,a,b,*d);对于intc,*d=&c;,c是一整型数据,d是一指针,它指向变量c(即d=&c,*是指针类型的说明符

4、),所以,输入c的值可以用scanfr%d&c);也可以用scanfd);6. 若己定义inta二5;下面对(1)、(2)两个语句的正确解释是(D)。(1)int*p=&a;(2)*p=a;A. 语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。B. (1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量pC. (1)在对p进行说明的同时进行初始化,使p指向a;(2)变量a的值赋给指针变量p。D. (1)在对p进行说明的同时进行初始化,使p指向a;(2)将变量a的值赋予*戸。A:(1):*p,定义p为int类型指针(2):*p,表示p所指向的变量B(1)把变量a的地址赋给指针

5、变量p(2)把变量a的值,赋值给P所指向的变量C前半句正确,后半句错误,(2)是把变量a的值赋值给P所指的变量。7-若有语句int*p,a二10;p二&a;下面均代表地址的一组选项是(D)。A.a,p,*&aB.&*a,&a,*pC. *&p,*p,&aD.&a,&*p,pint*p是定义一个指针,p=&a,p指向a的地址,*p=a,*指针名是指取该指针所指地址中的内容,&a为a的地址,&*p=&a,p中放的为a的地址8. 若需要建立如图所示的存储结构,且己有说明double*p,x二0.2345;则正确的赋值语句是0.2345PxBA.p二x;C.*p=x;D.*p=&x;9. 若有说明:i

6、nt*p,a=l,b;以下正确的程序段是(B)oA.p二&b;B.scanf(%d,&b);scanf(,%d,&p);*p=b;C.p二&b;D.p二&b;scanf(,%d,*p);*P=a;A, B中p是b的地址那么如果要输入b应该是scanfp);C中P还没定义给知赋值就是给一个没有开辟的地址赋值了D是正确的意思是p为b的地址,将p地址上的数变成a,等价于b=a10. 有如下语句:intm二6,n=9,*p,*q;p=&m;q二&n;如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是(C)opqB.p=*q;A.*p=*q;C-p二q;D*p=q;11以下程序中调用scanf函

7、数给变量a输入数值的方法是错误的,其错误原因是(B)ottincludemain()int*p,*q,a,b;p二&a;printf(inputa:);scanf*p);A. *p表示的是指针变量p的地址B. *p表示的是变量a的值,而不是变量a的地址C. 知表示的是指针变量p的值D. 知只能用來说明p是一个指针变量scanf后面的参数是地址,是接收的值放到这个地址12.下面程序的功能是从输入的十个字符串中找出最长的那个串。请在处填空。ttincludestdio.httincludestring,h#defineN10main()charsN81,*t;intj;for(j=0;jN;j+)

8、gets(sjl);t=*s;for(j=l;jN;j+)if(strlen(t)strlen(sj)A;printf(themaxlengthoftenstringsis:%d,%sn,strlen(t),t);D.t二sj013.下面判断正确的是(C)oA.char*s=girl;等价于char*s;*s=,girl,z;B.chars10=girl;等价于chars10;s10=girl;C.char*s=girl;等价于char*s;s二girl;D.chars4=boy,t4=boy;等价于chars4=t4=boyB.t二&sjCt二s+14.设char*s=ta017bc;则指针

9、变量s指向的字符串所占的字节数是(C)。A.t二sjA.9B.5C.6D.7首先,字节数不是指字符串长度,字符串长度比存储字节数少一。t是一个转义字符相当于键盘“Tab”键a普通字符017转义字符ASCII代码值为8进制数17即10进制数15的那个符号b普通字符c普通字符字符串结束标志0s是字符串类型。每一个都是char型变量;char型变量的二进制长度是8,也就是一个字节,所以指针变量s指向的字符串所占字节数是6,字符串长度是5.15. 下面程序段中,for循环的执行次数是(C)ochar*s=ta018bc;for(;*s!=0;s+)printf(*);ta018bc0各一次A.9B.5

10、C.6D.716. 以下不能正确进行字符串赋初值的语句是(A)oA. charstr5=good!;B. char*str二good!;C. charstr二good!;D. charstr5二g,,o,,o,,d,;1A.charstr5=good!;这个不符合C语言的语法规定,字符串初始化是这样写的:charstr6二good!;/因最后还有一个结束符,因此数组元素应该是6个。2题目表述有些不准确C,D叫初始化,B叫赋值。3题目中的单双引号全部是中文的,这也不符合C语言语法。应该改为英文的。17. 若指针p己正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是(A)oA. p二2

11、*(int*)malloc(sizeof(int):B. p=(int*)malloc(2*sizeof(int):C. p=(int*)malloc(2*2):D. p=(int*)calloc(2,sizeof(int):malloc的全称是memoryallocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。18. 下面程序段的运行结果是(C)ochar*s=abcde;s+二2;printfs);A.cdeB.字符cC.字符c的地址D.无确定的输出结果19. 设有如下的程序段:chars二girl,*t;t二s;则下列叙述

12、正确的是(D)。A. s和t完全相同B. 数组s中的内容和指针变量t中的内容相等C. s数组长度和t所指向的字符串长度相等D. 毗与$0相等20. 以下正确的程序段是(B)oB.char*s;A.chars20;scanf(,%s,/,&s);C.chars20;scanf&s2);21.下面程序段的运行结果是(C)ottincludestdio.hscanfs);D.chars20,*t=s;scanft2);main()intm=10,n=20;char*format二s,m=%d,n二%dn;m*二n;printf(format,二m,n);A.format,二n,m,nC.m*二n,m

13、200,n=20Bformat,m*二nD.以上结果都不对22.以下与库函数strcpy(char*p,char*q)功能不相等的程序段是(D)。A. strcpyl(char*p,char*q)while(*p+=*q+)!=0);B. strcpy2(char*p,char*q)while(*p=*q)!二0)p+;q+;C. strcpy3(char*p,char*q)while(*p+=*q+);Dstrcpy4(char*p,char*q)while(*p)*p+二*q+;23. 下面程序段的运行结果是(C)ottincludestdio.hmain()chars=,/example

14、!,*t;t二s;while(!二p)printf(%c,*t32);t+;A.EXAMPLE!B.example!C.EXAMD. example!24. 以下正确的程序段是(C)oA. chars二12345,t二6543d21;strcpy(s,t);B. chars20,*t=12345;strcat(s,t);C. chars20=、*t二12345;strcat(s,t);D. char*s=12345,*t二54321;strcat(s,t);25. 以下与库函数strcmp(char*s,chat*t)的功能不相等的程序段是(D)。A. strcmpl(char*s,chat*

15、t)for(:*s+=*t+;)if(*s二二0)return0;return(*s-*t);B. strcmp2(char*s,char*t)for(;*s+二二*t+;)if(!*s)return0;return(*s-*t);C. strcmp3(char*s,char*t)for(;*t=*s;)if(!*t)return0;t+;s+;return(*s*t);D. strcmp4(char*s,char*t)for(;*s=*t;s+,t+)if(!*s)return0;return(*t-*s);26. 若有以下定义和语句:ints45,(*ps)5;ps二s;则对s数组元素的正

16、确引用形式是(C)oA.ps+1B.*(ps+3)C.ps02D.*(ps+l)+327. 不合法的main函数命令行参数表示形式是:(B)。A.main(inta,char*c)B.main(intargc,char*argv)C.main(intarc,char*arv)D.main(intargv,char*argc)28. 若有说明语句:chars=,itisaexample.”,*t=itisaexample.,z:则以下不正确的叙述(B)oA. s表示的是第一个字符i的地址,s+1表示的是第二个字符t的地址B. t指向另外的字符串时,字符串的长度不受限制C. t变量中存放的地址值可

17、以改变D. s中只能存放16个字符29. 若己定义chars10;则在下面表达式中不表示sl地址的是(B)。A.s+1B.s+C.&sO+lD.&sl30. 下面程序段的运行结果是(A)。(注:-代表空格)#includestdio.hmain()chars6;s二abcd;printfs);A.律bcdBabcdujC.abcdD编译出错31执行以下程序后,a的值为【1】,b的值为【2】。#includemain()inta,b,k=4,m=6,*p=&k,*q=&m;a二p二二&m;b=(*p)/(*q)+7;printf(a二%dn,a);printf(b二dn,b);1A.-1B.1C

18、.02A.5B.6C.7D4D.1032. 下面程序的功能是将字符串s的所有字符传送到字符串t中,要求每传递三个字符后再存放一个空格,例如字符串s为abcdefg,则字符串t为abcdef请选择填空。CA#includestdio.h#includestringhmain()intj,k=0;chars60,t100,*p;P二s;gets(p);while(*p)for(j=l:j二s*t=s0【2】At+CtD.w一一35. 以下程序的功能是删除字符串s中的所有空格(包括TAB符、回车符),请用以判断字符是否为C.tm=0C*(t+m)填空。ACttincludestdio.httincl

19、udestring,httincludectypehmain()chars80;gets(s);delspace(s);puts(s);delspace(char*t)intm,n;charc80;for(m=0,n二0;【1】;m+)if(!isspace(2)/*C语言提供的库函数,空格*/cn二tm;n+;cn=0,;strcpy(t,c);1A.tmB.!tmD.tm=02At+mB*cmD.*(c+m)36.下面程序的功能是统计字串sub在母串s中出现的次数。请选择填空。BCttincludestdio.h#includestringhmain()chars80,sub80;intn

20、;gets(s);gets(sub);printfcount(s,sub);intcount(char*p,char*q)intm,n,k,num二0;for(【1】,k=0;qk=pn:k+,n+)if(q【2】=0)num+;break;return(num);1A.n二m+1B.n=mC.n=02A.kB.k+C.k+137.下列程序的输出结果是(C)ottincludestdio.hmain()iintaL=1,2,3,4,5,6,7,8,9,0,*P;for(m二0;pm;m+)P二a;Dn二1D.+kprintf*p+9);B.1A0D.938. 以下程序的输出结果是(C)otti

21、ncludestdio.hcharcchar(charch)if(ch二A&ch=bl)strcpy(b2,pb):D.7D.5printf(,z%dn,z,strlen(b2);A.8B.3C.140. 有以下程序ttincludestring,hincludestdio.hmain()char*p=abcde0fghjik0;printf(”%dn,strlen(p);程序运行后的输出结果是(D)oA.12B.15C.641. 有以下程序voidss(char*s,chart)while(*s)if(*s=t)*s=t-Ja+A;s+;main()charstr100=,abcddfefd

22、bd,z,c二d;ss(str,c);printf(”%sn,strl);程序运行后的输出结果是(B)oA.ABCDDEFEDBDB.abcDDfefDbDC.abcAAfefAbAD.Abcddfefdbd42. 以下程序调用findmax函数返回数组中的最大值。在下面划线处应填入的是(B)oincludestdio.hfindmax(int*a,intn)int*p,*s;for(p二a,s=a;pasB.*p*sC.apasD.p-aps43. 有以下程序Aincludestdio.httincludemalloc.hmain()char*q,*p;p二(char*)malloc(siz

23、eof(char)*20);/*为指针p分配一个地址*/q二P;scanfp,q);printf(%s%sn,p,q);若从键盘输入:abcdef/,则输出结果是:A-defdefBabcdefC.abcdD-dd44. 下面程序的运行结果是(D)ottincludestdio.httincludestring,hfun(char*s)chart10;S=t;strcpy(t,example);main()char*s;fun(s);puts(s);D-不确定A.examplel_jljB.examplei-jC.example的值45. 下列程序段的输出结果是(A)。ttincludestd

24、io.hvoidfun(int*x,int*y)printf(%d%d,*x,*y);*x=3;*y=4;main()intx=l,y二2;fun(&y,&x);printf(%d%d,x,y);A.2143B.1212C.1234D.211246. 下列程序的输出结果是(C)oincludestdio.hmain()chara10=9,8,7,6,5,4,3,2,1,0,*p=a+5;printf*-p);A.非法B.a4的地址C.5D.347. 有以下程序includestdio.httincludestring,hmain(intargc,char*argv)intm,length二0;

25、for(m=l;margc;m+)length+=strlen(argvm);printf(”%dn,length);程序编译连接后生成的可执行文件是file,exe,若执行时输入带参数的命令行是:file123456789/则运行结果是(C)oA.22B.17C.13D948.有以下函数:char*fun(char*s)returns;该函数的返回值是(D)oA.无确定值B.形参s中存放的地址值C.一个临时存储单元的地址D.形参s自身的地址值49假定下列程序的可执行文件名为file.exe,则在该程序所在的子目录下输入命令行:filegirlboy/后,程序的输出结果是(B)。ttincludestdio.hmain(intargc,char*argv)intm;if(argc=0)return;for(m=l;ml)printf*argv,(argcl)?Jn:);B. main(inta,char*b)while(a-1)printf(sn,*+b);C. main(intargc,char*argv)while(+argc0)printf(,%s%c,*+argv,(argcl)?:n);Dmain(intargc,char*argv)while(argcl)printf*+argv);*t=*(t-1);【2】;*t=max;puts(t);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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