《C语言—指针习题-.pdf》由会员分享,可在线阅读,更多相关《C语言—指针习题-.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 8 章 指针二、习题(一)、是非题1.运算符“*”有时是单目运算符,有时又可能是双目运算符。A.对B.错2.取地址运算符“&”与指针运算符“*”的优先级相同,结合方向为自右向左。A.对B.错3.指针变量的类型不是该变量本身的类型,而是它所指向的变量的类型。A.对B.错4.指针变量不可以作为函数的参数。A.对B.错5.&b 指的是变量b 的地址所存放的值。A.对B.错6.语句 int*p;定义了一个指针变量p,其值是整型的。A.对B.错7.语句“int *p;”中*p 的含义为取值。/定义指针变量A.对B.错8.一个变量的地址就称为该变量的“指针”。A.对B.错9.语句 int i,*p=&
2、i;是正确的C定义。A.对B.错10.变量的指针,其含义是指该变量的一个标志。A.对B.错11.void 类型的指针不指向某种类型的数据,所以没有意义。A.对B.错12.表达式*p+的运算顺序为先自增后取值。A.对B.错13.C 语言中,执行表达式(*p)+后 p 的指向改变了。A.对B.错14.两个指针相加没有意义。A.对B.错15.若有定义:int*p1,*p2,m=3,n;,则 p1=&m;p2=p1;是正确的赋值语句。A.对B.错16.已知 int a4,*p;,则语句p=&a;是正确的。/p=a;A.对B.错17.char*name5 定义了一个一维指针数组,它有5 个元素,每个元素
3、都是指向字符数据的指针型数据。A.对B.错18.*(&aij)与 aij的含义相同。A.对B.错19.若有定义:int(*p)4;,则标示符p 是一个指针,它指向一个含有四个整型元素的一维数组。A.对B.错20.设有以下定义:char*c2=12,34;,表示 c 数组的两个元素中分别存放了字符串12 和34 的首地址。A.对B.错(二)、选择题1.变量的指针,其含义是指该变量的_。A.值B.地址C.名D.一个标志2.下面能正确进行字符串赋值操作的是_。A.char s5=ABCDE;B.char s5=A,B,C,D,E;C.char*s;s=ABCDE;D.char*s;scnaf(%s,
4、&s);3.以下语句或语句组中,能正确进行字符串赋值的是_。A.char*sp;*sp=right;B.char s10;s=right;C.char s10;*s=right;D.char*sp=right;4.设有定义:char*c;,以下选项中能够使字符型指针c 正确指向一个字符串的是_。A.char str=string;c=str;B.scanf(%s,c);C.c=getchar();D.*c=string;5.下列语句中,正确的是_。A.char*s;s=Olympic;B.char s7;s=Olympic;C.char*s;s=Olympic;D.char s7;s=Olym
5、pic;6.已有定义int k=2;int*p1,*p2;且 p1 和 p2 均已指向变量k,下面不能正确执行的赋值语句是 _。A.k=*p1+*p2;B.p2=k;C.p1=p2;D.k=*p1*(*p2);7.若有定义:double a10,*s=a;,以下能够代表数组元素a3 的是 _。A.(*s)3 B.*(s+3)C.*s3D.*s+3 8.若有定义int a5,*p=a;,则对 a 数组元素的正确引用是_。A.*&a5 B.a+2 C.*(p+5)D.*(a+2)9.若有定义语句:double a,*p=&a;以下叙述中错误的是_。A.定义语句中*是一个间接访问运算符B.定义语句中
6、*号只是一个说明符C.定义语句中p 只能存放double 类型变量的地址D.定义语句中,*p=&a 把变量 a的地址作为初始赋给指针变量p 10.若有程序段:char str=china;char*p;p=str;则下列叙述正确的是_。A.*p 与 str0相等B.str数组长度和p 所指向的字符串长度相等C.str和 p 完全相同D.数组 str中的内容和指针变量p 中的内容相等11.若有语句int*point,a=4;和 point=&a;下面均代表地址的一组选项是_。A.a,point,*&a B.&*a,&a,*point C.&point,*point,&a D.&a,&*point
7、,point 12.以下选项中,对指针变量p 的正确操作是_。A.int a5,*p;p=&a;B.int a5,*p;p=a;C.int a5;int*p=a=1000;D.int a5;int*p1,*p2=a;*p1=*p2;13.设有定义语句:int m=2,4,6,8,*k=m;,以下选项中表达式的值为6 的是 _。A.*(k+2)B.k+2 C.*k+2 D.*k+=2 14.若有定义:int*p,m=5,n;,以下正确的程序段是_。A.p=&n;scanf(%d,&p);B.p=&n;scanf(%d,*p);C.scanf(%d,&n);*p=n;D.p=&n;*p=m;15.
8、以下程序的运行结果是_。#includestdio.h main()int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(%d,%d,%d,%dn,m,n,*p,*q);A.1,2,1,2 B.1,2,2,1 C.2,1,2,1 D.2,1,1,2 16.若有定义语句:int a410,*p,*q4;且 0i 4,则错误的赋值是A.p=a B.qi=ai C.p=ai D.p=&a21 17.以下程序中调用scanf函数给变量a 输入数值的方法是错误的,其错误原因是_。#includestdio.h main()int*p,q,a,b;p=&a;print
9、f(input a:);scnaf(%d,*p);,A.*p 表示的是指针变量p 的地址B.*p 表示的是变量a 的值,而不是变量a 的地址C.*p 表示的是指针变量p 的值D.*p 只能用来说明p 是一个指针变量18.程序段 char*s=abcde;s+=2;printf(%d,s);的运行结果是 _。A.cde B.字符 c C.字符 c 的地址D.无确定的输出结果19.下面程序段的运行结果是_。char str=ABC,*p=str;printf(%dn,*(p+3);/*(p+3)表示 p 的地址从开始处移动3 A.67 B.0 C.字符 C 的地址D.字符 C 20.下面程序段的运
10、行结果是_。char a=language,*p;p=a;while(*p!=u)printf(%c,*p-32);p+;A.LANGUAGE B.language C.LANG D.langUAGE 21.若有定义char s10;,则在下面表达式中不表示s1 的地址的是 _。A.s+1 B.s+C.&s0+1 D.&s1 22.以下程序的运行结果是_。#include#include main()char str20=One*World,One*Dream!,*p=str1;printf(%d,strlen(p);printf(%sn,p);A.9,One*WorldB.9,One*Dre
11、am!C.10,One*Dream!D.10,One*World 23.下列函数的功能是_。fun(char*a,char*b)while(*b=*a)!=0)a+,b+;A.使 a 所指字符串赋给b 所指空间B.使指针 b 指向 a 所指字符串C.将 a 所指字符串和b 所指字符串进行比较D.检查 a 和 b 所指字符串中是否有0 24.以下程序的运行结果是_。#include main()char*s=abc;doprintf(%d,*s%10);+s;while(*s);A.abc B.789 C.7890 D.979899 25.以下程序的运行结果是_。#include void fu
12、n(int*p)printf(%dn,p5);main()int a10=1,2,3,4,5,6,7,8,9,10;fun(&a3);A.5 B.6 C.8 D.9 26.若有定义语句:char*s=OK,*s2=ok;,以下选项中能够输出“OK”的语句是 _。A.if(strcmp(s1,s2)=0)puts(s1);B.if(strcmp(s1,s2)!=0)puts(s2);C.if(strcmp(s1,s2)=1)puts(s1);D.if(strcmp(s1,s2)!=0)puts(s1);27.以下程序的运行结果是_。#include void fun(char*c,int d)*
13、c=*c+1;d=d+1;printf(%c,%c,*c,d);main()char b=a,a=A;fun(&b,a);printf(%c,%cn,b,a);A.b,B,b,AB.b,B,B,A C.a,B,B,a D.a,B,a,B 28.有以下定义和语句:structworkers int num;char name20;char c;struct int day;int month;int year;s;struct workers w,*pw;pw=&w;能给 w中 year 成员赋 1980 的语句是 _。A.*pw.year=1980;B.w.year=1980C.pw year
14、=1980;D.w.s.year=1980;29.下面程序把数组元素中的最大值放入a0 中,则在if 语句中的条件表达式应该是_。main()int a10=6,7,2,9,1,10,5,8,4,3,*p=a,i;for(i=o;ia B.*pa0 C.*p*a0 D.*p0*a0 30.以下程序的运行结果是_。#include main()int a=10,20,30,40,*p=a,i;for(i=0;i=3;i+)ai=*p;p+;printf(%dn,a2);A.30 B.40 C.10 D.10 31.以下程序的输出结果是_。#include main()char*s=12134;i
15、nt k=0,a=0;while(sk+1!=0)k+;if(k%2=0)a=a+(sk-0+1);continue;a=a+(sk-0);printf(k=%d a=%dn,k,a);A.k=6 a=11 B.k=3 a=14 C.k=4 a=12D.k=5 a=15 32.以下程序的输出结果是_。#include main()char a510=one,two,three,four,five;int i,j;char t;for(i=0;i4;i+)for(j=i+1;jaj0)t=ai0;ai0=aj0;aj0=t;puts(a1);A.fwo B.fix C.two D.owo 33.
16、下面程序对两个整型变量的值进行交换。以下正确的说法是_。main()int a=10,b=20;printf(1)a=%d,b=%dn,a,b);swap(&a,&b);printf(2)a=%d,b=%dn,a,b);swap(int p,int q)int t;t=p;p=q;q=t;A.该程序完全正确B.该程序有错,只要将语句swap(&a,&b);中的参数改为a,b 即可C.该程序有错,只要将swap()函数中形参p 和 q 以及 t 均定义为指针即可D.以上说法都不正确34.下面程序的功能是按字典顺序比较两个字符串a,b 的大小,如果a 大于 b 则返回正值,等于则返回0,小于则返回
17、负值。下划线处应该填_。#include stdio.h s(char*s,char*t)for(;*s=*t;t+,s+)if(*s=0)return 0;return(*s-*t);main()char a20,b10,*p,*q;int i;p=a;q=b;scanf(%s%s,a,b);i=s(_);printf(%d,i);A.p,q B.q,p C.a,p D.b,q 35.下面程序的运行结果是_。#include void delch(char*s)int i,j;char*a;a=s;for(i=0,j=0;ai!=0;i+)if(ai=0&ai=9)sj=ai;j+;sj=0
18、;main()char*item=a34bc;delch(item);printf(n%s,item);A.abc B.34 C.a23 D.a34bc 36.以下程序的执行后输出结果是_。#include main()char str=xyz,*ps=str;while(*ps)ps+;for(ps-;ps-str=0;ps-)puts(ps);A.yz B.z C.z D.x xyz yz yz xy xyz xyz 37.以下程序的执行后输出结果是_。#include void main()int a33,*p,i;p=&a00;for(i=0;i9;i+)pi=i;for(i=0;i3
19、;i+)printf(%d,aij);A.012 B.123 C.234 D.345 38.以下程序执行后的输出结果是_。#include void main()int a=1,2,3,4,y,*p=&a1;y=(*-p)+;printf(%d,y);A.1 B.2 C.3 D.4 39.以下程序执行后的输出结果是_。#include#include void main()char s110,*s2=ab0cdef;strcpy(s1,s2);printf(%s,s1);A.ab0cdef B.abcdef C.ab D.以上答案都不对40.若有函数:voidfun(double a,int*n),,以下叙述中正确的是_。A.调用 fun 函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送B.形参 a 和 n 都是指针变量C.形参 a 是一个数组名,n 是指针变量D.调用 fun 函数时将把double 型实参数组元素一一对应地传送给形参a 数组
限制150内