《2022年c语言指针习题及答案02099资料讲解.pdf》由会员分享,可在线阅读,更多相关《2022年c语言指针习题及答案02099资料讲解.pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、c 语 言 指 针 习 题 及 答案 02099精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 13 页 - - - - - - - - - - 指针习题及答案一选择题1. 变量的指针,其含义是指该变量的 B 。A)值 B)地址 C)名 D)一个标志2. 已有定义 int k=2;int *ptr1,*ptr2;且 ptr1 和 ptr2 均已指向变量 k,下面不能正确执行的赋值语句是 B 。A)k=*ptr1+*ptr2 B )ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*p
2、tr2) 3. 若有说明: int *p,m=5,n;以下程序段正确的是 D 。A)p=&n ; B)p = &n ; scanf(“ %d” ,&p); scanf(“ %d” ,*p); C)scanf(“ %d” ,&n); D)p = &n ; *p=n ; *p = m ; 4. 已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。void print_value(int *x) printf( “ %dn” ,+*x); A)23 B)24 C)25 D)26 5. 若有说明: int *p1, *p2,m=5,n;以下均是正确
3、赋值语句的选项是C 。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;下面均代表地址的一组选项是D 。A)a,p,*&a B)&*a,&a,*p C )*&p,*p,&a D )&a,&*p,p 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 13 页 - - - - - - - - - - 7. 下面判断正确的是 C 。A)c
4、har *a=” china” ; 等价于 char *a; *a=” china” ; B)char str10= “ china” ; 等价于 char str10; str = “ china” ; C)char *s=” china” ; 等价于 char *s; s=” china” ; D)char c4=” abc” ,d4=” abc” ; 等价于 char c4=d4= ” abc” ; 8. 下面程序段中, for 循环的执行次数是 C 。char *s=” ta018bc” ; for ( ; *s!= 0 ; s+) printf(“ *” ) ; A)9 B)7 C)
5、6 D)5 9. 下面能正确进行字符串赋值操作的是 C 。A)char s5=“ ABCDE ” ; B)char s5= A , B , C , D , E ; C)char *s ; s=” ABCDE ” ; D)char *s; scanf(“ %s” ,s) ; 10. 下面程序段的运行结果是 C 。char *s=” abcde ” ; s+=2 ; printf(“ %d” ,s); A)cde B )字符 c C)字符 c 的地址 D)不确定11. 设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是 B 。A)c=*p1+*p2 B
6、 )p2=c C)p1=p2 D)c=*p1*(*p2) 12. 设有程序段 : char s =” china” ; char *p ; p=s ;则下面叙述正确的是D 。A)s和 p完全相同B)数组 s中的内容和指针变量p 中的内容相等C)s数组长度和 p所指向的字符串长度相等精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 13 页 - - - - - - - - - - D)*p 与 s0相等13. 以下与库函数 strcpy(char *p1,char *p2)功能不相等的程序段是D
7、。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. 下面程序段的运行结果是 C 。char a =” language ” , *p ; p=a ; while (*p!= u ) printf( “ %c”
8、 ,*p-32); p+ ; A)LANGUAGE B )language C )LANG D)langUAGE 16. 以下与库函数 strcmp(char *s,char *t)功能相等的程序段是C 。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 *
9、t) for ( ; *t= =*s; ) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 13 页 - - - - - - - - - - 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) ; 17. 以下说明不正确的是 D 。A)char a10=” china” ; B )
10、char a10,*p=a; p=” china” ; C)char *a; a=” china” ; D)char a10,*p; p=a=” china” ; 18. 设有说明语句: char a=”It is mine”;char *p= ”It is mine”; 则以下不正确的叙述是 D 。A)a+1表示的是字符 t 的地址B)p 指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放 10个字符19. 若已定义 char s10;则在下面表达式中不表示s1 的地址是B 。A)s+1 B)s+ C)&s0+1 D)&s1 20. 若有定义: int
11、a5,*p=a;则对 a 数组元素的正确引用是D 。A)*&a5 B )a+2 C)*(p+5) D)*(a+2) 21. 若有定义: int a5,*p=a;则对 a 数组元素地址的正确引用是D 。A)p+5 B)*a+1 C)&a+1 D)&a0 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 13 页 - - - - - - - - - - 22. 若有定义: int a23;则对 a 数组的第 i 行第 j 列元素值的正确引用是A 。A)*(*(a+i)+j) B )(a+i)j C)
12、*(a+i+j) D )*(a+i)+j 23. 若有定义 :int a23;则对 a 数组的第 i 行第 j 列元素地址的正确引用是D 。A)*(ai+j) B )(a+i) C)*(a+j) D)ai+j 24. 若有程序段 :int a23,(*p)3; p=a;则对 a 数组元素地址的正确引用是。A)*(p+2) B)p2 C)p1+1 D)(p+1)+2 25. 若有程序段 :int a23,(*p)3; p=a;则对 a 数组元素的正确引用是C 。A)(p+1)0 B)*(*(p+2)+1) C )*(p1+1) D )p1+2 26. 若有定义 :int a5;则 a 数组中首元
13、素的地址可以表示为C 。A)&a B)a+1 C)a D)&a1 27. 若有定义 :int (*p)4;则标识符 p C 。A)是一个指向整型变量的指针B)是一个指针数组名C)是一个指针,它指向一个含有四个整型元素的一维数组D)定义不合法28. 以下与 int *q5;等价的定义语句是 C 。A)int q5 B)int *q C)int *(q5) D )int (*q)5 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 13 页 - - - - - - - - - - 29. 以下正确的
14、说明语句是 B 。A)int *b=1,3,5,7,9 ; B)int a5,*num5=&a0,&a1,&a2,&a3,&a4; C)int a=1,3,5,7,9; int *num5=a0,a1,a2,a3,a4; D)int a34,(*num)4; num1=&a13; 30. 若有定义 :int b46,*p,*q4;且 0i4, 则不正确的赋值语句是D 。A)qi=bi; B )p=b; C)p=bi; D)qi=&b00 32. 若要对 a 进行自减运算,则 a 应有下面说明 D 。A)int p3; B)int k; C)char *a3 D)int b10; int *a=
15、p; int *a=&k; int *a=b+1; 33. 以下选项中,对指针变量p 的正确操作是 B 。A)int a3, *p; B )int a5, *p; C)int a5; D)int a5 p=&a; p=a; int *p=a=100; int *p1,*p2=a; *p1=*p2; 34. 若有定义 :int x10=0,1,2,3,4,5,6,7,8,9,*p1;则数值不为 3 的表达式是 C 。A)x3 B)p1=x+3,*p1+ C)p1=x+2,*(p1+) D)p1=x+2,*+p1 35. 下面程序段的输出是 C 。int a =2,4,6,8,10,12,14,1
16、6,18,20,22,24,*q4,k; for (k=01; k4; k+) qk=&ak*3; printf( “ %dn” ,q30); A)8 B)16 C)20 D)输出不合法36. 若要对 a 进行自增运算,则 a 应具有下面说明 D 。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 13 页 - - - - - - - - - - A)int a32; B)char *a = “ 12” ,” ab” ; C)char (*a) 3 D)int b10, *a=b; 37. 若有
17、定义 int a46;则能正确表示 a 数组中任一元素 aij(i,j均在有效范围内)地址的表达式 A 。A)&a00+6*i+j B )&a00+4*j+i C)&a00+4*i+j D )&a00+6*j+I 38. 下面程序的运行结果是 B 。main ( ) int x5=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 39. 若有定义 int x43=1,2,3,4,5,6,7,8,9,10,11,12; int (*p)3=
18、x ; 则能够正确表示数组元素 x12 的表达式是 D 。A)*(*p+1)2) B )(*p+1)+2 C)*(*(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 。A)cc数组的两个元素中各自存放了字符串” 1234” 和” 5678” 的首地址精品资料 - -
19、- 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 13 页 - - - - - - - - - - B)cc 数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C)cc是指针变量,它指向含有两个数组元素的字符型一维数组D)cc元素的值分别维 ” 1234” 和” 5678”42. 已有定义 int (*p)( );指针 p 可以 B 。A)代表函数的返回值 B )指向函数的入口地址C)表示函数的类型 D )表示函数返回值的类型43. 已有函数 max(a,b) ,为了让函数指针变量p指向函数 max ,
20、正确的赋值方法是 A 。A)p=max; B)p=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 。A)C 语言允许 main函数带形参,且形参个数和形参名均可由用户指定B)C 语言允许 main函数带形参,形参名只能是argc和 argv C)当 main 函数带有形参时,传给形参的值只能从命令行中
21、得到D)若有说明 : int main(int argc,char *argv),则 argc的值必须大于 1 三程序阅读题1. 写出下面程序的运行结果。 5 func(char *s,char a,int n) int j; *s=a; j=n ; while (*ssj) j - ; return j; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 13 页 - - - - - - - - - - main ( ) char c6 ; int i ; for (i=1; i=5 ; i+
22、) *(c+1)= A +i+1; printf(“ %dn” ,func(c, E ,5); 2. 写出下面程序的运行结果。 6 fun (char *s) char *p=s; while (*p) p+ ; return (p-s) ; main ( ) char *a=” abcdef” ; printf(“ %dn” ,fun(a) ; 3. 写出下面程序的运行结果。 abcdefglkjih sub(char *a,int t1,int t2) char ch; while (t1t2) ch = *(a+t1); *(a+t1)=*(a+t2) ; *(a+t2)=ch ; t1
23、+ ; t2- ; main ( ) char s12; int i; for (i=0; i12 ; i+) si= A +i+32 ; sub(s,7,11); for (i=0; i12 ; i+) printf ( “ %c” ,si); printf(“ n” ); 4. 当运行以下程序时,写出输入 6 的程序运行结果。 976531 sub(char *a,char b) while (*(a+)!= 0 ) ; while (*(a- 1)=0; j - ) printf(“ %sn” ,*(p- ) ; 四程序填空题1. 下面函数的功能是从输入的十个字符串中找出最长的那个串,请
24、填(2) 空使程序完整。void fun(char str1081,char *sp) int i; *sp = 【1 str0 】; for (i=1; i10; i+) if (strlen (*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) ; 精
25、品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 13 页 - - - - - - - - - - while (【3 j- !=0 】) k=k*10 ; num = num + k ; return (num); 3. 下面函数的功能使统计子串substr 在母串 str中出现的次数,请填 (3) 空使程序完整。int count(char *str, char *substr) int i,j,k,num=0; for ( i=0; 【1 stri!= 0】; i+) for (【2 j=
26、i 】, k=0; substrk= =strj; k+; j+) if (substr 【3 k 】= = 0 ) num+ ; break ; return (num) ; 6. 下面函数的功能是将两个字符串s1 和 s2 连接起来,请填 (2) 空使程序完整。void conj(char *s1,char *s2) while (*s1) 【1 s1+ 】; while (*s2) *s1= 【2 *s2 】; s1+,s2+; *s1= 0 ; 五编程题1. 定义 3 个整数及整数指针,仅用指针方法按由小到大的顺序输出。2. 输入 10 个整数,将其中最小的数与第一个数对换,把最大的数
27、与最后一个数对换。写三个函数:输入10 个数;进行处理;输出10 个数。所有函数的参数均用指针。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 13 页 - - - - - - - - - - 3. 编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出其长度。4. 编写一个函数(参数用指针)将一个3 3 矩阵转置。5. 写函数原型为 int strcmp(char *s1,char *s2);的函数,该函数实现两个字符串的比较(函数功能描述参见教材P137 ,strcmp 字符串处理函数)。6. 利用指向行的指针变量求5 3 数组各行元素之和。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 13 页 - - - - - - - - - -