专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C语言教程 » 指针数组:计算机二级考试答案 数组和指针 »正文

指针数组:计算机二级考试答案 数组和指针

来源: 发布时间:星期三, 2008年10月29日 浏览:94次 评论:0
第九章 数组和指针
一、 选择题
1、C. &和++的优先级是一样的,但是它们的结合方式是从右至左的,先执行aa[0]++,得到的结果是aa[0]的值加1,然后&(aa[0]++)&取的是前面所得结果的地址,不是aa[1]的地址,并且获得的地址是不确定的。
A、+的优先级比&的优先级高 D、aa数组名代表数组的首地址
2、D. *(a+i)已经实现了对数组元素a的引用
指针P指向数组的首地址,p-a=0,A答案实现了对数组元素a[0]的引用,B答案*(&a)中*代表取值,&代表取址,整个表达式相当于a
3、A.指针P指向数组的首地址,p+2即p[2]的地址,*(p+2)即取p[2]的值,由于数组元素下标是从零开始的,故p[2]=3
4、B.指针p指向数组元素a[3]的地址,即p指向元素4的地址,q指向的地址即为p指向的地址下移四个字节,指向的为a[5]的地址,故答案为a[3]+a[5]=4+6=10
5、C.第二条语句表示p指向数组元素a[1]的地址,即p[0]=4,第三条for循环语句实现的是y=p[1]+p[2]=6+8=14。
6、A.p指向数组首地址,for循环实现的是从p指向首地址开始取元素输出,依次指针p下移,指向数组元素a[1],输出a[1],指向数组元素a[2]输出a[2],直至a[9]。
7.(D)
解析:这四个选项,不同的地方是printf的输出数据列表,对于A,C选项,*和++的优先级相同,而结合方式是自右向左,故表达式*p++跟*(p++)是等价的,是对的。对于D选项,(*p)++等价于x[0]++,而不再是p指针自加,所以输出的结果是 2 3 4 5 6 7, 故D是错误的。
8.(A)
解析:int *q=NULL,表示q指针没有指向任何变量,它里面存放的内容是NULL值,所以不能将*(p+5)的值赋给q所指向的变量,因为q指针没有指向任何变量,所以答案是报错。
9.(D)
解析:(A)不能给指针用整型常数来赋值。(B)a[5]是数组的元素,不是数组元素的地址,所以不能赋值给指针p。(C)错误的地方与B选项相同。(D)是正确的,a是数组的首地址,a+2表示数组元素a[2]存放的地址,可以将它赋值给指针p。
10.(D)
解析:int *p=&a[3]表示指针p指向数组元素a[3],可以使用p[0]来表示p指针指向的内存单元,所以p[0]可以表示a[3]。则p[5]可以表示a[8],故b的值为9.
11.(B)
解析:s=x+3表示指针s指向数组元素x[3]。可以用s[0]来表示x[3],则s[2]表示x[5],故输出结果是0.
12.(C)
解析:*(t+i)等价于t,故s+=*(t+i)等价于 s=s+t ,在FOR循环语句中,每次执行i=i+2,s=s+t,实现的功能是将i为偶数的数组元素t相加的结果给s,s计算出的值为25,答案是C。
13.(B)
解析:二维数组在内存中是连续顺序存放的,故p[0]=0+1等价于a[0][0]=1,p[1]=1+1等价于a[0][1]=2,依次类推,故for循环语句执行后,二维数组a[3][3]={1,2,3,4,5,6,7,8,9},所以a[1][2]的值为6.
14.(D)
解析:第一个for循环语句执行后,二维数组a[3][3]={0,1,2,3,4,5,6,7,8}。第二个for语句的功能是输出数组元素a[1][0],a[1][1],a[1][2]的值,结果是3 4 5,故选D。
15.(B)13592153138
解析:int (*ptr)[2]表示定义了一个指针变量p,p只能存放含有两个整型元素的一维数组的首地址。在第一个for语句中,ptr=a+i,当i=0时,ptr=a,则a[0][0]被赋值为1,当i=1时,ptr=a+1,此时指针ptr将移动两个整型大小,故a[1][0]被赋值为2。此时当i=时不满足循环条件,退出循环,故键盘上输入的第三个数3,没有被计算机接受。所以二维数组a[3][2]={1,0,10,0,0},答案为B.
16.(B)
解析:int *p[3]表示定义了一个指针数组p,数组中包含三个指向整型数据的指针,故答案是B
17.(D)
解析:(A)p是一个指针,所以p+1是指针移动,所以还是指针。
(B)(C)p是数组指针,可以看做是指针的指针。所以*P是指针,**P才是值。
所以*(p+3),*(p+1)+3都是指针。故答案选D,*(P[0]+2)等价于C[0][2]。
18.(D)
解析:*(a+1)和a[1]是等价的,故*(a+1)代表了a[1][0]的地址,*(*(a+1)+2)就表示数组元素a[1][2],答案为D。
19.(C)
解析:由于p[0]=a[1];*(p(0)+1)等价于*(a[1]+1),*(a[1]+1)又等价于a[1][1],故答案为C。
20.(C)
解析:同17题。
21.(A)
解析:由于pa=a,所以pa[1]等价于a[1],在第一个for循环中,当i=0时,执行pa[1][0]=pa[1][0]-1,a[1][0]=3.当i=1时,执行pa[1][1]=pa[1][1]-1,a[1][1]=4。当i=2时,执行pa[1][2]=1,a[1][2]=1.第一个for循环结束后,二维数组a[2][3]={{1,2,3},{3,4,1}},最后输出的结果是7。
二、填空题
1、第一个语句:声明一个有三个元素的数组a,让指针p指向数组a的第一个元素,初始化x,声明了两个整型变量y, z。for循环的执行语句是一个条件表达式,即如果?前面括号内的表达式如果成立,则z的值是:前面表达式的值,若不成立,则是后面x的值。第一次循环和第二次循环的结果并没有输出,因为输出语句不属于for循环体语句,输出语句输出的只是最后一次循环的出的结果,即当y=2时,*(p+y)=6<x=8, z=*(p+y)=6,所以最终的输出结果为6。
2、第一个语句是声明了一个有5个元素的数组a,初始化整型变量y为1,并定义了整型变量x和指针p,第二个语句是让指针p指向数组的第二个元素,即p[0]=a[1]=4,第三个for循环语句是实现y=1+p[0]+p[1]+p[2]=1+a[1]+a[2]+a[3]=1+4+6+8=19,最后输出语句输出y的值。
3、第一个语句声明了一个有4个元素的数组a,定义指针p指向数组a的首地址,并定义了一个循环变量i.第二个循环语句实现的是将p所指向的元素赋给a[o], p下移一个位置,再将p指向的元素赋给a[1],依次循环直至将数组a[]里面的元素依次赋给数组a,最后输出语句输出a[2],a[2]=6,所以最后的输出结果为6。
4、第一个语句声明一个有10个元素的数组a,和一个指针p,第二个语句让p指向数组首地址。
第一个输出语句输出p指向的地址值,是以十六进制表示出来的5732,p+9表示p后移了9个元素的位置,由于一个整型数据占用两个字节,则p移动了18个字节,表示成十六进制就是12,则最后一个输出语句的结果为5732+12=5744。
5、 第一个语句定义了一个5个元素的数组a,和一个指针p,一个指向指针元素的指针k,第二个语句让p指向数组的首地址,第三个语句将指针p的地址赋给指针k,则第一个输出语句输出p指向的a[0]并换行,p再自加,第二个输出语句中*k代表的即是p,因为k指向的是p的地址,**k即为*p,而此时的*p指向的是a[1]即为4。故此行输出结果为4。

区丽仪(326471724) 09:14:06
没有
祁丽娜(397380931) 09:14:26
第七章 指针
一、选择题
1 A 本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。
2 B 本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。
3 C 本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。
4 C 本题主要考指针的定义及赋值,开始时使p指向a,q指向b,把它们的值交换,然后再显示。故得正确答案C。
5 C 本题主要考函数指针的定义,函数前面的*号表求返回值是指针类型,void表示返回无值弄的。故选C。
6 A 本题主要考的是指针的变量的赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A
7 D 本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。B的正确形式是**q=2;C的正确形式应该是q=&p;
8 C 本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2.
9 B 本题主要考的是变量自加,指针传值,以及指针的赋值。通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象’a’,由于(*a)++;是实现a所指对象的自加,故由’a’变成’b’,故最终选A。
10 A 本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0.
11 C 本题考的是指针变量的赋值,虽然p没有赋值,表示没有指向某个具体的对象,但事实上系统会让它随机的指向存储单元里的一个对象,那么它的返回值应该是所指存储单元中的值。
12 B 本题主要考函数中参数变量的定义,在B中连续定义两个变量,这在函数中是不可以的。
13 C 本题主要考指针的指针,c先指向b,b是一个指针,它指向a,故c最终是指向a的,故其值是a中的值
14 A 本题主要考指针的赋值,我们不能把一个具体的值赋给一个指针变量。B选项是w,p指向同一对象。C是p指向a。D是把w所指对象的值赋给p所指对象。
15 B 本题主要考指针传值,p,q分别指向a,b,然而r会指向它们的较小值。
16 D 在D中把一个整形变量的值赋给一个指针的地址,故而是错的。应该写成p=&a;
17 D 本题主要考调用函数时指针传值和一般的变量的传值区别。指针通过地址传值,而变量是直接传值。c指针指向b,故对c指针里面的值的修改等于直接修改b中的值。
18 D 本题主要考指针的定义及指针变量的值的输出方式,指针b指向a,故输出其值是511
19 C 本题主要考指针标识符*和乘号*的区别,*p=*p1*(*p2)中第1,2,4个*号是指针标识符,而第三个是乘号,故其运算的结果是3
20 C 本题也是考指针标识符*和乘号*的区别,第一个函数中的*号是乘号,此时指针p中保存的是指针p1和指针p2指向对象的乘积。
21 A 本题主考函数的嵌套调用,总的看来,函数fun()实现的功能是从1加到n,然后返回给主函数。
二、填空题
(1) 8 4
void f()函数里的x,y分别是一个指针变量和整型变量,指针x指向一个整型的变量,即指向主函数里的x,故在函数void f()里修改指针x的值,会影响到主函数里的x的值,但修改void f()里的y的值却不会影响到主函数里的y的值。因为主函数x传的是地址,y传的是值。
(2) k *k
由于k是一个指针,故第一个空应该填k。
由于第二个空要输出指针k所指对象的值,故应该填*k表示该指针所指对象的值
(3) 35
p,q分别指向x,y,然后调用函数swap();它的功能是把两个指针所指向的对象交换,原来a,b分别指向x,y,但交换后分别指向y,x,所以并不把指向的对象的值交换。 函数返回后,p,q仍然分别指向x,y。故其值不变。
(4) n=n/10
把n除以10,每执行一次就可以把数的阳未位去掉,因为两个整数相除,不会保留小数,故最低位会丢掉,并且把数缩小到十分之一。然后依次从个位到最高位把数字输出。

祁丽娜(397380931) 09:14:45
第五章 字符型数据 位运算
ò ¢ 选择题
1. 答案:C
2. 答案:D
分析:表示转义字符中的单引号字符
3. 答案:B
分析:B)’\179’中的9中超出了八进制数值的范畴
4. 答案:D
分析:
大小写字母的ASCII码的编码值相差32,100-32=68.
5. 答案:A
分析:
A)字符变量要保存字符常量,字符常量要用单引号引起来,同时,这应是一个转义字符,正确的应为:ch=’\\’
B)等价于ch=’A’
C)’\0’为转义字符,赋值正确
D)十六进制表示的转义字符
6. 答案:B
分析:条件表达式x=(x>=’A’&&x<=’Z’)?(x+32):x的第一个式子(x>=’A’&&x<=’Z’)为真,因此执行x+32这个操作,所以x=’C’+32,因此打印输出的是c。
7. 答案:A
分析:
(1) x=’B’-’A’+’a’=66-65+97=98
(2) y=x+2=98+2=100,ASCII值为100的是字符’d’
所以最后输出的98,d
8. 答案:A
分析:整型数据和字符型数据交替输入的时候输入形式只有两种:
(1)40*50#<回车>
(2)40* 50#<回车>
其他情况下,都会降空格符号作为字符读入,导致结果错误,所以选A)
9. 答案:A
分析:
A)两个相同的值进行位异或操作,结果为0
10. 答案:A
分析:
(1) a=4|3:
00000100
| 00000011
________________
00000111
所以 a=7
(2) b=4&3:
00000100
& 00000011
________________
00000000
所以b=0
11. 答案:D
分析:
(1)~z=~1=0
(2)x/y=3/2=1
(3)x/y&~z=1&0=0
12. 答案:D
分析:
(1)2+x:
00000010
+ 10100111
________________
10101001
(2)~3: ~ 00000011
___________________
11111100
(3)(2+x)^(~3):
10101001
^ 11111100
________________
01010101
13. 答案:D
分析:
(1)0x3对应的二进制为:00000011
0x8对应的二进制为:00001000
b=a|0x8: 00000011
| 00001000
_______________
00001011
所以b的值被赋为11。
(2)b: 00001011
c=b<<1: 00010110
所以c被赋值为22。
14. 答案:A
15. 答案:D
分析:1,2,3依次赋给了c1,c2,c3,回车符也作为字符赋给了c4,所以c5,c6依次读入的是4,5。

t ¢ 填空题
1. 答案:1
分析:(1)输入字符a后,表达式getchar()==’a’成立,表达式的值为真,
(2)将表示式的值赋给x(注意:=是赋值语句),所以x的值为1。
2. 答案:11110111
分析:(1)~x: ~00000010
______________
11111101
(2)y: 00000101
y<<1: 00001010
(3)z=~x^y<<1: 11111101
^ 00001010
_________________
11110111
3. 答案:3
分析:只有'\\', '\b','\xf'三个是正确的转义字符。

如果本文没有解决您的问题,请进老妖怪开发者社区提问

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: