计算机基础-数组专项练习 01
第一题
数组元素个数为
4
,下标在
0
~
3
内即为合法,k+
5
下标越界。
第二题
总共移动次数(0+1+2+...+n)=n(n+1)/2 总共n+1种情况 平均移动n/2次
第三题
渐进时间复杂度是指n趋于无穷时的复杂度。渐进时间复杂度为O(n)
第四题
读取数组使用下标,所以是O(1)
第五题
分情况讨论:
1. 若f<r<=m, 则有r-f <m,即队尾没有超出边界,则为r-f
2. 若r<f<=m, r-f < 0, 即队尾超出边界m,那么应为m+r -f
综合两种情况,得到答案 (m+r-f) mod m
第六题
这题道在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]即第三行第三个,运行后结果下标越界了。
第七题
a代表数组名或者内存连续区域第一块数据的地址。接[]表示基址寻址。加*表示对数组起始位置按照数组元素数据类型寻址取值第一个元素。加&表示取第一个元素地址。a与&a与&a[0]相同。a为常量,可以运算,不可赋值。数组名的值不可更改~所以D错了
第八题
第1次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=0,right=13,mind=6; mid值为42,太大
第2次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=0,right=5,mind=2; mid值为6,太小
第3次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=3,right=5,mind=4; mid值为18,太小
第4次
1,4,6,10,18,35,42,53,67,71,78,84,92,99
left=5,right=5,mind=5; mid值为35,找到了
第九题
A[5][5]的地址为:5*100*2+5*2+10=1020,千万不要忘记基址是10,不是0
第十题
以0开始,下标是几就是多少个,从1开始,下标减1
第十一题
把三维坐标想象成立方体。分配的空间A[5][6][7]表示层高为5、行数为6、列数为7
因为数数的基本单位其实是列,二维坐标是行号列号,虽然平时可能习惯行号列号层号,但是按照二维的规律,那么三维坐标应该是层号行号列号
那么A[4][3][2]中4、3、2分别对应这个点的层数、行号、列号
位置为4*(6*7)+3*7+2=191
每个元素两个存储单元,最终结果为191*2+1100=1482
第十二题
长任取两个点C(6,2)*宽任取两个点C(5,2) = 15* 10 = 150
第十三题
下列给定程序中,函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]…中,把偶数从数组中删除,奇数个数通过函数值返回。 例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除偶数后,a所指数组中的数据为:9,1,3,5,7,返回值为5。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
试题程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
假如没有奇数,应该返回0,而j的初值就是0,所以直接返回j
第十四题
可以用浏览网页的情况来理解,我们在浏览第一个网页A,点网页里的一个标题,进入网页B,再在网页B里点击一个标题,进入网页C,这时连续按后退退回网页A,这说明浏览网页有记忆功能,栈的原理跟这差不多,所以说它有记忆功能
第十五题
线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。
非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
常见的非线性结构有:二维数组,***数组,广义表,树(二叉树等),图。(其中***数组是由多个一维数组组成的,所以不再是线性结构)
第十六题
a[5,4]左边有三列,上方有4行。
列存储的话,a[5,4]前方有3*7+4=25个元素,共50个字节。
第十七题
在快速排序中,需要使用递归来分别处理左右子段,递归深度可以理解为系统栈保存的深度,先处理短的分段再处理长的分段,可以减少时间复杂度;
如果按长的递归优先的话,那么短的递归会一直保存在栈中,直到长的处理完。短的优先的话,长的递归调用没有进行,他是作为一个整体保存在栈中的,所以递归栈中的保留的递归数据少一些。
第十八题
选项代码中能正确操作数组元素的是()
1 2 3 4 5 6 7 8 9 |
|
数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是***数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确
第十九题
BCF
在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。
1. String a[]=new String[50];
2. String b[];
3. char c[];
4. String d[50];
5. char e[50];
第二十题
下列给定程序中,函数fun的功能是:进行数字字符转换。若形参ch中是数字字符'0'~'9',则将'0'转换成'9','1'转换成'8', '2'转换成'7',…, '9'转换成'0';如果是其他字符则保持不变,并将转换后的结果作为函数值返回。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
试题程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
A、返回char,那么if条件里面做了隐式类型转换:int数字转成char
B、返回int,那么main中赋值给char变量的时候做了类型转换,int转char