您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 指针经典练习题(含答案版)二
1指针练习题一.选择题:1.以下选项中,对基类型相同的指针变量不能进行运算的运算符是(A)。A.+B.一C.一一D.++2.若有定义:inta[3][4];(D)不能表示数组元素a[1][1].A)*(a[1]+1)B)*(&a[1][1])C)(*(a+1)[1])D)*(a+5)3.与int*p[4];定义等价的是(C)。A)intp[4];B)int*P;C)int*(p[4]);D)int(*p)[4];4.若有如下定义:Chars[100]=’’string’’;则下述函数调用中,(C)是错误的。A)strlen(strcpy(s,’’Hello’’))B)strcat(s,strcpy(s1,’’s’’))C)puts(puts(’’Tom’’))D)!strcmp(’’’’,s)5.以下程序的输出结果是(B).#includestdio.hvoidsub(intx,inty,int*z){*z=y-x;}Main(){inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(“%d,%d,%d”,a,b,c);}A)5,2,3B)-5,-12,-7C)-5,-12,-17D)5,-2,-76.以下程序的结果是(C)#includestdio.hmain(){intk=2,m=4,n=6;int*pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(“%d”,n);}A)4B)6C)8D)107.若指针p已正确定义,其指向如图所示,则执行语句*p++后,*p的值是(A)a[0]a[1]a[2]a[3]a[4]1020304050PA)20B)30C)21D)318.以下程序运行结果是(B).#includestdio.hmain(){int**k,*a,b=100;a=&b;k=&a;printf(“%d”,**k);}A)运行出错B)100C)a的地址D)b的地址9.以下程序运行结果是(C)#includestdio.hvoidfun(float*a,float*b){floatw;*a=*a+*a;w=*a;*a=*b;*b=w;}main(){floatx=2.0,y=3.0;float*px=&x,*py=&y;fun(px,py);printf(“%2.0f,%2.0f”,x,y);}A)4,3B)2,3C)3,4D)3,210.#includestdio.hvoidsub(floatx,float*y,float*z){*y=*y-1.0;*z=*z+x;}main(){floata=2.5,b=9.0,*pa,*pb;pa=&a;pb=&b;sub(b-a,pa,pb);printf(“%f”,a);}A)9.000000B)1.500000C)8.000000D)10.50000011.以下程序的输出结果是(B)#includestdio.hintb=2;intfunc(int*a){b+=*a;return(b);}main(){inta=2,res=2;res+=func(&a);printf(“%d”,res);}.A)4B)6C)8D)1012.有如下程序段:int*p,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a的值是(B)。A)12B)11C)10D)编译出错13.以下程序的输出结果是(C)。#includestdio.hmain(){charch[2][5]={“6937”,”8254”},*p[2];inti,j,s=0;2for(i=0;i2;i++)p[i]=ch[i];for(i=0;i2;i++)for(j=0;p[i][j]’\0’;j+=2)s=10*s+p[i][j]-‘0’;printf(“%d”,s);}A)69825B)63825C)6385D)69382514.下面程序的输出结果是(A)#includestdio.hvoidfun(int*x,int*y){printf(“%d%d”,*x,*y);*x=3;*y=4;}main(){intx=1,y=2;fun(&x,&y);printf(“%d%d”,x,y);}A)2134B)1212C)1234D)211215.下面程序的输出结果是(C)#includestdio.hmain(){inta[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf(“%d”,*p+9);}A)0B)1C)10D)916.当调用函数是,实参是一个数组名,则向函数传递的是(B)A)数组的长度B)数组的首地址C)数组每一个元素的地址D)数组每个元素中的值17.若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入3个整数分别赋给变量a,b,c的语句是(A)A)scanf(“%d%d%d”,&a,&b,d);B)scanf(“%d%d%d”,&a,&b,&d);C)scanf(“%d%d%d”,a,b,c);D)scanf(“%d%d%d”,a,b,*d);18.若定义inta=511,*b=&a;,则printf(“%d”,*b);的输出结果是(C)A)无确定值B)a的地址C)512D)51119.以下程序调用findmax()函数返回数组中的最大值,在下划线处应填入的是(B)#incudestdio.hfindmax(int*a,intn){int*p,*s;for(p=a,s=a;p-an;p++)if(_*s*p____)s=p;return(*s);}main(){intx[5]={12,21,13,6,18};printf(“%d”,findmax(x,5);}A)psB)*p*sC)a[p]a[s]D)p-ap-s20.在说明语句中:int*f();标识符f代表的是(D)A)一个用于指向整型数据的指针变量B)一个用于指向一维数组的行指针C)一个用于指向函数的指针变量D)一个返回值为指针型的函数名21.若有说明:intn=2,*p=&n,*q=p;则以下非法的赋值语句是(D)A)p=q;B)*p=*q;C)n=*q;D)p=n;22.以下程序的输出结果是(A)#includestdio.h#includestring.hmain(){char*p=”abcde/ofghjik/0”;printf(“%d”,strlen(p));}A)12B)15C)6D)523.设有以下语句,则(D)不是对a数组元素的正确引用,其中0=i10inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;A)a[p-a]B)*(&a[i])C)p[i]D)*(*(a+i))24.有如下程序段:charstr[]=”Hello”;char*ptr;ptr=str;执行上面的程序段后,*(ptr+5)的值为(B)A)’o’B)’/0’C)不确定的值D)’o’的地址25.下面函数的功能是(B)sss(s,1)char*s,*t;{while((*s)&&(*t)&&(*t++=*s++));return(*s-*t);}A)求字符串的长度B)比较两个字符串的大小C)将字符串复制到字符串中D)将字符串接续到字符串中26.请选出以下程序的输出结果()#includestdio.hmain(){inta[]={1,2,3,4},i;intx=0;for(i=0;i4;i++){sub(a,x);printf(“%d”,x);}printf(“/n”);}sub(s,y)int*s,y;{staticintt=3;3A)1234B)4321C)0000D)444427.说明语句int*(*p)()的含义(D)A)p是一个指向int型数组的指针B)p是指针变量,它构成了指针数组C)p是一个指向函数的指针,该函数的返回值是一个整型D)p是一个指向函数的指针,该函数的返回值是一个指向整型的指针28.已知char*p,*q;选择正确的语句(C)A)p*=3;B)p/=q;C)p+=3D)p+=q;29.已知inti,x[3][4];则不能将x[1][1]的值赋给变量i的语句是(C).A)i=*(*(x+1)+1);B)i=x[1][1];C)i=*(*(x+1));D)i=*(x[1]+1);30.若有说明:int*pl,*p2,m=5,n;,以下均是正确赋值语句的选项是(C)A)p1=&m;p2=&p1;B)p1=&m;p2=&n;*p1=*p2;C)p1=&m;p2=p1;D)p1=&m;*p2=*p1;31.下面程序的运行结果是(C)#includestdio.hMain(){inta=28,b;chars[10],*p;p=s;do{b=a%16;if(b10)*p=b+48;else*p=b+55;p++;a=a/5;}while(a0);*p=’/o’;puts(s);}A)10B)C2C)C51D)/032.下面程序的运行结果是(C)#includestdio.h#includestring.hfun(char*w,intn){chart,*s1,*s2;s1=w;s2=w+n-1;while(s1s2){t=*s1++;*s1=*s2--;*s2=t}}main(){char*p;p=”12234567”;fun(p,stren(p));puts(p);}A}7654321B)1714171C)17171717D)7177171二.填空题1.以下程序段的输出结果是____110_______.int*var,ab;ab=100;var=&ab;ab=*var+10;printf(“%d”,*var);2.若有定义:charch;请依次完成下列填空(1)使指针p可以指向变量ch的定义语句是_char*p;___.(2).使指针p指向变量ch的赋值语句是__p=&ch____.(3).通过指针p给变量ch读入字符的scanf()函数调用语句是_scanf(“%c”,p);_______.(4).通过指针p给变量ch赋字符A的语句是__*p=‘A’____.(5)通过指针p输出ch中的字符的语句是___putchar(*p);______.3.若有5个连续的int类型的储存单元并赋值,如图8—4所示,且p和s的基类型皆为int类型的指针变量,p已指向存储单元a[1],请依次完成以下填空。a[0]a[1]a[2]a[3]a[4]1020304050p图上5个连续的int类型的存储单元(1)通过指针p给s赋值,使其指向最后一个存储单元a[4]的语句是_s=p+3____.(2)若指针s指向a[4],移动指针s,使之指向中间的存储单元a[2]的表达式__s-=2;____.(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是___50_____.(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是_*(s+1)____.(5)指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是__2____.(6)若p指向存储单元a[0],则以下语句的输出结果是_1020304050________.for(i=0;i5;i++)printf(“%d”,*(p+i));4.下述程序的输出结果是_gfedcba______.#includestdio.hmain(){Chars[]=”abcdefg”char*cp=&s[7];4while(--cp=s)putchar(*cp);}5.下述程序在数组中同时查找最大元素下标和最小元素下标,分别存放在main()函数的变量max和min中,请填空。#includestdio.hvoidfind(int*a,intn,int*max,int*min){inti;*max=*min=0;for(i=1;in
本文标题:指针经典练习题(含答案版)二
链接地址:https://www.777doc.com/doc-5516912 .html