计算机选择题03

计算机选择题03第二个匹配成功,从0开始的话就是1。和空格没关系,是牛客网的显示格式问题,经常有双引号内第一个字母前是空格的。

计算机选择题03

数组一样,都是一段连续的内存。

计算机选择题03 

模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。 

假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如果T中存在一个或多个模式为P的子串,就给出该子串在T中的位置,称为匹配成功;否则匹配失败。

计算机选择题03

 
串的逻辑结构和线性表很相似,不同之处在于串针对的是字符集,也就是串中的元素都是字符。对于串的基本操作与线性表是有很大的差别的。线性表更关注的是单个元素的操作,比如说查找一个元素,插入或者删除一个元素,但串中更多的是查找子串位置,得到指定子串,替换子串等操作。

计算机选择题03

分析fun函数,  char *y = x;//定义y指针指向x指针指向的字符串,此时x与y指针地址相同

 while (*y++);//当*y!='\0'时,指针指向字符串的下一位,直到*y=='\0',由于此时还会执行++操作符,所以此时y指针指向字符串末尾结束符的下一位,即此时指针y已经移动了字符串长度+1位,

所以y-x-1即为字符串的长度

计算机选择题03

二维数组为4*3,可表示为 

1 0 0  

3 2 0  

6 7 8 

9 0 0 

因为数组的起始位置为a[0][0],所以a[2][1]为第三行第二列,即7. 

所以答案选D

计算机选择题03

 

数组中,数组名是第一个数组的地址. 

注意这里a不是第一个元素的地址,而是第一个维数组的地址,a[0][0]才是表示的一维数组第一个元素的地址. 

地址 + 1表示向下移一层.

计算机选择题03

下三角矩阵A,
A[5][5]的地址:1+2+3+4+5+6=21
A[5][4]地址:21-1=20
A[5][4]-A[0][0]=20-1=19

计算机选择题03 

array[2][2]代表第三个一维数组的第三个元素,故溢出  

计算机选择题03

C语言中,字符串默认每个占用1字节,末尾还有'\0',所以一共是4字节

计算机选择题03 

对称矩阵,存储一半

a11 

a21 a22 

.

.

 

a71, a72...        a77

以此类推.
那么a11到a77一共有(1+7)*7/2=28个.
a81到a85是5个
所以就是33

 计算机选择题03


读取一个数组元素,进行常数操作。>>O(1)

计算机选择题03 


一般来说,都是默认数组下标是从0开始,矩阵是从1开始。。。只是一般情况!

计算机选择题03 

主要说一下A. A正确,因为指针是有减法的,不过只在数组之中应用,用来表示元素的个数的差. 这里 p 和 a其实是相等的,所以A答案等价与 a[0].

计算机选择题03 

一、push方法是向数组末尾添加一个或者多个元素,并返回新的长度 二、pop方法删除数组的最后一个元素,把数组的长度减1,并且返回它被删除元素的值,如果数组变为空,则该方法不改变数组,返回undefine值 三、unshift()方法是向数组的开头添加一个或多个元素,并且返回新的长度 四、shift()方法和unshift()方法恰恰相反。该方法用于把数组的第一个元素从其中删除,并返回被删除的值。如果数组是空的,shift()方法将不进行任何操作,返回undefined的值。 五,join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。


计算机选择题03 

计算机选择题03 

int fun (int a[], int n)
{
    int i, j;
    j=0;
    for (i=0; i<n; i++)
    /**********found**********/
    if (a[i]%2== 1 ) // 这里是要判断为奇数时,将其值存储到新的位置
    {
        /**********found**********/
        a[j]=a[i];
        j++; // j为新索引,每次赋值后需要加1
    }
    /**********found**********/
    return j; // 因为在上一步中已经加过1了,所以这里直接返回j即可
}
结果如下:

The original data:
   9   1   4   2   3   6   5   8   7

The number of odd: 5

The odd number:
   9   1   3   5   7


计算机选择题03

数组指针只是一个指针变量,指向一个一维数组,它占有内存中一个指针的存储空间,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

计算机选择题03 

数组的初始化: 

1、a[10] = {1,2,3};//随后元素补零 

2、a[] = {1,2}//编译器自动计算元素个数,相当于a[2] = {1,2}; 

3、a[10] = {}//编译器自动将所有元素置零 


计算机选择题03


关于这一题,我们需要区分数据的物理结构与逻辑结构。物理结构主要是指存储方式,包含线性存储与链式存储,它是从计算机存储的角度去考虑。逻辑结构指的是数据之间的关系,有线性关系和链式关系等,主要是从人为定义角度去考虑。数组是一种被人们定义为线性关系的表,至于其存储结构,可以用线性存储也可以是链式存储去存储

计算机选择题03 

 

int *s[8]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。 
int (*s)[8]; //定义一个数组指针,该指针指向含8个元素的一维数组(数组中每个元素是int型)。 

区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。 
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。 
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。