习题总结006
1.矩阵中的数据元素可以是不同的数据类型 ,这样的说法正确吗? (A)
A.正确
B.错误
解析:这道题我做错了,所以看了下面的解析:如果是union结构体的数组就可以存储不同类型,
但是所学知识有限,现在还不能理解!
2.C#程序段的结果: int[][] array = new int[3][]{ new int[3]{5,6,2}, new int[5]{6,9,7,8,3}, new int[2]{3,2} }; array[2][2] 返回(D)
A.9
B.6
C.2
D.溢出
解析:array[2][2]代表第三个一维数组的第三个元素,故溢出
这题道在java上是通不过的。Java不支持类似int[] array = new int[2]{1,2};的定义,这里的int[2]{}中的2和后面的{1,2}同时定义了数组的长度,java不允许这样。应该改成int[] array = new int[]{1,2};即可,创建了一个array={1,2}的数组。
同理,这个题得改成: int[][] array = new int[][]{ new int[]{5,6,2}, new int[]{6,9,7,8,3}, new int[]{3,2} };就不会报错了,原题的意思就是创建一个二维数组:array={{5,6,2},{69783},{3,2}},则array[2][2]即第三行第三个,运行后结果下标越界了。
3.若要定义一个具有 5 元素的整型数组,以下错误的定义语句是( D )。
A.int a[5] = {0};
B.int a[] = {0, 0, 0, 0, 0};
C.int a[2+3];
D.int i = 5, a[i];
解析:
D选项的数组a[i]没有初始化。
一维数组的声明方式:
type var[]; 或type[] var;
声明数组时不能指定其长度(数组中元素的个数),
Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]
4.假设以数组Data[0..m-1]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为 (A)
A.(rear-front+m)%m
B. rear-front+1
C.(front-rear+m)%m
D.(rear-front)%m
解析:循环队列中元素个数计算方法是固定的,即(尾-头)%长度,但是由于是循环队列所以尾可能会小于头,所以要加上长度,使尾-头保持是正整数,然后再对长度求余,即元素个数
5.在程序设计中,要对两个16K×16K的多精度浮点数二维数组进行矩阵求和时,行优先读取和列优先读取的区别是(B)
A.没区别
B.行优先快
C.列优先快
D.2种读取方式速度为随机值,无法判断
解析:如果数组很大的话应该是行优先快,因为数组在内存中是按行优先存储的,在虚存环境下,如果整个数组没有在内存中的话可以比列优先减少内存换进换出的次数。就算整个数组都在内存中,列优先访问a[i][j]还得计算一次乘法,行优先只需加一就可以了,这个可以忽略
6.下列数据结构具有记忆功能的是?(C)
A.队列
B.循环队列
C.栈
D.顺序表
解析:栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈按照“先进后出”或“后进先出”组织数据,栈具有记忆作用
7.设有递归算法如下
试问计算x(x(8))时需要计算(D)次x函数。
A.8
B.9
C.16
D.18
解析:
x(8)=x(6)+x(4)+1 递归计算x(8)第一次调用
x(6)=x(4)+x(2)+1 递归计算x(6)第二次调用
x(4)= x(2)+x(0)+1 递归计算x(4)第三次调用
x(4)= x(2)+x(0)+1 递归计算x(4)第四次调用
之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9
接着计算x(9)
x(9)=x(7)+x(5)+1 递归计算x(9)第一次调用
x(7)=x(5)+x(3)+1 递归计算x(7)第二次调用
x(5)=x(3)+x(1)+1 递归计算x(5)第三次调用
x(5)=x(3)+x(1)+1 递归计算x(5)第四次调用
之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9
所以总共调用x()的次数是9+9=18
8.一个有序数列,序列中的每一个值都能够被2或者3或者5所整除,这个序列的初始值从1开始,但是1并不在这个数列中。求第1500个值是多少?(C)
A.2040
B.2042
C.2045
D.2050
解析:
2、3、5的最小公倍数是30。[ 1, 30]内符合条件的数有22个。如果能看出[ 31, 60]内也有22个符合条件的数,那问题就容易解决了。也就是说,这些数具有周期性,且周期为30.
第1500个数是:1500/22=68 1500%68=4。也就是说:第1500个数相当于经过了68个周期,然后再取下一个周期内的第4个数。一个周期内的前4个数:2,3,4,5。
故,结果为68*30=2040+5=2045
9.
递归算法x(8)需要调用几次函数x(int n) (A)
A.9
B.12
C.18
D.24
解析:递归算法,实现循环计算,直到计算出结果。x(8)第一次判定则是x(6)+x(4)+1,第二次将这个结果再次判定,则得到x(4)+x(2)+1+x(2)+x(0)+1+1,依次计算,因此x(int n)则调用了9次。
10.下列关于线性表中的链表描述正确的是?(ABCD)
A.适用于数据项数量不能预知的情况。
B.逻辑相邻的2元素的存储空间可以是不连续的。
C.链表节点一般有数据元素和指针域两部分组成。
D.存储空间需要动态分配。