CH6指针练习题及答案.docx
- 文档编号:6133915
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:16
- 大小:21.24KB
CH6指针练习题及答案.docx
《CH6指针练习题及答案.docx》由会员分享,可在线阅读,更多相关《CH6指针练习题及答案.docx(16页珍藏版)》请在冰点文库上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CH6 指针 练习题 答案