c语言第五天作业(指针部分)

文杰天下

贡献于2016-09-15

字数:8405 关键词: C/C++开发 Java

指针习题及答案 一.选择题 1.变量的指针,其含义是指该变量的( )。 A.值 B.地址 C.名 D.一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确 执行的赋值语句是( )。 A.k=*ptr1+*ptr2 B.ptr2=k C.ptr1=ptr2 D.k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是( )。 A.p=&n; scanf(“%d”,&p); B.p = &n ; scanf(“%d”,*p); C.scanf(“%d”,&n); *p=n ; D.p = &n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果 是( )。 void print_value(int *x) { printf(“%d\n”,++*x); } A.23 B.24 C.25 D.26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是( )。 A.p1=&m; p2=&p1; B.p1=&m; p2=&n; *p1=*p2; C.p1=&m; p2=p1; D.p1=&m; *p1=*p2; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是( )。 A.a,p,*&a B.&*a,&a,*p C.*&p,*p,&a D.&a,&*p,p 7.下面判断正确的是( )。 A.char *a=”china”; 等价于 char *a; *a=”china” ; B.char str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;} C.char *s=”china”; 等价于 char *s; s=”china” ; D.char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是( )。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A.9 B.7 C.6 D.5 9.下面能正确进行字符串赋值操作的是( )。 A.char s[5]={“ABCDE”}; B.char s[5]={‘A’,’B’,’C’,’D’,’E’}; C.char *s ; s=”ABCDE” ; D.char *s; scanf(“%s”,s) ; 10.下面程序段的运行结果是( )。 char *s=”abcde”; s+=2 ; printf(“%d”,s); A.cde B.字符’c’ C.字符’c’的地址 D.不确定 11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确 执行的赋值语句是( )。 A.c=*p1+*p2 B.p2=c C.p1=p2 D.c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是( )。 A.s和p完全相同 B.数组s中的内容和指针变量p中的内容相等 C.s数组长度和p所指向的字符串长度相等 D.*p与s[0]相等 13.以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是( )。 A.strcpy1(char *p1,char *p2) { while ((*p1++=*p2++)!=’\0’) ; } B.strcpy2(char *p1,char *p2) { while ((*p1=*p2)!=’\0’) { p1++; p2++ } } C.strcpy3(char *p1,char *p2) { while (*p1++=*p2++) ; } D.strcpy4(char *p1,char *p2) { while (*p2) *p1++=*p2++ ; } 14.下面程序段的运行结果是( )。 char a[ ]=”language” , *p ; p=a ; while (*p!=’u’) { printf(“%c”,*p-32); p++ ; } A.LANGUAGE B.language C.LANG D.langUAGE 15.以下与库函数strcmp(char *s,char *t)功能相等的程序段是( )。 A.strcmp1(char *s,char *t) { for ( ; *s++=*t++; ) if (*s= =’\0’) return 0 ; return (*s-*t) ; } B.strcmp2(char *s,char *t) { for ( ; *s++=*t++; ) if (!*s) return 0 ; return (*s-*t) ; } C.strcmp3(char *s,char *t) { for ( ; *t= =*s; ) { if (!*t) return 0 ; t++ ; s++ ; } return (*s-*t) ; } D.strcmp4(char *s,char *t) { for ( ; *s==*t; s++, t++ ) if (!*s) return 0 ; return (*t-*s) ; } 16.以下说明不正确的是( )。 A.char a[10]=”china” ; B.char a[10],*p=a; p=”china”; C.char *a; a=”china” ; D.char a[10],*p; p=a=”china”; 17.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙 述是( )。 A.a+1表示的是字符t的地址 B.p指向另外的字符串时,字符串的长度不受限制 C.p变量中存放的地址值可以改变 D.a中只能存放10个字符 18.若已定义char s[10];则在下面表达式中不表示s[1]的地址是( )。 A.s+1 B.s++ C.&s[0]+1 D.&s[1] 19.若有定义:int a[5],*p=a;则对a数组元素的正确引用是( )。 A.*&a[5] B.a+2 C.*(p+5) D.*(a+2) 20.若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是( )。 A.p+5 B.*a+1 C.&a+1 D.&a[0] 21.若有定义:int a[2][3];则对a数组的第i行第j列元素值的正确引用是( )。 A.*(*(a+i)+j) B.(a+i)[j] C.*(a+i+j) D.*(a+i)+j 22.若有定义:int a[2][3];则对a数组的第i行第j列元素地址的正确引用是( )。 A.*(a[i]+j) B.(a+i) C.*(a+j) D.a[i]+j 23.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素的正确引用是( )。 A.(p+1)[0] B.*(*(p+2)+1) C.*(p[1]+1) D.p[1]+2 24.若有定义:int a[5];则a数组中首元素的地址可以表示为( )。 A.&a B.a+1 C.a D.&a[1] 25.若有定义:int (*p)[4];则标识符p( )。 A.是一个指向整型变量的指针 B.是一个指针数组名 C.是一个指针,它指向一个含有四个整型元素的一维数组 D.定义不合法 26.以下与int *q[5];等价的定义语句是( )。 A.int q[5] B.int *q C.int *(q[5]) D.int (*q)[5] 27.以下正确的说明语句是( )。 A.int *b[]={1,3,5,7,9} ; B.int a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; C.int a[]={1,3,5,7,9}; int *num[5]={a[0],a[1],a[2],a[3],a[4]}; D.int a[3][4],(*num)[4]; num[1]=&a[1][3]; 28.若有定义:int b[4][6],*p,*q[4];且0≤i<4,则不正确的赋值语句是( )。 A.q[i]=b[i]; B.p=b; C.p=b[i]; D.q[i]=&b[0][0] 29.若要对a进行自减运算,则a应有下面说明( )。 A.int p[3]; int *a=p; B.int k; int *a=&k; C.char *a[3]; D.int b[10]; int *a=b+1; 30.以下选项中,对指针变量p的正确操作是( )。 A.int a[3], *p; p=&a; B.int a[5], *p; p=a; C.int a[5]; int *p=a=100; D.int a[5] ;int *p1,*p2=a; *p1=*p2; 31.若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是 ( )。 A.x[3] B.p1=x+3,*p1++ C.p1=x+2,*(p1++) D.p1=x+2,*++p1 32.下面程序段的输出是( )。 int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k; for (k=01; k<4; k++) q[k]=&a[k*3]; printf(“%d\n”,q[3][0]); A.8 B.16 C.20 D.输出不合法 33.若要对a进行自增运算,则a应具有下面说明( )。 A.int a[3][2]; B.char *a[ ]={“12”,”ab”}; C.char (*a) [3] D.int b[10], *a=b; 34.若有定义int a[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围 内)地址的表达式( )。 A.&a[0][0]+6*i+j B.&a[0][0]+4*j+i C.&a[0][0]+4*i+j D.&a[0][0]+6*j+I 35.下面程序的运行结果是( )。 main ( ) { int x[5]={2,4,6,8,10}, *p, **pp ; p=x , pp = &p ; printf(“%d”,*(p++)); printf(“%3d”,**pp); } A.4 4 B.2 4 C.2 2 D.4 6 36.若有定义int x[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)+2 C.*(*(p+5)) D.*(*(p+1)+2) 37.若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则 language[2]的值是( )。 A.一个字符 B.一个地址 C.一个字符串 D.一个不定值 38.设有定义:char *cc[2]={“1234”,”5678”};则正确的叙述是( )。 A.cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址 B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 C.cc是指针变量,它指向含有两个数组元素的字符型一维数组 D.cc元素的值分别维”1234”和”5678” 39.已有定义int (*p)( );指针p可以( )。 A.代表函数的返回值 B.指向函数的入口地址 C.表示函数的类型 D.表示函数返回值的类型 40.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是 ( A )。 A.p=max; B.p=max(a,b); C.*p=max; D.*p=max(a,b); 41.以下正确的叙述是( )。 A.C语言允许main函数带形参,且形参个数和形参名均可由用户指定 B.C语言允许main函数带形参,形参名只能是argc和argv C.当main函数带有形参时,传给形参的值只能从命令行中得到 D.若有说明: int main(int argc,char **argv),则argc的值必须大于1 二丶程序阅读题 1.写出下面程序的运行结果。 func(char *s,char a,int n) { int j; *s=a; j=n ; while (*s=0; j--) printf(“%s\n”,*(p--)) ; } 三、编程题 1.定义3个整数及整数指针,仅用指针方法按由小到大的顺序输出。 2.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数 对换。写三个函数:①输入10个数;②进行处理;③输出10个数。所有函数的 参数均用指针。 3.编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出 其长度。 4.编写一个函数(参数用指针)将一个3×3矩阵转置。 例:4×4矩阵转置 1 2 3 4 1 5 3 4 5 6 7 8 -> 2 6 2 7 3 2 5 9 3 7 5 2 4 7 2 3 4 8 9 3 5.利用指向行的指针变量求5×3数组各行元素之和。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档