CH6指针练习题及答案.docx

上传人:b****4 文档编号:6133915 上传时间:2023-05-09 格式:DOCX 页数:16 大小:21.24KB
下载 相关 举报
CH6指针练习题及答案.docx_第1页
第1页 / 共16页
CH6指针练习题及答案.docx_第2页
第2页 / 共16页
CH6指针练习题及答案.docx_第3页
第3页 / 共16页
CH6指针练习题及答案.docx_第4页
第4页 / 共16页
CH6指针练习题及答案.docx_第5页
第5页 / 共16页
CH6指针练习题及答案.docx_第6页
第6页 / 共16页
CH6指针练习题及答案.docx_第7页
第7页 / 共16页
CH6指针练习题及答案.docx_第8页
第8页 / 共16页
CH6指针练习题及答案.docx_第9页
第9页 / 共16页
CH6指针练习题及答案.docx_第10页
第10页 / 共16页
CH6指针练习题及答案.docx_第11页
第11页 / 共16页
CH6指针练习题及答案.docx_第12页
第12页 / 共16页
CH6指针练习题及答案.docx_第13页
第13页 / 共16页
CH6指针练习题及答案.docx_第14页
第14页 / 共16页
CH6指针练习题及答案.docx_第15页
第15页 / 共16页
CH6指针练习题及答案.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

CH6指针练习题及答案.docx

《CH6指针练习题及答案.docx》由会员分享,可在线阅读,更多相关《CH6指针练习题及答案.docx(16页珍藏版)》请在冰点文库上搜索。

CH6指针练习题及答案.docx

CH6指针练习题及答案

第六章指针练习题及答案

一、填空题

1、定义inta[]={1,2,3,4,5,6},*p=a;语句printf("%d",(*++p)++);的输出结果是()。

2、以下程序的执行结果是()。

main()

{chars[]="abcdefg";char*p;

p=s;printf("ch=%c\n",*(p+5));}

3、以下程序的执行结果是()。

main()

{inta[][={1,2,3,4,5,6};

for(p=&a[5];p>=a;p--)printf("%d",*P);

printf("\n");}

4、以下程序的执行结果是()。

main()

{inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;

for(i=0;i<4;i++)

p[i]=&a[i*3];

printf("%d\n",p[3][2]);}

5、设包含如下程序的文件名为myprog.c,编译后键入命令:

myprogonetwothree,则执行结果是()。

main(intargc,char*argv[])

{inti;

for(i=1;i

printf("%s%c",argv[i],(i

":

');}

6、下面程序的运行结果是()

chars[80],*sp="HELLO!

";sp=strcpy(s,sp);s[0]='h';puts(s);

7、下面程序段的运行结果是()

char*s1="AbcdEf",*s2="aB";

s1++;t=(strcmp(s1,s2)>0);printf("%d\n",t);

8、下面程序段的运行结果是()

charstr[]="abc\0def\0ghi";char*p=str;printf("%s",p+5)

9、若有以下定义和语句:

inta[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是()。

10、若有定义:

inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是(),*(a[1]+2)的值()。

11、若有定义:

inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是(),*(a+5)的值是()。

12、若有以下定义和语句:

inta[4]={0,1,2,3},*p;p=&a[2];则*--p的值是()。

13、若有以下定义和语句:

ints[2][3]={0},(*p)[3];p=s;则(*(p+1)+2)的值是()。

14、若有定义:

inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是(),*(*(a+1)+0)的值是()。

15、若有定义:

inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[3],k;则下面程序段的输出是()。

for(k=0;k<3;k++)q[k]=&a[k*4];printf("%d\n",q[2][3]);

16、若有以下输入:

1,2代表回车),则下面程序的运行结果是()。

main()

{inta[2][3]={2,4,6,8,10,12},(*p)[3],i,j;

p=a;scanf("%d,%d",&i,&j);printf("%d\n",*(*(p+i)+j);)

17、下面程序的运行结果是()。

main()

{char*a[]={"P","C","B","L"},(**p)[];intj;

p=a+3;

for(j=3;j>=0;j--)printf("%s",*(p--));}

18、以下程序的执行结果是()。

main()

{char*p1,*p2,str[20]="xyz";p1="abcd";p2="ABCD";

strcpy(str+1,strcat(p1+1,P2+1));printf("%s",str);}

19、若输入的值分别是135,下面程序的运行结果是()

main()

{inta=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)

{intsum=10;sum=sum+*p;return(sum);}

20、下面程序段的运行结果是()

chars[20]="abcd";char*sp=s;sp++;puts(strcat(sp,"ABCD"));

21、下面程序段的运行结果是()

chara[]="12345",*p;ints=0;

for(p=a;*p!

='\0';p++)s=10*s+*p-'0';printf("%d\n",s);

22、下面程序段的运行结果是()

chara[]="123456789",*p;inti=0;p=a;

while(*p){if(i%2==0)*p='*';p++;i++;}puts(a);

23、下面程序的运行结果是()。

main()

{char*str[]={"Pascal","Clanguage","Dbase","Cobol"};char**p;intk;

p=str;

for(k=0;k<4;k++)printf("%s,",*(p++));}

二、选择题

1、以下程序的运行结果是()

voidsub(intx,inty,int*z)

{*z=y-x;}

main()

{inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf("%4d,%4d,%4d\n",a,b,c);}

A)5,2,3B)-5,-12,-7

C)-5,-12,-17D)5,-2,-7

2、执行以下程序后,b的值为()

main()

{intb,k=4,m=6,*p1=&k,*p2=&m;b=(-*p1)/(*p2)+7;printf("%d\n",b);}

A)5B)6C)7D)10

3、下面程序应能对两个整型变量的值进行交换。

以下正确的说法是()

main()

{inta=10,b=20;printf("%d,%d",a,b);swap(&a,&b);printf("%d,%d",a,b);}

swap(intp,intq)

{intt;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、设chars[10];inti=1;以下正确的表达式是()。

A)[i+2]B)*(s+i)C)*(&s+i)D)*((s++)+i)

6、设有语句:

inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;以下对a数组的元素值不正确的引用是()。

A)a[p-a]B)*(&a[i])C)p[i]D)*(a[0]+1)

7、设有说明int(*ptr)[M];其中ptr是()。

A)M个指向整型变量的指针B)指向M个整型变量的函数指针

C)一个指向具有M个整型元素的一维数组的指针

D)具有M个指针元素的一维指针数组,每一元素只能指向整型量

8、如下程序的执行结果是()。

 main()

{inti;char*s="a\\\\\n";for(i=0;s[i]!

='\n';i++)printf("%c",*(s+i));}

A)aB)a\C)a\\D)a\\\\

9、有四组对指针变量进行操作的语句,以下判断正确的选项是()

(1)int*p,*q;q=p;

inta,*p,*q;*p=*q=&a;

(2)inta,*p,*q;q=&a;p=*q;

inta=20,*p;*p=a;

(3)inta=b=0,*p;p=&a;b=*p;

inta=20,*p,*q=&a;*p=*q;

(4)inta=20,*p,*q=&a;p=q;

intp,q;q=&p;

A)

(1)正确,其余错B)

(1),(4)正确,其余错

C)(3)正确,其余错D)以下结论都不正确

10、以下程序中调用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)表示()。

inta[10],*p=a;

A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值

12、若有定义:

int*p[4];则标识符p()。

A)是一个指向整型变量的指针B)是一个指针数组

C)是一个指针,它指向一个含有四个整型元素的一维数组。

D)说明不合法

13、若有以下定义,且0<=i<6,则正确的赋值语句是()。

ints[4][6],t[6][4],(*p)[6];

A)p=t;B)p=s;C)p=s[i];D)p=t[i];

14、若有定义:

inta[4][6];则能正确表示a数组中任一元素a[i][j](此处0<=i<4,0<=j<6)地址的表达式是()

A)&a[0][0]+6*i+jB)&a[0][0]+4*j+IC)&a[0][0]+4*i+jD)&a[0][0]+6*j+i

15、以下选项中,对指针变量p的正确操作是()

A)inta[5],*p;p=&a;B)inta[5],*p;p=a;

C)inta[5];int*p=a=1000D)inta[5];int*p1,*p2=a;

*p1=*p2;

16、若有以下定义,且0<=i<5,则对数组a元素的非法引用是()

inta[5],*p=a;

A)a[i]B)*(a+i)C)*(p+i)D)*(&a+i)

17、设有以下定义:

char*cc[2]={"1234","5678"};则正确的叙述是()

A)cc数组的两个元素中各自存放了字符串"1234"和"5678"的首地址

B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

C)cc是指针变量,它指向含有两个数组元素的字符型一维数组

D)cc数组元素的值分别是"1234"和"5678"

18、若有以下定义:

intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[3]=x;

则能够正确表示数组元素x[1][2]的表达式是()

A)*((*p+1)[2])B)(*p+1)+2C)*(*(p+5))D)*(*(p+1)+2)

19、以下正确的叙述是()

A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定。

B)C语言允许main函数带形参,形参名只能是argc和argv。

C)当main函数带有形参时,传给形参的值只能从命令行中得到。

D)若有说明,main(intargc,char*argv),则形参argc的值必须大于1。

20、main函数的正确说明形式是()

A)main(intargc,char**argv[])

B)main(intabc,char*abv)

C)main(intargc,charargv)

D)main(intc,char*v[])

21、以下程序能找出数组x中的最大值和该值所在的元素下标,数组元素值从键盘输入。

main()

{

intx[10],*p1,*p2,k;

for(k=0;k<10;k++)scanf("%d",x+k);

for(p1=x,p2=x;p1-x<10;p1++)if(*p1>*p2)p2=p1;

printf("MAX=%d,INDEX=%d\n",*p2,《  》);}

A)p1-xB)p1

C)p2-xD)x-p2

22、若有说明:

char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则表达式*language[1]>*language[3]比较的是()

A)字符F和字符PB)字符串BASIC和字符串JAVA

C)字符B和字符JD)字符串FORTRAN和字符串PASCAL

23、若有说明:

char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则language[2]的值是()

A)一个字符B)一个地址C)一个字符串D)一个不定值

24、语句int(*ptr)();的含义是()

A)ptr是指向一维数组的指针变量B)ptr是指向int型数据的指针变量

C)ptr是指向函数的指针,该函数返回一个int型数据

D)ptr是一个函数名,该函数的返回值的指向int型数据的指针

25、若有函数max(a,b),并且已使函数指针变量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=maxB)*p=max;C)p=max(a,b)D)*p=max(a,b)

27、已有定义int(*p)();指针p可以()。

A)代表函数的返回值B)指向函数的入口地址

C)表示函数的类型D)表示函数返回值的类型

28、若要对a进行++运算,则a应具有下面说明()

A)inta[3][2];B)char*a[]={"12","ab"};C)char(*a)[3];D)intb[10],*a=b;

29、下面正确的程序段是()

A)charstr[20];scanf("%s",&str);B)char*p;scanf("%s",p);

C)charstr[20];scanf("%s",&str[2]);D)charstr[20],*p=str;scanf("%s",p[2]);

30、下面程序段的运行结果是()charstr[]="ABC",*p=str;printf("%d\n",*(p+3));

A)67B)0C)字符'C'的地址D)字符'C'

31、下面程序段的运行结果是()

char*p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABC")));

A)8B)12C)4D)7

32、下面说明不正确的是()

A)chara[10]="china";B)char[10],*p=a;p="china";

C)char*a;a="china";D)chara[10],*p;p=a="china";

33、若有说明语句

chara[]="Itismine";char*p="Itismine";

则以下不正确的叙述是()

A)a+1表示的是字符t的地址

B)p指向另外的字符串时,字符串的长度不受限制

C)p变量中存放的地址值可以改变

D)a中只能存放10个字符

34、若已定义chars[10];则在下面表达式中不表示s[1]的地址是()

A)s+1B)s++C)&s[0]+1D)&s[1]

35、下面程序段的运行结果是()

chars[6];strcpy(s,"abcd");printf("\"%s\"\n",s);

A)"abcd"B)"abcd"C)\"abcd\"D)编译出错

36、若有说明:

char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则以下不正确的叙述是()

A)language[2]表示字符串"pascal"的首地址

B)*language[2]的值是字母P

C)language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串变量的指针

D)language是一个字符型指针数组,它包含5个元素,其初值分别是:

"FORTRAN","BASIC","PASCAL","JAVA","C"

37、设chars[10],*p=s;以下不正确的表达是()

A)p=s+5;B)s=p+s;C)s[2]=p[4];D)*p=s[0];

38、设char**s;以下正确的表达式是()。

A)s="computer"B)*s="computer"C)**s="computer"D)*s='c'

39、选择i的正确结果()。

inti;char*s="a\045+045\'b";for(i=0;*s++;i++);

A)7B)8C)11D)12

40、如下程序的执行结果是()。

main()

{inti;char*s="a\nn35\b";for(i=0;*s++;i++);printf("i=%d\n",i);}

A)i=5B)i=6C)i=7D)i=8

41、如下程序的执行结果是()。

main()

{inti;char*s="\"";for(i=0;s[i]!

='\0';i++);printf("%c",*(s+i));}

A)\"B)"C)"\""D)不正确

42、如下程序的执行结果是()。

main()

{inti;char*s="\\\""for(i=0;s[i]!

='\0';i++)printf("%c",*(s+i));}

A)\"B)a"C)"\"D)不正确

43、如下执行的程序结果是()。

main()

{staticinta[]={1,2,3,4,5,6};int*p;p=a;*(p+3)+=2;printf("%d,%d\n",*p,*(p+3));}

A)1,3B)1,6C)3,6D)1,4

44、以下正确的说明语句是()

A)int*b[]={1,3,5,7,9};B)inta[2];int*num[2]={&a[0],&a[1]};

C)inta[]={1,2};int*num[2]={a[0],a[1]};D)inta[3][4],(*num)[4];num[1]=&a[1][3];

45、若有以下定义,且0<=i<4,则不正确的赋值语句是()

intb[4][6],*p,*q[4];

A)q[i]=b[i];B)p=b;C)p=b[i];D)q[i]=&b[0][0];

46、若有定义:

inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;则下面程序段的输出是()

for(k=0;k<4;k++)q[k]=&a[k*3];printf("%d\n",q[3][0]);

A)8B)16C)20D)结果不确定

47、若有以下定义,则数值不为3的表达式是()intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;

A)x[3]B)p1=x+3,*p1++C)p1=x+2,*(p1++)D)p1=x+2,*++p1

48、下面程序的运行结果是()

main()

{intx[5]={2,4,6,8,10},*p,**pp;p=x;pp=&p;printf("%d",*(p++));printf("%3d\n",**pp);}

A)44B)24C)22D)46

49、若有以下说明和语句:

char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};

char**q;q=language+2;

则语句printf("%o\n",*q);

A)输出的是language[2]元素地址B)输出的是字符串PASCAL

C)输出的是language[2]元素的值,它是字符串PASCAL的首地址

D)格式说明不正确,无法得到确定的输出

50、下面程序段的运行结果是()

char*format="%s,a=%d,b=%d\n";inta=1,b=10;a+=b;printf(format,"a+=b",a,b);

A)for,"a+=b",abB)format,"a+=b"C)a+=b,a=11,b=10D)以下结果都不对

三、编程题

1、有3个学生,每人考5门课,求每个学生的平均分和每门课的平均分数

2、输入一个字符串,内有数字和非数字字符,如:

a123x4561760?

302ab567,将其中连续的数字作为一个整数依次存放到一数组a中,如123存放到a[0]中,456存放到a[1]中。

3、求定积分:

计算[0,1]之间函数1+x2、[0,2]之间函数1+x+x2+x3、[0,3.5]之间函数x/(1+x2)的定积分。

附录:

答案

一、填空题

1、22、f3、6543214、12

5、one:

two:

three6、HELLO!

7、18、of

9、210、121211、41212、1

13、014、8815、2416、12

17、LBCP18、xbcdBCD23、Pascal,Clanguage,Dbase,Cobol

二、选择题

1—5BCCCB6—10DBCCB11—15BCBCB

16—20DADCD21—25BCBDC26—30ABDCB

31—35ADDBA36—40CBBBB41—45DABBA

46—50CBBCC

三、编程题

1、

main()

{

floatstu_ave(float(*p)[5]);

floatcour_ave(float*pt);

floatscore[3][5]={{100,60,70,80,67},{62,71,98,45,57},{90,39,89,39,90}};

intI;

for(I=0;I<3;I++)

printf(“%f”,stu_ave(score+i));

for(I=0;I<5;I++)

printf(“%f”,cour_ave(score[0]+i));

}

floatstu_ave(float(*p)[5])

{

intj;floatsum;

floatsum=0,ave;

for(j=0;j<5;j++)

sum=sum+*(*p+j);

re

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2