C语言-第六章--数组.doc
文本预览下载声明
第六章 数组
一、填空题
1.【B】
分析:此题考查一维数组的定义。一维数组的定义,其数组长度即方括号中必须为常量,不能为变量,例如选项C,D。一维数组在定义并且初始化时可以省略数组的长度,但在单纯的定义时,数组的长度一定不能省,例如选项A。所以答案选B。
2.【B】
分析:此题是数组的简单引用。
第一轮循环,i=0,判断i++7 成立,此时i变为1,进入循环体,但此时i=1,p[1]=12不满足if条件即p[i]%2为0,不执行j+=p[i]。
第二轮循环,i=1,判断i++7 成立,此时i变为2,进入循环体,但此时i=2,p[2]=13满足if条件即p[i]%2为1,执行j+=p[i]。
按照此方法,将整个while循环执行完,得到j=p[2]+p[4]+p[6]=45,即B正确。
3.【A】
分析:此题主要考查循环嵌套引用数组。
第一个循环体执行完是将x[0],x[1],x[2],x[3]进行从大到小排序。
第二个循环体执行完是将x[4],x[5],x[6],x[7]进行从小到大排序。
4.【D】
分析:此题同第二题很类似。
首先i为0,i7p[0]%2为真,执行k=k+p[0],即k=11, 然后执行i++使i变为1,再进行判断,i7p[1]%2为真,执行k=11+p[1],所以k=24,执行i++使i变为2,再进行判断,此时i7p[2]%2为假,循环结束,输出k值,为24。
5.【D】
分析:此题是考查数组名是数组的首地址。
p是一个指针变量,存放地址的,选项A,B,C都是将值赋给p,显然错误。D选项是a[2]的地址赋给p。所以答案选D。
6.【B】
分析:此题是通过指针来引用数组。
由定义int a[10]={1,2,3,4,5,6,7,8,9,10 },*p=a[3],*q=p+2;我们可知,p中存放了a[3]的地址,或者p指向了a[3],q中存放了a[5]的地址,或者q指向了a[5]。那么*p和*q就分别等价于a[3]和a[5],两着相加得10。所以答案选B。
7.【C】
分析:此题是指针,数组,循环的结合。
首先p指向了a[1]。进入循环,x为1,x3为真,执行y+=p[1];,此题的关键点就在这里p[1]等于多少?因为p指向了a[1],所以p[0]就等价与a[1],p[1]就等价与a[2],p[2]就等价与a[3],依次类推。所以执行y+=p[1]使y的值变6,然后i++使i变为2,x3为真,执行y+=p[2];使y值变为14。所以答案选C。
8.【A】
分析:此题是指针,数组,循环的结合。
第一轮循环,执行p=a;,那么p指向数组的a[0],pa+10为真,执行printf语句,输出*p即输出a[0]。然后执行p++使p指向a[1]。
第二轮循环,pa+10为真,执行printf语句,输出*p即输出a[1]。然后执行p++使p指向a[2]。
依此类推执行循环到结束,依次将数组的元素全部输出。所以答案选A。
9.【A】
分析:此题考查NULL的知识点。
NULL只是一个地址,即地址为0,并没有对应的内存单元。所以q中存放的是NULL,那么*q并不表示任何内存单元,执行*q=*(p+5);会出错,所以答案选A。
10.【C】
分析:根据附录可知++的优先级高于,所以C答案错误。
11.【D】
分析:数组的长度根据其初始化可知为10,因此a[10]来引用数组的元素是错误的,越界了。
12.【D】
分析:此题和第七题类似。
p指向了a[3],那么p[5]等价于a[8],所以b中存放的是a[8]。所以答案选D。
13.【B】
分析:执行s=x+3;使s指向了x[3],那么s[2]等价于x[5],所以答案选B。
14.【B】
分析:此题通过循环对二维数组进行初始化。
首先执行p=a[0][0];使p指向了二维数组的首地址。进入for循环,i为0,i9为真,执行p[0]=0+1;使p[0]为1,然后i++。依次执行循环到结束,那么数组a中的元素将都被赋值a[3][3]={{1,2,3},{4,5,6},{7,8,9}}。所以答案选B。
15.【C】
分析:此题注意*的优先级高于算术运算符。
p指向数组a的首地址,*p等价于a[0]为1,所以*p+9等于10,答案选C。
16.【C】
分析:此题考查通过循环来引用数组的元素。
第一轮循环,i为0,i9为真,执行s+=*(t+i);因为t是数组的首地址所以等价于s+=t[0]使s的值变为1。然后执行i+=2使i变为2。
第二轮循环,i为2,i9为真,执行s+=*(t+i);因为t是数组的首地址所以等价于s+=t[2]使s的值变为4。然后执行i+=2使i变为4。
依此类推,执行完循环s=t[0]+t[2]+t[4]+t[6]+t[8]=1+3+5+7+9=25。所以答案选C
显示全部