计算机基础-数组专项练习 01

第一题

计算机基础-数组专项练习 01

数组元素个数为4,下标在0~3内即为合法,k+5下标越界。

第二题

计算机基础-数组专项练习 01

总共移动次数(0+1+2+...+n)=n(n+1)/2 总共n+1种情况 平均移动n/2次

第三题

计算机基础-数组专项练习 01

渐进时间复杂度是指n趋于无穷时的复杂度。渐进时间复杂度为O(n)

第四题

计算机基础-数组专项练习 01

读取数组使用下标,所以是O(1)

第五题

计算机基础-数组专项练习 01

分情况讨论:

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

第六题

计算机基础-数组专项练习 01

这题道在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]即第三行第三个,运行后结果下标越界了。

第七题

计算机基础-数组专项练习 01

a代表数组名或者内存连续区域第一块数据的地址。接[]表示基址寻址。加*表示对数组起始位置按照数组元素数据类型寻址取值第一个元素。加&表示取第一个元素地址。a与&a与&a[0]相同。a为常量,可以运算,不可赋值。数组名的值不可更改~所以D错了

第八题

计算机基础-数组专项练习 01

第1次

1461018354253677178849299    

left=0,right=13,mind=6;   mid值为42,太大

第2次

146101835,42,53,67,71,78,84,92,99    

left=0,right=5,mind=2;   mid值为6,太小

第3次

1,4,6,101835,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,找到了

第九题

计算机基础-数组专项练习 01

A[5][5]的地址为:5*100*2+5*2+10=1020,千万不要忘记基址是10,不是0

第十题

计算机基础-数组专项练习 01

以0开始,下标是几就是多少个,从1开始,下标减1

第十一题

计算机基础-数组专项练习 01

把三维坐标想象成立方体。分配的空间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

第十二题

计算机基础-数组专项练习 01

长任取两个点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

#include<stdio.h>

#define N9

int fun (int a[], int n)

    int i, j;

    j=0;

    for (i=0; i<n; i++)

    /**********found**********/

    if (a[i]%2== _________ )

    {

        /**********found**********/

        a[j]=a[i];   

        _________;

    }

    /**********found**********/

    return _________;

}

main( )

    int b[N]={9,1,4,2,3,6,5,8,7}, i, n;

    printf("\nThe original data:\n");

    for(i=0; i<N; i++)

        printf("% 4d", b[i]);

    printf("\n");

    n=fun(b, N);

    printf("\nThe number of odd:% d\n", n);

    printf("\nThe odd number: \n");

    for(i=0; i<n; i++)

        printf("%4d",b[i]);

    printf("\n");

}

计算机基础-数组专项练习 01

假如没有奇数,应该返回0,而j的初值就是0,所以直接返回j

第十四题

计算机基础-数组专项练习 01

可以用浏览网页的情况来理解,我们在浏览第一个网页A,点网页里的一个标题,进入网页B,再在网页B里点击一个标题,进入网页C,这时连续按后退退回网页A,这说明浏览网页有记忆功能,栈的原理跟这差不多,所以说它有记忆功能

第十五题

计算机基础-数组专项练习 01

线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

常用的线性结构有:线性表,栈,队列,双队列,数组,串。

非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。

常见的非线性结构有:二维数组,***数组,广义表,树(二叉树等),图。(其中***数组是由多个一维数组组成的,所以不再是线性结构)

第十六题

计算机基础-数组专项练习 01

a[5,4]左边有三列,上方有4行。

列存储的话,a[5,4]前方有3*7+4=25个元素,共50个字节。

第十七题

计算机基础-数组专项练习 01

在快速排序中,需要使用递归来分别处理左右子段,递归深度可以理解为系统栈保存的深度,先处理短的分段再处理长的分段,可以减少时间复杂度;

如果按长的递归优先的话,那么短的递归会一直保存在栈中,直到长的处理完。短的优先的话,长的递归调用没有进行,他是作为一个整体保存在栈中的,所以递归栈中的保留的递归数据少一些。

第十八题

 

选项代码中能正确操作数组元素的是()

1

2

3

4

5

6

7

8

9

int main(){

  int a[N][N]={{0,0},{0,0}};

  for(int i=0;i<N;i++){

     for(int j=0;j<N;j++){

       //访问二维数组a的值

       //选项代码

      }

    }

}

计算机基础-数组专项练习 01

数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是***数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确 

第十九题

计算机基础-数组专项练习 01

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

#include<stdio.h>

_____ fun(char ch)

{

    if(ch>='0'&& _______)

        return'9'-(ch- ______);

    return ch;

}

main( )

    char c1,c2;

    printf("\nThe result:\n");

    c1='2';

    c2=fun(c1);

    printf("c1=%c c2=%c\n",c1,c2);

    c1='8';

    c2=fun(c1);

    printf("c1=%c c2=%c\n",c1,c2);

    c1='a';

    c2=fun(c1);

    printf("c1=%c c2=%c\n",c1,c2);

}

计算机基础-数组专项练习 01

A、返回char,那么if条件里面做了隐式类型转换:int数字转成char

 

B、返回int,那么main中赋值给char变量的时候做了类型转换,int转char