第六章
练习题
一、填空题
1、定义int a[]={1,2,3,4,5,6},*p=a;语句printf(\(*++p)++);的输出结果是( )。 2、以下程序的执行结果是( )。 main()
{ char s[]=\ char *p; p=s; printf(\ } 3、以下程序的执行结果是( )。 main()
{ int a[][={1,2,3,4,5,6};
for(p=&a[5];p>=a;p--) printf(\ printf(\
4、以下程序的执行结果是( )。 main()
{ int a[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(\
5、设包含如下程序的文件名为myprog.c,编译后键入命令:myprog one two three,则执行结果是( )。 main(int argc,char *argv[]) { int i;
for(i=1;i printf(\6、下面程序的运行结果是( ) char s[80],*sp=\7、下面程序段的运行结果是( ) char *s1=\ s1++; t=(strcmp(s1,s2)>0); printf(\8、下面程序段的运行结果是( ) char str[]=\ char *p=str; printf(\9、若有以下定义和语句: int a[4]={0,1,2,3},*p; p=&a[1]; 则++(*p)的值是( )。 10、若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是( ),*(a[1]+2) 1 的值( )。 11、若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是( ),*(a+5)的值是( )。 12、若有以下定义和语句: int a[4]={0,1,2,3},*p; p=&a[2]; 则*--p的值是()。 13、若有以下定义和语句: int s[2][3]={0},(*p)[3]; p=s; 则(*(p+1)+2)的值是()。 14、若有定义:int a[2][3]={2,4,6,8,10,12}; 则a[1][0]的值是( ),*(*(a+1)+0)的值是( )。 15、若有定义:int a[]={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(\ 16、若有以下输入:1,2 {int a[2][3]={2,4,6,8,10,12} , (*p)[3],i,j; p=a; scanf(\ printf(\ ) 17、下面程序的运行结果是()。 main() { char *a[]={\ int j; p=a+3; for(j=3;j>=0;j--) printf(\18、以下程序的执行结果是()。 main() { char *p1,*p2,str[20]=\ p1=\ p2=\strcpy(str+1,strcat(p1+1,P2+1)); printf(\19、若输入的值分别是1 3 5,下面程序的运行结果是() main() {int a=0,i,*p,sum; p=&a; for(i=0;i<=2;i++) { scanf(\ sum=s(p); printf(\ }} s(int *p) {int sum=10; sum=sum+*p; return(sum); } 20、下面程序段的运行结果是() char s[20]=\ char *sp=s; sp++; puts(strcat(sp,\21、下面程序段的运行结果是() char a[]=\ int s=0; for(p=a;*p!='\\0';p++) s=10*s+*p-'0'; printf(\22、下面程序段的运行结果是() char a[]=\ int i=0; p=a; 2 while(*p) {if(i%2==0) *p='*'; p++;i++; } puts(a); 23、下面程序的运行结果是()。 main() { char *str[]={\ language\ int k; p=str; for(k=0;k<4;k++) printf(\ } 二、选择题 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(\A) 5, 2, 3 B) -5, -12, -7 C) -5, -12, -17 D) 5, -2, -7 2、执行以下程序后,b的值为() main() {int b,k=4,m=6,*p1=&k,*p2=&m; b=(-*p1)/(*p2)+7; printf(\ } A)5 B)6 C)7 D)10 3、下面程序应能对两个整型变量的值进行交换。以下正确的说法是() main() {int a=10,b=20; printf(\ swap(&a,&b); printf(\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 s[10];int i=1;以下正确的表达式是()。 A)[i+2] B)*(s+i) C)*(&s+i) D)*((s++)+i) 6、设有语句:int a[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) 3 7、设有说明int(*ptr)[M];其中ptr是()。 A)M个指向整型变量的指针 B)指向M个整型变量的函数指针 C)一个指向具有M个整型元素的一维数组的指针 D)具有M个指针元素的一维指针数组,每一元素只能指向整型量 8、如下程序的执行结果是()。 main() { int i; char *s=\ for(i=0;s[i]!='\\n';i++) printf(\ } A)a B)a\\ C)a\\\\ D)a\\\\\\\\ 9、有四组对指针变量进行操作的语句,以下判断正确的选项是() (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、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是() main() { int *p,*q,a,b; p=&a; scanf(\A)*p表示的是指针变量p的地址 B)*p表示的是变量a的值,而不是变量a的地址 C)*p表示的是指针变量p的值 D)*p只能用来说明p是一个指针变量 11、若有以下定义,则*(p+5)表示()。int a[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,则正确的赋值语句是()。int s[4][6],t[6][4],(*p)[6]; A)p=t; B)p=s; C)p=s[i]; D)p=t[i]; 14、若有定义:int a[4][6];则能正确表示a数组中任一元素a[i][j](此处0<=i<4,0<=j<6)地址的 4
相关推荐: