《C语言—指针习题(8页).doc》由会员分享,可在线阅读,更多相关《C语言—指针习题(8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-C语言指针习题-第 8 页第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. 一个变量的地址就称为该变量的“
2、指针”。A.对 B.错9. 语句int i,*p=&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.错
3、17. char *name5定义了一个一维指针数组,它有5个元素,每个元素都是指向字符数据的指针型数据。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
4、,D,E;C.char *s; s=ABCDE;D.char *s; scnaf(%s,&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;
5、B.char s7;s=Olympic; C.char *s;s=Olympic; D.char s7;s=Olympic; 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.*s3 D.*s+3 8.若有定义int a5,*p=a;,则对a数组元素的正确引用是_。A.*&a5 B.a+2 C.*(p+5) D.*(a+2)9.
6、若有定义语句: double a,*p=&a;以下叙述中错误的是_。A.定义语句中*是一个间接访问运算符 B.定义语句中*号只是一个说明符 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,poin
7、t,*&aB.&*a,&a,*pointC.&point,*point,&a D.&a,&*point,point12.以下选项中,对指针变量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,
8、&p); B.p=&n;scanf(%d,*p); C.scanf(%d,&n); *p=n; D.p=&n;*p=m; 15.以下程序的运行结果是_。#include stdio.hmain()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;且0i4,则错误的赋值是A.p=a B.qi=ai C.p=ai D.p=&a21 17.以下程序中调用scanf函数给变量a输入
9、数值的方法是错误的,其错误原因是_。#include stdio.hmain() int *p,q,a,b; p=&a; printf(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.cdeB.字符cC.字符c的地址D.无确定的输出结果19.下面程序段的运行结果是_。char str=ABC, *p=str; printf(%dn,*(p+3); /
10、 *(p+3) 表示p的地址从开始处移动3A.67 B.0C.字符C的地址D.字符C20.下面程序段的运行结果是_。char a=language, *p; p=a;while(*p!=u) printf(%c,*p-32); p+; A.LANGUAGE B.language C.LANG D.langUAGE21.若有定义char s10; ,则在下面表达式中不表示s1的地址的是_。A.s+1B.s+ C.&s0+1 D.&s122.以下程序的运行结果是_。#include #include main() char str20=One*World,One*Dream!,*p=str1;pr
11、intf(%d,strlen(p);printf(%sn,p); A.9,One*World B.9,One*Dream! 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;do printf(%d,*s%10);+s;while(*s); A.a
12、bcB.789 C.7890 D.979899 25.以下程序的运行结果是_。#include void fun(int *p) printf(%dn,p5); main() int a10=1,2,3,4,5,6,7,8,9,10;fun(&a3); A.5B.6C.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
13、,s2)!=0) puts(s1); 27.以下程序的运行结果是_。#include void fun(char *c,int d) *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,A B.b,B,B,A C.a,B,B,a D.a,B,a,B 28.有以下定义和语句:struct workersint num;char name20;char c;struct int day;int month;int year;s; ;struct workers w,*
14、pw; pw=&w;能给w中year成员赋1980的语句是_。A.*pw.year=1980; B.w.year=1980 C.pwyear=1980; D.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.
15、30 B.40 C.10 D.10 31.以下程序的输出结果是_。#include main() char *s=12134;int 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=12 D.k=5 a=15 32. 以下程序的输出结果是_。#include main() char a510=one,two,three,four,five;int i,j; char t;for(i=0;i4;i+
16、) for(j=i+1;jaj0)t=ai0;ai0=aj0;aj0=t;puts(a1); A.fwo B.fix C.twoD.owo 33.下面程序对两个整型变量的值进行交换。以下正确的说法是_。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和
17、q以及t均定义为指针即可D.以上说法都不正确34.下面程序的功能是按字典顺序比较两个字符串a,b的大小,如果a大于b则返回正值,等于则返回0,小于则返回负值。下划线处应该填_。#include stdio.hs(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,qB.q,pC.a,pD.b,q35.下面程序的运行结果是_。#
18、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; main() char *item=a34bc; delch(item); printf(n%s,item); A.abcB.34C.a23D.a34bc36.以下程序的执行后输出结果是_。#include main() char str=xyz,*ps=str; while(*ps) ps+; for(ps-;ps-str=0;ps-) puts(ps); A.yz B.z C.z
19、 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;i+) printf(%d,aij); A.012B.123C.234D.34538.以下程序执行后的输出结果是_。#include void main() int a=1,2,3,4,y,*p=&a1; y=(*-p)+; printf(%d,y); A.1B.2C.3D.439.以下程序执行后的输出结果是_。#include #include void main() char s110,*s2=ab0cdef;strcpy(s1,s2);printf(%s,s1); A.ab0cdef B.abcdef C.ab D.以上答案都不对40.若有函数:void fun(double a,int *n) ,以下叙述中正确的是_。A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送 B.形参a和n都是指针变量 C.形参a是一个数组名,n是指针变量D.调用fun函数时将把double型实参数组元素一一对应地传送给形参a数组
限制150内