1、要表示10个学生的成绩,下列声明并初始化数组正确的是()
正确答案: D
int[] score=new int[ ]int score[10]int score[]=new int[9]int score[]=new int[10]
数组初始化有三种方式:
public class Test {
public static void main(String[] args) {
//动态初始化
int[] a;//int a[];两者都可以
a = new int[10];
a[0] = 0;
a[1] = 1;
a[2] = 2;
//静态初始化
int[] b = {0, 1, 2};
//int b[] = {0, 1, 2};两者都可以
//默认初始化
int[] c = new int[10];
//int c[] = new int[10];两者都可以 }}
A选项初始化没有给数组长度,编译不过去;B选项写法不规范,编译不过去;C选项数据给错
2、合法的数组说明语句是( )
正确答案: D
int a[] = "string";int a[5] = {0.1, 2, 3, 4};char a = "string ";char a[] = {0, 1, 2, 3, 4, 5};
创建数组时必须明确规定大小或内容。数组变量的声明,和创建数组可以用一条语句完成,如下所示:
dataType[] array = new dataType[arraySize];
数据类型[] 数组名=new 数据类型[长度];
创建数组只指定长度但不指定内容
数据类型[] 数组名=new 数据类型[]{1,2,3,4,5};
创建数组指定内容(指定长度)
另外,你还可以使用如下的方式创建数组。
dataType[] array = {value0, value1, ..., valuek};数据类型[] 数组名={1,2,3,4,5};
创建数组指定内容(指定长度)
3、设有序表的关键字序列为{1,4,6,10,18,35,42,53,67,71,78,84,92,99},当用二分查找法查找键值为35的结点时,经()次比较后查找成功。
正确答案: C 你的答案: C (正确)
A. 2
B. 3
C. 4
D. 6
考察的是二分法查找基本过程原理。
基本过程如下:
根据以上第3步形成的待查找有序序列{35},中间关键字等于待查关键字35,所以查找成功。
4、若有以下定义和语句:
1 |
|
则不能表示a数组元素的表达式是
正确答案: B
*pa[10]*aa[p-a]
A:相当于a[0]
B:以为数组的下标从0开始,所以10越界。
C:相当于a[0]
D:p和a指向同一个数组,可以做加减法(如果p和a不是指向同一数组则会出错),得到的值为整数。此题为0。所以D也相当于a[0]。
5、设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以行为内存放时,元素A[5,8]的存储首地址为()
正确答案: A
BA+141BA+180BA+222BA+225
(4*10+7)*3=141 ,注意数组是从1开始计算
6、A为整数数组, N为A的数组长度,请问执行以下代码,最坏情况下的时间复杂度为____。
1 2 3 4 5 6 7 8 9 10 11 |
|
正确答案: B 你的答案: B (正确)
O(N)O(N^2)O(Nlog(N))O(log(N))O(N^3)无法确定
题目算法为冒泡排序法,其在最坏的情况下需要进行n(n-1)次运算,所以时间复杂度为n2
7、若有定义:
int c[4][5],( *pc)[5];
pc=c;
那么,下列对数组C的元素引用正确的是( )。
正确答案: D 你的答案: D (正确)
pc+1* (pc+3)* (pc+1) +3* (*pc+2)
pc是一个数组指针(指向数组的指针),指向列数为5的二维数组,pc = c,表示pc指向二维数组的第一行,pc+1偏移一行,一行5个元素。*pc得到二维数组c的第一行数组的首地址,+2偏移到c[0][2]的地址,解引用就得到数据2。c[4][5]可以理解为4个长度为5的一位数组,这四个一维数组的地址要用数组指针存放。
8、在程序设计中,要对两个16K×16K的多精度浮点数二维数组进行矩阵求和时,行优先读取和列优先读取的区别是()
正确答案: B
没区别行优先快列优先快2种读取方式速度为随机值,无法判断
如果数组很大的话应该是行优先快,因为数组在内存中是按行优先存储的,在虚存环境下,如果整个数组没有在内存中的话可以比列优先减少内存换进换出的次数。就算整个数组都在内存中,列优先访问a[i][j]还得计算一次乘法,行优先只需加一就可以了,这个可以忽略
9、选项代码中能正确操作数组元素的是()
1 2 3 4 5 6 7 8 9 |
|
正确答案: A B
*(*(a+i)+j)=1*(a[i]+j)=1**(a+i)[j]=1*((a+i)+j)=1
数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是***数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确
10、下列说法正确的是()
正确答案: A B D
二维以上的数组其实是一种特殊的广义表数组一旦建立,结构的元素个数和元素间的物理存储关系就不再变化数组是一种线性结构,因此只能用来存储线性表数组采用顺序存储方式表示
A:广义表:广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。二维以上的数组其实是一种特殊的广义表。
B,D:由于数组一般不做插入或删除操作,也就是说,数组一旦建立,结构的元素个数和元素间的关系就不再变化。因此,数组采用顺序存储方式表示是自然的事情了。
C:一维数组是线性结构,但也可以用来存储二叉树这种非线性结构。
***数组,矩阵是非线性结构。