牛客网数组专项练习(六)

1、对矩阵压缩存储是为了()

正确答案: D   

方便运算
方便存储
提高运算速度
减少存储空间

分析:

A C,都是运算方面的好处

B,如果邻接表,还要存指针,并没有方便存储

D,不管是,邻接矩阵还是邻接表,都节省了空间


2、设有一个二维数组A[m][n],假设A[0][0]存放位置在 644,A[2][2]存放位置在676,每个元素占一个空间,问A[3][3]存放的位置在( )

正确答案: C

688

678

692

696

分析:

牛客网数组专项练习(六)


3、设有一个10阶对称矩阵A[10][10],采用压缩存储方式按行将矩阵中的下三角部分的元素存入一维数组B[  ]中,A[0][0]存入B[0]中,则A[8][6]在B[  ]的(    )位置

正确答案: C  

32

33

42

65

 分析:

由于是对称矩阵,因此压缩存储可以认为只要存储下三角矩阵。

(0,0)                                                           1

(1,0)(1,1)                                                    2

(2,0)(2,1) (2,2)                                           3

(3,0)(3,1) (3,2) (3,3)                                   4

(4,0)(4,1) (4,2) (4,3) (4,4)                           5

(5,0)(5,1) (5,2) (5,3) (5,4) (5,5)                   6 

(6,0)(6,1) (6,2) (6,3) (6,4) (6,5) (6,6)          7

(7,0)(7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7)  8 

(8,0)(8,1) (8,2) (8,3) (8,4) (8,5) (8,6)          6

1+2+3+4+5+6+7+8+6=42

答案选c


4、在C++语言中,下面关于数组的描述错误的是()

正确答案: C   你的答案: D (错误)

数组的名字就是指向该数组第一个元素的指针
长度为n的数组,下标的范围是0-n-1
数组的大小必须在编译时确定
数组可通过值参数、地址指针、引用参数三种方式传递给函数

分析;

数组可以也动态实现,int n; cin>>n,int *p=new int[n]; 指针传递也是传地址


5、以下二维数组声明中,正确的是( )。

正确答案: B   你的答案: B (正确)

char b[2][3]={"a","b","c"};
char b[][3]={0};
char b[2][]={0};
char b[][]={0}

分析:

A.char str[2][3]表示声明了一个字符串的数组,最多可以存放两个字符串,每一个字符串的长度为3。题中{"a","b","c"}为三个字符串

C、D.在声明数组时,数组个数可以缺省,数组长度不能缺省。该项中数组长度缺省。


6、下列数据结构具有记忆功能的是?

正确答案: C   你的答案: C (正确)

队列
循环队列
顺序表

分析:

栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用


7、下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数数组中共有M个字符串,且串长小于N。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

试题程序。

 

#define M 5

 #define N 20

 int fun(char(* ss)[N], int *n)

 {

     int i, k = 0, len = N;

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

     {

         len = strlen(ss[i]);

         if (i == 0)

             *n = len;

         if (len ____ * n)

         {

             *n = len;

             k = i;

         }

     }

     return ( _____ );

 }

 main( )

 {

     char ss[M][N] = {"shanghai", "guangzhou", "beijing", "tianjing", "chongqing"};

     int n, k, i;

     printf("\nThe originalb stringsare:\n");

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

         puts(ss[i]);

     k = fun(ss, &n);

     printf("\nThe length of shortest string is: % d\n", n);

     printf("\nThe shortest string is: % s\n", ss[k]);

 }

正确答案: C   你的答案: C (正确)

N,< ,k
N, >,k
M,<,k
M,>,k

分析:

int fun(char(* ss)[N], int *n)

 {
     int i, k = 0, len = N;
     for (i = 0; i < ___M___; i++) // 这里是要遍历数组,数组的长度为M,
     {
         len = strlen(ss[i]);
         if (i == 0)
             *n = len;
         if (len _<___ * n); // 这里是取最小的长度,
         {
             *n = len;
             k = i;
         }
     }
     return ( _____ ); // 函数返回最小长度字符串的下标,这里为k
 }

如题,这里其实ss初始化后是一个二维数组即ss[5][20]。

ss[0][*]维度存储的是字符串"shanghai"

ss[1][*]维度存储的是字符串“guangzhou”

ss[2][*]维度存储的是字符串"beijing"

ss[3][*]维度存储的是字符串“tianjing”

ss[4][*]维度存储的是字符串“chongqing"

那么当调用fun(ss,&n)方法后,将ss作为参数传入

由fun()中for循环里的len = strlen(ss[i]);可知,len是每次获得一个维度的长度,所以循环约束条件则为数组维度的大小M=5

又知n为串长,作为形参返回,当循环第一次进行时将ss[0][*]字符串的长度赋给了n。根据

if(len ____ * n)

        {

            *n = len;

            k = i;

        }

中*n的值为len可知每次*n得到的应该是较小值,那么将len和*n比较的话只有当len<n时赋值才有意义,否则应当进入下一次循环。

最后根据 k = i可知,k是在满足每次取最小字符串长度n时,for循环的i值,即为数组的维度,也就是最小串的下标。

所以应当将k值做为返回值满足题意。

到此int fun(ss,&n)带回的就是ss[M][N]中长度最小的字符串下标,并且串长为n。


 8、以下多维数组声明语句中,不正确的有(  )

正确答案: B   

int[,]a = new  int[2,3];
int[,] a = {{1,2,3}};
int[2,3] a = new int[2,3];
int[,] a = {{1,2,3},{2,3}}

9、如有定义:char str[20];,能将从键盘输入的字符串“How are you”保存到 str 数组的语句是(   )

正确答案: C   你的答案: C (正确)

scanf("%s", str);
str[] = getch();
gets(str);
str = gets();

分析:

getch()函数从控制台读取一个字符

gets(字符数组名或指针)

gets能够接受空格、制表符Tab和回车等。

gets和sacnf函数,在字符串接受结束后自动加'\0'


10、在一个有8个int数据的数组中,随机给出数组的数据,找出最大和第二大元素一定需要进行几次比较(     )

正确答案: B   你的答案: B (正确)

8

9

10

11

分析:

第一次分组8个分成4组 两两一组 比4次 第二次分组为上面比较下来的4个还是两两分组 分2组 第三次分组就剩下两个直接比较出了最大 这时一共比较了4+2+1=7次 接着拿第三次分组中与最大比较的那个数分别和 之前与最大那个数比较过的数比较 分别是第一次分组有一个 第二次分组有一个 7+2=9