《2022年C语言指针练习答案讲解.docx》由会员分享,可在线阅读,更多相关《2022年C语言指针练习答案讲解.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆第七章 指针71 挑选题1 如有说明: int a=2, *p=&a, *q=p;,就以下非法的赋值语句是(D);A p=q; B *p=*q; C a=*q; D q=a; a 是整型数,int *p,*q 定义了指针,p,q 是指向整型的指针;p 取得 a 的地址,而 q 取得 p 的地址p,q 是指针(也就是一个地址),而*p 和*q 是这个指针指向的整型数值 (存放在这个地址的值);A)把 q 的地址赋给 p,就 p 和 q 完全一样了,都指向一个数 2 B)把 q 中数据个
2、 p C)把 q 中数据给 a D)a 中数据是 2,不能够给一个地址;除非 *q=a 2 如定义: int a=511, *b=&a;,就 printf%dn, *b; 的输出结果为: D A 无确定值 B a 的地址 C 512 D 511 int a=511,*b=&a; a 是整形变量b 是整形指针变量,指向 a printf%dn,*b; 就是输出指针变量 b ,所指变量的值输出结果 511 3 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是 (B);A a=*p1+*p2; B p1=a; C p1=p2; D a=*p1*p2; 47、已
3、知在程序中定义了如下的语句:int *P1,*P2; int k; p1=&k;p2=&k; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆就以下语句中不能正确执行是( B )A、k=*P1+*P2; B 、p2=k; C 、P1=P2; D 、K=*P1 * *P2; P1 P2 是指针, K 是整型变量,变量怎么可以赋值给指针呢?A其实是执行了 K=K+K(P1和 P2都指向
4、K,所以 *P1 *P2 其实都是指 K)C是赋值语句D其实执行了 K=K*K 4 变量的指针,其含义是指该变量的(B); 一个标志A 值 B 地址 C 名 D5 如有说明语句: int a, b, c, *d=&c;,就能正确从键盘读入三个整数分别赋给变量 a、b、c 的语句是( A);A scanf%d%d%d, &a, &b, d; B scanf%d%d%d, a, b, d; C scanf%d%d%d, &a, &b, &d; D scanf%d%d%d, a, b,*d; 对于 int c,*d=&c;,c 是一整型数据, d 是一指针,它指向变量 c(即 d=&c,*是指针类型
5、的说明符 , 所以,输入 c 的值可以用 scanf%d,&c; 也可以用scanf%d,d; 6 如已定义 int a=5; 下面对( 1)、(2)两个语句的正确说明是(D);1 int *p=&a; 2 *p=a; A 语句( 1)和( 2)中的 *p 含义相同,都表示给指针变量 p 赋值;B 1 和2 语句的执行结果,都是把变量 a 的地址值赋给指针变量 p;C 1 在对 p 进行说明的同时进行初始化,使 p 指向 a;2 变量 a 的值赋给指针变量 p;D 1 在对 p 进行说明的同时进行初始化,使 p 指向 a; 2 将变量 a 的值给予 *p;A:1:*p, 定义 p 为 int
6、类型指针( 2):*p, 表示 p 所指向的变量B(1)把变量 a 的地址赋给指针变量 指向的变量p(2)把变量 a 的值,赋值给 P 所C前半句正确,后半句错误, (2)是把变量 a 的值赋值给 P 所指的变量;细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆7 如有语句 int *p, a=10; p=&a; 下面均代表地址的一组选项是(D);A a, p, *&a B &*a,
7、 &a, *p C *&p, *p, &a D &a, &*p, p int *p 是定义一个指针, p=&a ,p 指向 a 的地址, *p=a, * 指针名 是指取该指针所指地址中的内容,&a 为 a 的地址, &*p=&a,p 中放的为 a 的地址8 如需要建立如下列图的储备结构,且已有说明double *p, x=0.2345; 就正确的赋值语句是(); B A p=x; B p=&x; C *p=x; D *p=&x; 9 如有说明: int *p, a=1, b; 以下正确的程序段是( B);A p=&b; B scanf%d, &b; scanf%d, &p; *p=b; C p
8、=&b; D p=&b; scanf%d, *p; *p=a; A,B 中 p 是 b 的地址 那么假如要输入 b 应当是 scanf%d, p; C中 p 仍没定义 给*p 赋值就是给一个没有开创的地址赋值了D是正确的 意思是 p 为 b 的地址,将 p 地址上的数变成 a, 等价于 b=a 10有如下语句: int m=6, n=9, *p, *q; p=&m; q=&n; 如图 1 所示,如要实现 A下图所示的储备结构,可选用的赋值语句是(C); *p=*q; B p=*q; C p=q; D *p=q; 11以下程序中调用 scanf 函数给变量 a 输入数值的方法是错误的, 其错误缘
9、由 是( B); #include main 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆int *p, *q, a, b; p=&a; printfinput a:; scanf%d, *p; A *p 表示的是指针变量 p 的地址 B *p 表示的是变量 a 的值,而不是变量 a 的地址 C *p 表示的是指针变量 p 的值 D *p 只能用来说明 p 是一个指针变量 sca
10、nf 后面的参数是地址,是接收的值放到这个地址 12下面程序的功能是从输入的十个字符串中找出最长的那个串;请在_ 处填空; #include stdio.h #include string.h #define N 10 main char sN81, * t; int j; for j=0; jN; j+ gets sj; t= *s; for j=1; jN; j+ if strlentstrlensj _A_; printfthe max length of ten strings is: %d, %sn, strlent, t; A t=sj B t=&sj C t= s+ D t=sj
11、0 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆13下面判定正确选项( C);A char *s=girl; 等价于 char *s; *s=girl; Bchar s10=girl; 等 价 于char s10; s10=girl; C char *s=girl; 等价于 char *s; s=girl; D char s4= boy, t4= boy; 等价于char s4=
12、t4= boy 14设 char *s=ta017bc;就指针变量 s 指向的字符串所占的字节数是 (C);A 9 B 5 C 6 D 7 第一,字节数不是指字符串长度,字符串长度比储备字节数少一;t 是一个转义字符相当于键盘“Tab”键 a 一般字符 017 转义字符 ASCII 代码值为 8 进制数 17 即 10 进制数 15 的那个符号 b 一般字符 c 一般字符 字符串终止标志0 s 是字符串类型;每一个都是 char 型变量;8,也就是一个字节,所以指针变量 s 指向的 char 型变量的二进制长度是 字符串所占字节数是 6 ,字符串长度是 5. 15下面程序段中, for 循环的
13、执行次数是( C); char *s=ta018bc; for ;*s.=0;s+ printf*; A); 6 D 7 t a 018 b c 0各一次A 9 B 5 C16以下不能正确进行字符串赋初值的语句是(A. char str5= good.; B char *str=good.; C. char str=good.; D char str5=g, o,o, d; 1 A.char str5=good.;/ 始化是这样写的:这个不符合 C语言的语法规定,字符串初细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 21 页 - - -
14、 - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆char str6=good.; / 因最终仍有一个终止符,因此数组元素应当是6个;2 题目表述有些不精确 C,D 叫初始化, B 叫赋值;的;3 题目中的单双引号全部是中文的,这也不符合 C语言语法; 应当改为英文17如指针 p 已正确定义, 要使 p 指向两个连续的整型动态储备单元,不正确的 语句是( A);A p=2*int *mallocsizeofint; B p=int *malloc2*sizeofint; C p=int *malloc2*2
15、; D p=int*calloc2, sizeofint; malloc 的全称是 memory allocation,中文叫动态内存安排,当无法知道内存详细位置的时候, 想要绑定真正的内存空间, 就需要用到动态的安排内存;18下面程序段的运行结果是(C);char *s=abcde; s+=2; printf%d, s; A cde B 字符c C 字符 c 的地址 D 无确定的输出结果19设有如下的程序段: char s=girl, *t; t=s;就以下表达正确选项 (D);A s 和 t 完全相同 B 数组 s 中的内容和指针变量 t 中的内容相等 C s 数组长度和 t 所指向的字符
16、串长度相等 D *t 与 s0 相等 20以下正确的程序段是( B); char *s; A char s20; B scanf%s, &s; scanf%s, s; C char s20; D char s20, *t=s; 细心整理归纳 精选学习资料 scanf%s, &s2; scanf%s, t2; 第 6 页,共 21 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆21下面程序段的运行结果是(C);#include st
17、dio.h main int m=10, n=20; char *format=%s, m=%d, n=%dn; m*=n; printfformat, m*=n, m,n; A format, m*=n, m, n B C m*=n, m=200, n=20 D 22以下与库函数 strcpychar *p, char *q A strcpy1char *p, char *q while *p+=*q+.=0; B strcpy2 char *p, char *q while*p=*q.=0 p+; q+; C strcpy3char *p, char *q while *p+=*q+; D
18、 strcpy4 char *p, char *q while*p *p+=*q+; 23下面程序段的运行结果是(C);#include stdio.h main format, m*=n 以上结果都不对功能不相等的程序段是( D);细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆 char s=example., *t; t=s; while *t.=p printf%c, *t-
19、32; t+; AEXAMPLE. B example. CEXAM D example. 24以下正确的程序段是( C);A char s=12345, t=6543d21; strcpy s,t; B char s20, *t=12345; strcats,t; C char s20= , *t=12345; strcats, t; D char *s=12345, *t=54321; strcat s,t; 25以下与库函数 strcmpchar *s, chat *t的功能不相等的程序段是(D);A strcmp1 char *s, chat *t for ;*s+=*t+ ; if
20、*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+; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆 r
21、eturn *s-*t; D strcmp4 char *s, char *t for ;*s=*t ;s+,t+ if .*s return 0; return *t-*s; 26如有以下定义和语句:int s45, *ps5; ps=s; 就对 s 数组元素的正确引用形式是(C); *ps+1+3 A ps+1 B *ps+3 C ps02 D27不合法的 main 函数命令行参数表示形式是: (B);A main int a, char *c B mainint argc, char *argv C main int arc, char *arv D char*argc main int
22、 argv, 28如有说明语句: char s=it is a example, *t=it is a example.;就以下不正确的表达( B);A s 表示的是第一个字符i 的地址, s+1 表示的是其次个字符t 的地址B t 指向另外的字符串时,字符串的长度不受限制 C t 变量中存放的地址值可以转变 D s 中只能存放 16 个字符 29如已定义 char s10; 就在下面表达式中不表示 s1 地址的是( B); &s0+1 D &s1 A s+1 B s+ C30下面程序段的运行结果是( #include stdio.h main char s6; A);(注: 代表空格)细心整
23、理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆s=abcd; printf%sn, s; A abcd B abcd C abcd D 编译出错31执行以下程序后, a 的值为【 1】, b 的值为【 2】;#include main int a, b, k=4, m=6, *p=&k, *q=&m; a=p=&m; b=-*p/*q+7; printfa=%dn, a; printfb
24、=%dn, b; 【1】 A -1 B 1 C 0 D 4 7 D 10 【2】 A 5 B 6 C 32下面程序的功能是将字符串 s 的全部字符传送到字符串 t 中,要求每传递三 个字符后再存放一个空格, 例如字符串 s 为abcdefg ,就字符串 t 为abc def g, 请挑选填空; C A #include stdio.h #include string.h main int j, k=0; char s60, t100, *p; p=s; getsp; while*p 细心整理归纳 精选学习资料 for j=1; j=3 & *p; 【1】 tk=*p; 第 10 页,共 21
25、页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆if 【2】 tk= ; k+; tk=0; putst; 【 1】Ap+ Bp+,k+ Cp+, k+, j+ D k+, j+ 【 2 】A j=4 B *p=0 C .*p D j.=4 33下面程序的功能是将八进制正整数字符串转换为十进制整数;请挑选填空;错题 AB #include stdio.h #include string.h main char *t, s8; int
26、 n; t=s; getst; n= 【1】; while 【2】.= 0 n=n*8+*t-0; printf%dn, n; 【 1 】 A0 B*t C*t-0 D *t+0 【2】A *t B *t+ C *+t D t 34下面程序的功能是在字符串 s 中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后次序移动,如:boy&girl 变成 ybo&girl ;请挑选填 空;BC 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - -
27、- - - - - - - - - -学而不思就惘,思而不学就殆#include stdio.h #include string.h main char s80, *t, max, *w; t=s; getst; max=*t+; while *t.=0 if maxs Bt=s C*ts0 D *t=s0 【 2 】 At+ Bs- Ct- D w- 35以下程序的功能是删除字符串s 中的全部空格(包括TAB符、回车符),请填空; AC #include stdio.h 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 21 页 - -
28、 - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆 #include string.h #include ctype.h main char s80; getss; delspaces; putss; delspacechar *t int m, n; char c80; form=0, n=0; 【1】; m+ 语言供应的库函数,用以判定字符是否为 if .isspace【2】 /*C空格 */ cn=tm; n+; cn=0; strcpyt, c; 【 1 】 Atm B.tm Ctm=0 D t
29、m=0 【 2 】 At+m B*cm C*t+m D *c+m 36下面程序的功能是统计字串sub 在母串 s 中显现的次数;请挑选填空;BC #include stdio.h 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 13 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆 #include string.h main char s80, sub80; int n; getss; getssub; printf%dn, cou
30、nts,sub; int count char *p, char *q int m, n, k, num=0; for m=0; pm; m+ for 【1】, k=0; qk=pn; k+, n+ ifq【2】=0 num+; break; return num; 【1】A n=m+1 B n=m C n=0 D n=1 【2】A k B k+ C k+1 D +k 37以下程序的输出结果是(C);#include stdio.h main int a=1,2,3,4,5,6,7,8,9,0, *p; p=a; printf%dn, *p+9; 细心整理归纳 精选学习资料 A0 B1 C10
31、 第 14 页,共 21 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆D 9 38以下程序的输出结果是(C);#include stdio.h char ccharchar ch if ch=A & ch=b1 strcpyb2, pb; printf%dn, strlenb2; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 15 页,共 21 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学而不思就惘,思而不学就殆 A 8 B 3 C 1 D 7 40有以下程序 #include string.h #include stdio.h main char *p=abcde0fghjik0; printf%dn, strlenp; 程序运行后的输出结果是(D); 6 D 5 A 12 B 15 C41有以下程序 void ss char *s, char t while *s if *s=t *s=t-a+A; s+; main char st