1、. .指针主要容的习题及答案一选择题1.变量的指针,其含义是指该变量的B。A值 B地址 C名 D一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是B。Ak=*ptr1+*ptr2 Bptr2=k Cptr1=ptr2 Dk=*ptr1*(*ptr2)3.假设有说明:int *p,m=5,n;以下程序段正确的选项是D。Ap=&n ; Bp = &n ; scanf(“%d,&p); scanf(“%d,*p);Cscanf(“%d,&n); Dp = &n ; *p=n ; *p = m ;4.已有变量定义和函数调
2、用语句:int a=25;print_value(&a);下面函数的输出结果是D。void print_value(int *x) printf(“%dn,+*x); A23 B24 C25 D265.假设有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是C。Ap1=&m; p2=&p1 ; Bp1=&m; p2=&n; *p1=*p2 ;Cp1=&m; p2=p1 ; Dp1=&m; *p1=*p2 ;6.假设有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是D。Aa,p,*&a B&*a,&a,*p C*&p,*p,&a D&a,&*p,p7.下面
3、判断正确的选项是C。Achar *a=china; 等价于 char *a; *a=china ;Bchar str10=“china; 等价于 char str10; str =“china;Cchar *s=china; 等价于 char *s; s=china ;Dchar c4=abc,d4=abc; 等价于 char c4=d4=abc ;8.下面程序段中,for循环的执行次数是C。char *s=ta018bc ;for ( ; *s!=0 ; s+) printf(“*) ;A9 B7 C6 D59.下面能正确进展字符串赋值操作的是C。Achar s5=“ABCDE; Bchar
4、 s5=A,B,C,D,E;Cchar *s ; s=ABCDE ; Dchar *s; scanf(“%s,s) ;10.下面程序段的运行结果是C。char *s=abcde ;s+=2 ; printf(“%d,s);Acde B字符c C字符c的地址 D不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,那么以下不能正确执行的赋值语句是B。Ac=*p1+*p2 Bp2=c Cp1=p2 Dc=*p1*(*p2)12.设有程序段:char s =china; char *p ; p=s ;那么下面表达正确的选项是D。As和p完全一样B数组s中的容和指针变量p中的容相等Cs数
5、组长度和p所指向的字符串长度相等D*p与s0相等13.以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是D。Astrcpy1(char *p1,char *p2) while (*p1+=*p2+)!=0) ; Bstrcpy2(char *p1,char *p2) while (*p1=*p2)!=0) p1+; p2+ Cstrcpy3(char *p1,char *p2) while (*p1+=*p2+) ; Dstrcpy4(char *p1,char *p2) while (*p2) *p1+=*p2+ ; 14.下面程序段的运行结果是C。 char
6、 a =language , *p ; p=a ; while (*p!=u) printf(“%c,*p-32); p+ ; ALANGUAGE Blanguage CLANG DlangUAGE16.以下与库函数strcmp(char *s,char *t)功能相等的程序段是C。Astrcmp1(char *s,char *t) for ( ; *s+=*t+; )if (*s=0) return 0 ;return (*s-*t) ; Bstrcmp2(char *s,char *t) for ( ; *s+=*t+; ) if (!*s) return 0 ;return (*s-*t
7、) ; Cstrcmp3(char *s,char *t) for ( ; *t=*s; ) if (!*t) return 0 ; t+ ; s+ ; return (*s-*t) ; Dstrcmp4(char *s,char *t) for ( ; *s=*t; s+, t+ ) if (!*s) return 0 ;return (*t-*s) ; 17.以下说明不正确的选项是D。Achar a10=china ; Bchar a10,*p=a; p=china;Cchar *a; a=china ; Dchar a10,*p; p=a=china;18.设有说明语句:char a=I
8、t is mine;char *p=It is mine;那么以下不正确的表达是D。Aa+1表示的是字符t的地址 Bp指向另外的字符串时,字符串的长度不受限制Cp变量中存放的地址值可以改变Da中只能存放10个字符19.假设已定义char s10;那么在下面表达式中不表示s1的地址是B。As+1 Bs+ C&s0+1 D&s120.假设有定义:int a5,*p=a;那么对a数组元素的正确引用是D。A*&a5 Ba+2 C*(p+5) D*(a+2)21.假设有定义:int a5,*p=a;那么对a数组元素地址的正确引用是D。Ap+5 B*a+1 C&a+1 D&a022.假设有定义:int a
9、23;那么对a数组的第i行第j列元素值的正确引用是 A。A*(*(a+i)+j) B(a+i)j C*(a+i+j) D*(a+i)+j23.假设有定义:int a23;那么对a数组的第i行第j列元素地址的正确引用是D。A*(ai+j) B(a+i) C*(a+j) Dai+j24.假设有程序段:int a23,(*p)3; p=a;那么对a数组元素地址的正确引用是。A*(p+2) Bp2 Cp1+1 D(p+1)+225.假设有程序段:int a23,(*p)3; p=a;那么对a数组元素的正确引用是C。A(p+1)0 B*(*(p+2)+1) C*(p1+1) Dp1+226.假设有定义:
10、int a5;那么a数组中首元素的地址可以表示为C。A&a Ba+1 Ca D&a127.假设有定义:int (*p)4;那么标识符pC。A是一个指向整型变量的指针B是一个指针数组名C是一个指针,它指向一个含有四个整型元素的一维数组D定义不合法28.以下与int *q5;等价的定义语句是C。Aint q5 Bint *q Cint *(q5) Dint (*q)529.以下正确的说明语句是B。Aint *b=1,3,5,7,9 ;Bint a5,*num5=&a0,&a1,&a2,&a3,&a4;Cint a=1,3,5,7,9; int *num5=a0,a1,a2,a3,a4;Dint a
11、34,(*num)4; num1=&a13;30.假设有定义:int b46,*p,*q4;且0i4,那么不正确的赋值语句是D。Aqi=bi; Bp=b; Cp=bi; Dqi=&b0032.假设要对a进展自减运算,那么a应有下面说明D。Aint p3; Bint k; Cchar *a3 Dint b10; int *a=p; int *a=&k; int *a=b+1;33.以下选项中,对指针变量p的正确操作是B。Aint a3, *p; Bint a5, *p; Cint a5; Dint a5p=&a; p=a; int *p=a=100; int *p1,*p2=a; *p1=*p2
12、;34.假设有定义:int x10=0,1,2,3,4,5,6,7,8,9,*p1;那么数值不为3的表达式是C。Ax3 Bp1=x+3,*p1+Cp1=x+2,*(p1+) Dp1=x+2,*+p135.下面程序段的输出是C。int a =2,4,6,8,10,12,14,16,18,20,22,24,*q4,k;for (k=01; k4; k+) qk=&ak*3;printf(“%dn,q30);A8 B16 C20 D输出不合法36.假设要对a进展自增运算,那么a应具有下面说明D。Aint a32; Bchar *a =“12,ab;Cchar (*a) 3 Dint b10, *a=
13、b;37.假设有定义int a46;那么能正确表示a数组中任一元素aiji,j均在有效围地址的表达式A。A&a00+6*i+j B&a00+4*j+iC&a00+4*i+j D&a00+6*j+I38.下面程序的运行结果是B。main ( ) int x5=2,4,6,8,10, *p, *pp ; p=x , pp = &p ; printf(“%d,*(p+); printf(“%3d,*pp);A4 4 B2 4 C2 2 D4 639.假设有定义int x43=1,2,3,4,5,6,7,8,9,10,11,12; int (*p)3=x ; 那么能够正确表示数组元素x12的表达式是D
14、。A*(*p+1)2) B(*p+1)+2C*(*(p+5) D*(*(p+1)+2)40.假设有说明:char *language=“FORTRAN,BASIC,PASCAL,JAVA,C;那么language2的值是B。A一个字符 B一个地址 C一个字符串 D一个不定值41.设有定义:char *cc2=“1234,5678;那么正确的表达是A。Acc数组的两个元素中各自存放了字符串1234和5678的首地址Bcc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址Ccc是指针变量,它指向含有两个数组元素的字符型一维数组Dcc元素的值分别维1234和567842.已有定义int (
15、*p)( );指针p可以B。A代表函数的返回值 B指向函数的入口地址C表示函数的类型 D表示函数返回值的类型43.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是A。Ap=max; Bp=max(a,b); C*p=max; D*p=max(a,b);44.假设有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是C或 p(a,b)。A(*p)max(a,b) B*pmax(a,b); C(*p)(a,b); D )*p(a,b);45.以下正确的表达是 C。AC语言允许main函数带形参,且形参个数和形参名均可由用户指定B
16、C语言允许main函数带形参,形参名只能是argc和argvC当main函数带有形参时,传给形参的值只能从命令行中得到D假设有说明: int main(int argc,char *argv),那么argc的值必须大于1三程序阅读题1.写出下面程序的运行结果。 5func(char *s,char a,int n) int j; *s=a; j=n ; while (*ssj) j- ; return j;main ( ) char c6 ; int i ; for (i=1; i=5 ; i+) *(c+1)=A+i+1; printf(“%dn,func(c,E,5);2.写出下面程序的运
17、行结果。 6fun (char *s) char *p=s; while (*p) p+ ; return (p-s) ;main ( ) char *a=abcdef ; printf(“%dn,fun(a) ;3.写出下面程序的运行结果。 abcdefglkjihsub(char *a,int t1,int t2) char ch; while (t1t2) ch = *(a+t1); *(a+t1)=*(a+t2) ; *(a+t2)=ch ; t1+ ; t2- ; main ( ) char s12; int i; for (i=0; i12 ; i+) si=A+i+32 ; su
18、b(s,7,11); for (i=0; i12 ; i+) printf (“%c,si); printf(“n);4.当运行以下程序时,写出输入 6的程序运行结果。 976531sub(char *a,char b) while (*(a+)!=0) ; while (*(a-1)=0; j-) printf(“%sn,*(p-) ;四程序填空题1.下面函数的功能是从输入的十个字符串中找出最长的那个串,请填(2)空使程序完整。void fun(char str1081,char *sp) int i; *sp = 【1str0】; for (i=1; i10; i+) if (strlen
19、 (*sp)strlen(stri) 【2*sp=stri】;2.下面函数的功能是将一个整数字符串转换为一个整数,例如:-1234转换为1234,请填(3)空使程序完整。int chnum(char *p) int num=0,k,len,j ; len = strlen(p) ; for ( ; 【1*p!=0】; p+) k=【2*p-0】; j=(-len) ; while (【3 j-!=0】) k=k*10 ; num = num + k ; return (num);3.下面函数的功能使统计子串substr在母串str中出现的次数,请填(3)空使程序完整。int count(cha
20、r *str, char *substr) int i,j,k,num=0; for ( i=0; 【1stri!=0】; i+) for (【2j=i】, k=0; substrk=strj; k+; j+) if (substr 【3k】=0) num+ ; break ; return (num) ;6.下面函数的功能是将两个字符串s1和s2连接起来,请填(2)空使程序完整。void conj(char *s1,char *s2) while (*s1) 【1s1+】; while (*s2) *s1=【2*s2】; s1+,s2+; *s1=0 ;五编程题1.定义3个整数及整数指针,仅
21、用指针方法按由小到大的顺序输出。2.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:输入10个数;进展处理;输出10个数。所有函数的参数均用指针。3.编写一个求字符串的函数参数用指针,在主函数中输入字符串,并输出其长度。4.编写一个函数参数用指针将一个33矩阵转置。5.写函数原型为int strcmp(char *s1,char *s2);的函数,该函数实现两个字符串的比较函数功能描述参见教材P137,strcmp字符串处理函数。6.利用指向行的指针变量求53数组各行元素之和。教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。. .word.zl.