CH6-指针练习习题及答案_第1页
CH6-指针练习习题及答案_第2页
CH6-指针练习习题及答案_第3页
CH6-指针练习习题及答案_第4页
CH6-指针练习习题及答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第六章指针练习题及答案一、填空题1、定义int a=1,2,3,4,5,6,*p=a;语句printf("%d",(*+p)+);的输出结果是( )。2、以下程序的执行结果是( )。main() char s="abcdefg" char *p; p=s; printf("ch=%cn",*(p+5); 3、以下程序的执行结果是( )。main() int a=1,2,3,4,5,6; for(p=&a5;p>=a;p-) printf("%d",*P); printf("n")

2、; 4、以下程序的执行结果是( )。main() int a12=1,2,3,4,5,6,7,8,9,10,11,12,*p4,i;for(i=0;i<4;i+) pi=&ai*3;printf("%dn",p32);5、设包含如下程序的文件名为,编译后键入命令:myprog one two three,则执行结果是( )。main(int argc,char *argv) int i; for(i=1;i<argc;i+) printf("%s%c",argvi,(i<argc-1)":');6、下面程序的运

3、行结果是( )char s80,*sp="HELLO!"sp=strcpy(s,sp); s0='h' puts(s);7、下面程序段的运行结果是( )char *s1="AbcdEf",*s2="aB"s1+; t=(strcmp(s1,s2)>0); printf("%dn",t);8、下面程序段的运行结果是( )char str="abc0def0ghi" char *p=str; printf("%s",p+5)9、若有以下定义和语句: int

4、a4=0,1,2,3,*p; p=&a1; 则+(*p)的值是( )。10、若有定义:int a23=2,4,6,8,10,12;则*(&a00+2*2+1)的值是( ),*(a1+2)的值( )。11、若有定义:int a=2,4,6,8,10,12,*p=a;则*(p+1)的值是( ),*(a+5)的值是( )。12、若有以下定义和语句: int a4=0,1,2,3,*p; p=&a2; 则*-p的值是()。13、若有以下定义和语句: int s23=0,(*p)3; p=s; 则(*(p+1)+2)的值是()。14、若有定义:int a23=2,4,6,8,10

5、,12; 则a10的值是( ),*(*(a+1)+0)的值是( )。15、若有定义:int a=2,4,6,8,10,12,14,16,18,20,22,24,*q3,k;则下面程序段的输出是()。for(k=0;k<3;k+) qk=&ak*4; printf("%dn",q23);16、若有以下输入:1,2<CR>(<CR>代表回车),则下面程序的运行结果是()。main()int a23=2,4,6,8,10,12 , (*p)3,i,j;p=a; scanf("%d,%d",&i,&j); p

6、rintf("%dn",*(*(p+i)+j); )17、下面程序的运行结果是()。main() char *a="P","C","B","L", (* *p) ; int j;p=a+3;for(j=3;j>=0;j-) printf("%s",*(p-);18、以下程序的执行结果是()。main() char *p1,*p2,str20="xyz" p1="abcd" p2="ABCD"strcpy(str

7、+1,strcat(p1+1,P2+1); printf("%s",str); 19、若输入的值分别是1 3 5,下面程序的运行结果是()main()int a=0,i,*p,sum; p=&a; for(i=0;i<=2;i+) scanf("%d",p); sum=s(p); printf("sum=%d,",sum); s(int *p)int sum=10; sum=sum+*p; return(sum); 20、下面程序段的运行结果是()char s20="abcd" char *sp=s;

8、 sp+; puts(strcat(sp,"ABCD");21、下面程序段的运行结果是()char a="12345",*p; int s=0;for(p=a;*p!='0'p+) s=10*s+*p-'0' printf("%dn",s);22、下面程序段的运行结果是()char a="9",*p; int i=0; p=a;while(*p) if(i%2=0) *p='*' p+;i+; puts(a);23、下面程序的运行结果是()。main() char *

9、str="Pascal","C language","Dbase","Cobol" char *p; int k;p=str;for(k=0;k<4;k+) printf("%s,",*(p+); 二、选择题1、以下程序的运行结果是()void sub (int x,int y,int *z) *z=y-x;main() int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%

10、4dn",a,b,c);A) 5, 2, 3 B) -5, -12, -7C) -5, -12, -17 D) 5, -2, -72、执行以下程序后,b的值为()main()int b,k=4,m=6,*p1=&k,*p2=&m; b=(-*p1)/(*p2)+7; printf("%dn",b); A)5 B)6 C)7 D)103、下面程序应能对两个整型变量的值进行交换。以下正确的说法是()main()int a=10,b=20; printf("%d,%d",a,b); swap(&a,&b); print

11、f("%d,%d",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)以上说法都不正确4、设*p,i;以下正确的语句是()。A)*p=&i; B)i=p; C)i=*p; D)p=2*p+1;5、设char s10;int i=1;以下正确的表达式是()。A)i+2 B)*(s+i) C)*(&s+i) D)*(s+)+i)6

12、、设有语句:int a10=0,1,2,3,4,5,6,7,8,9,*p=a;以下对a数组的元素值不正确的引用是()。A)ap-a B)*(&ai) C)pi D)*(a0+1)7、设有说明int(*ptr)M;其中ptr是()。A)M个指向整型变量的指针 B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每一元素只能指向整型量8、如下程序的执行结果是()。main() int i; char *s="an" for(i=0;si!='n'i+) printf("%c",

13、*(s+i); )a )a )a )a9、有四组对指针变量进行操作的语句,以下判断正确的选项是()(1)int *p,*q;q=p; int a,*p,*q;*p=*q=&a;(2)int a,*p,*q;q=&a;p=*q; int a=20,*p;*p=a;(3)int a=b=0,*p;p=&a;b=*p; int a=20,*p,*q=&a;*p=*q;(4)int a=20,*p,*q=&a;p=q; int p,q;q=&p;A)(1)正确,其余错 B)(1),(4)正确,其余错C)(3)正确,其余错 D)以下结论都不正确10、以下程

14、序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()main() int *p,*q,a,b; p=&a; scanf("%d",*p);. A)*p表示的是指针变量p的地址B)*p表示的是变量a的值,而不是变量a的地址C)*p表示的是指针变量p的值D)*p只能用来说明p是一个指针变量11、若有以下定义,则*(p+5)表示()。int a10,*p=a;A)元素a5的地址 B)元素a5的值 C)元素a6的地址 D)元素a6的值12、若有定义:int *p4;则标识符p()。A)是一个指向整型变量的指针 B)是一个指针数组C)是一个指针,它指向一个含

15、有四个整型元素的一维数组。D)说明不合法13、若有以下定义,且0<=i<6,则正确的赋值语句是()。int s46,t64,(*p)6;A)p=t; B)p=s; C)p=si; D)p=ti;14、若有定义:int a46;则能正确表示a数组中任一元素aij(此处0<=i<4,0<=j<6)地址的表达式是()A)&a00+6*i+j B)&a00+4*j+I C)&a00+4*i+j D)&a00+6*j+i15、以下选项中,对指针变量p的正确操作是()A)int a5,*p;p=&a; B)int a5,*p;p=

16、a;C)int a5;int *p=a=1000 D)int a5;int *p1,*p2=a;*p1=*p2;16、若有以下定义,且0<=i<5,则对数组a元素的非法引用是()int a5,*p=a;A)ai B)*(a+i) C)*(p+i) D)*(&a+i)17、设有以下定义:char *cc2="1234","5678" 则正确的叙述是()A)cc数组的两个元素中各自存放了字符串"1234"和"5678"的首地址B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C)c

17、c是指针变量,它指向含有两个数组元素的字符型一维数组D)cc数组元素的值分别是"1234"和"5678"18、若有以下定义:int x43=1,2,3,4,5,6,7,8,9,10,11,12; int (*p)3=x;则能够正确表示数组元素x12的表达式是()A)*(*p+1)2) B)(*p+1)+2 C)*(*(p+5) D)*(*(p+1)+2)19、以下正确的叙述是()A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定。B)C语言允许main函数带形参,形参名只能是argc和argv。C)当main函数带有形参时,传给形参的值只

18、能从命令行中得到。D)若有说明,main(int argc,char *argv),则形参argc的值必须大于1。20、main函数的正确说明形式是()A)main(int argc,char *argv)B)main(int abc,char *abv)C)main(int argc,char argv)D)main(int c,char *v)21、以下程序能找出数组x中的最大值和该值所在的元素下标,数组元素值从键盘输入。main()int x10,*p1,*p2,k;for(k=0;k<10;k+) scanf("%d",x+k);for(p1=x,p2=x;p

19、1-x<10;p1+) if(*p1>*p2) p2=p1;printf("MAX=%d,INDEX=%dn", *p2,);A)p1-x B)p1C)p2-x D)x-p222、若有说明:char *language="FORTRAN","BASIC","PASCAL","JAVA","C"则表达式*language1>*language3比较的是()A)字符F和字符P B)字符串BASIC和字符串JAVAC)字符B和字符J D)字符串FORTRAN和字符

20、串PASCAL23、若有说明:char *language="FORTRAN","BASIC","PASCAL","JAVA","C"则language2的值是()A)一个字符 B)一个地址 C)一个字符串 D)一个不定值24、语句int(*ptr)();的含义是()A)ptr是指向一维数组的指针变量 B)ptr是指向int型数据的指针变量C)ptr是指向函数的指针,该函数返回一个int型数据D)ptr是一个函数名,该函数的返回值的指向int型数据的指针25、若有函数max(a,b),并且已使函

21、数指针变量p指向函数max,当调用该函数时,正确的调用方法是()A)(*p)max(a,b); B)*pmax(a,b); C)(*p)(a,b); D)*p(a,b);26、已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是()A)p=max B)*p=max; C)p=max(a,b) D)*p=max(a,b)27、已有定义int(*p)();指针p可以()。A)代表函数的返回值 B)指向函数的入口地址C)表示函数的类型 D)表示函数返回值的类型28、若要对a进行+运算,则a应具有下面说明()A)int a32; B)char *a="12"

22、;,"ab" C)char (*a)3; D)int b10,*a=b;29、下面正确的程序段是()A)char str20; scanf("%s",&str); B)char *p; scanf("%s",p);C)char str20; scanf("%s",&str2); D)char str20,*p=str; scanf("%s",p2);30、下面程序段的运行结果是()char str="ABC",*p=str; printf("%dn&

23、quot;,*(p+3);A)67 B)0 C)字符'C'的地址 D)字符'C'31、下面程序段的运行结果是()char *p="abcdefgh" p+=3; printf("%dn",strlen(strcpy(p,"ABC");A)8 B)12 C)4 D)732、下面说明不正确的是()A)char a10="china" B)char 10,*p=a; p="china"C)char *a; a="china" D)char a10,*

24、p; p=a="china"33、若有说明语句char a="It is mine"char *p="It is mine"则以下不正确的叙述是()A)a+1表示的是字符t的地址B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符34、若已定义char s10;则在下面表达式中不表示s1的地址是()A)s+1 B)s+ C)&s0+1 D)&s135、下面程序段的运行结果是()char s6; strcpy(s,"abcd"); printf(&q

25、uot;"%s"n",s);A)"abcd" B)"abcd " C)"abcd" D)编译出错36、若有说明:char *language="FORTRAN","BASIC","PASCAL","JAVA","C"则以下不正确的叙述是()A)language2表示字符串"pascal"的首地址B)*language2的值是字母PC)language是一个字符型指针数组,它包含5个元素,

26、每个元素都是一个指向字符串变量的指针D)language是一个字符型指针数组,它包含5个元素,其初值分别是:"FORTRAN","BASIC","PASCAL","JAVA","C"37、设char s10,*p=s;以下不正确的表达是()A)p=s+5; B)s=p+s; C)s2=p4; D)*p=s0;38、设char *s;以下正确的表达式是()。A)s="computer" B)*s="computer" C)*s="computer&

27、quot; D)*s='c'39、选择i的正确结果()。int i; char *s="a045+045'b" for(i=0;*s+;i+);A)7 B)8 C)11 D)1240、如下程序的执行结果是()。main() int i; char *s="ann35b" for(i=0;*s+;i+); printf("i=%dn",i);A)i=5 B)i=6 C)i=7 D)i=841、如下程序的执行结果是()。main() int i; char *s=""" for(i=0

28、;si!='0'i+); printf("%c",*(s+i);)" )" )""" )不正确42、如下程序的执行结果是()。main() int i; char *s=""" for(i=0;si!='0'i+) printf("%c",*(s+i);)" )a" )"" )不正确43、如下执行的程序结果是()。main()static int a =1,2,3,4,5,6;int *p;p=a;*(p

29、+3)+=2;printf("%d,%dn",*p,*(p+3);)1,3 )1,6 )3,6 )1,444、以下正确的说明语句是()A)int *b=1,3,5,7,9; B)int a2; int *num2=&a0,&a1;C)int a=1,2; int *num2=a0,a1;D)int a34,(*num)4; num1=&a13;45、若有以下定义,且0<=i<4,则不正确的赋值语句是()int b46,*p,*q4;A)qi=bi; B)p=b; C)p=bi; D)qi=&b00;46、若有定义:int a=2,

30、4,6,8,10,12,14,16,18,20,22,24,*q4,k;则下面程序段的输出是()for(k=0;k<4;k+) qk=&ak*3; printf("%dn",q30);A) 8 B)16 C) 20 D)结果不确定47、若有以下定义,则数值不为3的表达式是()int x10=0,1,2,3,4,5,6,7,8,9,*p1;A)x3 B)p1=x+3,*p1+ C)p1=x+2,*(p1+)D)p1=x+2,*+p148、下面程序的运行结果是()main()int x5=2,4,6,8,10,*p,*pp;p=x;pp=&p;printf

31、("%d",*(p+);printf("%3dn",*pp);A)4 4 B)2 4 C)2 2 D)4 649、若有以下说明和语句:char *language="FORTRAN","BASIC","PASCAL","JAVA","C"char *q;q=language+2;则语句printf("%on",*q);A)输出的是language2元素地址 B)输出的是字符串PASCALC)输出的是language2元素的值,它是字符串

32、PASCAL的首地址D)格式说明不正确,无法得到确定的输出50、下面程序段的运行结果是()char *format="%s,a=%d,b=%dn" int a=1,b=10; a+=b;printf(format,"a+=b",a,b);A)for,"a+=b",ab B)format,"a+=b" C)a+=b,a=11,b=10 D)以下结果都不对三、编程题1、有3个学生,每人考5门课,求每个学生的平均分和每门课的平均分数2、输入一个字符串,内有数字和非数字字符,如:a123x456 1760302ab567,

33、将其中连续的数字作为一个整数依次存放到一数组a中,如123存放到a0中,456存放到a1中。3、求定积分:计算0,1之间函数1+x2、0,2之间函数1+x+x2+x3、0,之间函数x/(1+x2)的定积分。附录:答案一、 填空题1、2 2、f 3、654321 4、12 5、one:two:three 6、HELLO! 7、1 8、of 9、2 10、12 12 11、4 12 12、113、0 14、8 8 15、24 16、12 17、LBCP 18、xbcdBCD 23、Pascal,C language,Dbase,Cobol二、 选择题15 BCCCB 610 DBCCB 1115 BCBCB 1620 DADCD 2125

温馨提示

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

评论

0/150

提交评论