1、数组元素的下标值越大,存取时间越长,这样的说法正确吗?
正确答案: B 你的答案: B (正确)
正确
不正确
分析:
数组存取采用首地址加上元素所在位置*元素大小计算(行优先或者列优先)其所在地址 假设一个数组为a[10][10] 数组a[0][0]地址为0x00,采用行优先存储,元素占4个字节 a[i][j]的地址为0x00+(i*10+j)*4 所以不会因为数组过长而导致存取时间变长
2、数组作为函数参数传递的是() 。
正确答案: A 你的答案: A (正确)
数组的首地址数组元素个数数组中各元素值数组的大小
分析:
选A。考察的是数组传递给函数作为参数的原理。
传递方式如下三种:每种方式都会告诉编译器要接收一个指针,及数组的地址(首元素地址)
void myFunction(int *param)
{
//形式参数是一个指针
}
void myFunction(int param[10])
{
//形式参数是一个已定义大小的数组
}
void myFunction(int param[])
{
//形式参数是一个未定义大小的数组
}3、给定如下代码: int x[4]={0}; int y[4]={1}; 数组x和y的值为()
正确答案: B 你的答案: B (正确)
{0,0,0,0},{1,1,1,1}{0,0,0,0},{1,0,0,0}{0,不确定},{1,不确定}与编译器相关
分析:
如果初始化时指定的的元素个数比数组大小少, 剩下的元素都回被初始化为0。
4、设 int x[]={1,2,3,4,5,6},*p=x; 则值为 3 的表达式是
正确答案: B
p+=2,*++p;p+=2,*p++p+=3,*pp+=2,++*p
分析:
*p=x这里指针p指向数组的首元素地址,p+=2则指针指向第三个元素,而*++p是前置加加,p先自增,再解引用,就指向第四个元素了 b中为后置加加,是先解引用再加所以不影响,正确, c中p+=3就错了,因为指向第四个元素了 d中++*p,因为*p为3,所以就是++3了,结果为4
5、具有 n 个整数的数组 A=[29,6,28,20,2,24] 使用插入排序( Insertion Sort )算法排序,算法伪代码如下:
经过三趟排序后,数组 A 的排列状态将是()
正确答案: C
6,29,28,20,2,246,28,20,2,24,296,20,28,29,2,242,6,20,24,28,29
分析:
实现机理是这样的:
有一组数据A=[29,6,28,20,2,24]
①第一次先排前俩,第二次排前三。。。。以此类推
②先获取A[j]的值存入一个变量中
③每次循环判断大小的目的就是为了找到A[j-1]小于e的情况
④当出现前大于e的情况,那就把大的值后移,也就是赋值给A[j]
⑤当出现前不大于e的时候(A[j-i]<e),break跳出,此时j不减减,此时j的位置就是需要e来填充的
第一趟的结果为6 29 28 20 2 24
第二趟为6 28 29 20 2 24
第三趟: j为3,e为A[3] = 20,那么先比较的就是A[3-1]和e,其结果为A[3]被赋值为A[3-1],
而后j-- 进入A[2-1]和e的判断,同样是A[2]被赋值为A[1],
然后再判断A[0]和e,发现A[0]小于e,break退出,此时j=1,A[1]=e;end;
6、稀疏矩阵一般的压缩存储方式有两种,即 。
正确答案: C
二维数组和三维数组三元组和散列三元组和十字链表散列和十字链表
分析:
所谓三元组就是一个元素存放三个信息,矩阵中的行号,列号以及值,这样就可以不存放值为0的元素,实现压缩。 十字链表相当于是邻接表和逆邻接表的合集,在一个元素里面存放了值以及出度表和入度表,这样也不需要像邻接矩阵那样存放大量0元素,而且找一个节点的入节点和找出节点一样快。
7、数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的
正确答案: D 你的答案: D (正确)
*aa [ 0 ]aa++
分析:
a代表数组名或者内存连续区域第一块数据的地址。接[]表示基址寻址。加*表示对数组起始位置按照数组元素数据类型寻址取值第一个元素。加&表示取第一个元素地址。a与&a与&a[0]相同。a为常量,可以运算,不可赋值。数组中a指的是数组首地址 地址是常量,不可以自加。
8、采用压缩存储之后,下三角矩阵的存储空间可以节约一半,这样的说法正确吗?
正确答案: B
正确
不正确
分析:
下(上)三角矩阵是主对角线以上(下)元素均为零的n阶矩阵。设以一维数组sb[0..n(n+1)/2]作为n阶三角矩阵B的存储结构,仍采用按行存储方案,则B中任一元素bi,j和sb[k]之间仍然有如上的对应关系,只是还需要再加一个存储常数c的存储空间即可。在下三角矩阵中,用n(n+1)/2的位置来存储常数。
9、二维数组和多维数组均不是线性结构。( )
正确答案: A
正确
错误
分析:
线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。
非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
常见的非线性结构有:二维数组,***数组,广义表,树(二叉树等),图。(其中***数组是由多个一维数组组成的,所以不再是线性结构)
10、已知数组D的定义是int D[4][8];,现在需要把这个数组作为实参传递给一个函数进行处理。下列说明汇总可以作为对应的形参变量说明的是()
正确答案: C D 你的答案: D (错误)
int D[4][]int *s[8]int(*s)[8]int D[][8]
分析:
二维数组在内存中也是连续存储的,他可以通过 arr[i][j]寻址是因为我们定义了这个数组有多少列,加入有N列,这样数组寻址的时候编译器会自动得到 *(arr+(j*N)+i)所以传参数的时候列数必须指定。所以D正确A不正确。B表示有8个指向int指针的数组,不对,而C中(*s)等价于s[]。因此答案CD;