文章目录
练习题目
1.若定义:char s[20]=“programming”,*ps=s ;则不能表示字符‘o’的是() 。
A. ps+2
B. s[2]
C. ps[2]
D.*(ps+2)
正确答案:选A。
A项,ps为指针,ps+2为一个地址,因此不能表示字符‘o’。 B项和C项,当ps为指针时,ps[2]等价于s[2],表示的都是数组中的第3个元素。前者表示指针名称加下标引用元素,而后者表示数组名称加下标来引用元素。因此B和C正确。 D项,*(ps+2),取到了ps[2]的值,因此为‘o’。因此D正确。
知识点:数组
2.下面关于排序算法描述正确的是()
A.冒泡排序的最好情况和最坏情况时间复杂度一样
B.归并排序的最好情况和最坏情况时间复杂度一样
C.选择排序的最好情况和最坏情况时间复杂度不一样
D.直接插入排序的最好情况和最坏情况时间复杂度不一样
正确答案:选A。
可以参照下表:
知识点:排序。
3.以下正确定义一维数组的选项是( )
A .int a[5] = {0, 1, 2, 3, 4, 5};
B. char a[] = {0, 1, 2, 3, 4, 5};
C .char a = {‘A’, ‘B’, ‘C’};
D. int a[5] = “0123”;
.正确答案:B
A项,数组越界。所以错误。 B项,声明char类型,传入了数值数组,而数值会以char类型的ASCII编码写入。所以正确。C项,数组声没明显不符合规范,左侧声明名后应加上[]。所以错误。 D项,:这种声名只能用字符型char等,该选项是字符串。所以错误。
知识点:数组。
4.执行以下代码段(程序已包含所有必需的头文件)会输出什么结果。()
char a[2][3];
strcpy(a[0], "ab");
strcpy(a[1], "cd");
a[0][2] = ' ';
printf("%s", a);
A.ab
B.abcd
C.ab cd
D.编译出错
正确答案:C
因为a[0][2]赋值了字符’ '(空格),所以上述执行后相当于a[2][3] = {{‘a’, ‘b’, ’ ‘}, {‘c’, ‘d’, ‘\0’}};
在输出字符串的时候以’\0’为止结束字符串,所以输出的是字符串"ab cd"。
正确答案为C。
知识点:数组
5.(多选题)以下几种方式当中,稀疏矩阵压缩的存储方法是:()
A.三元组
B.二维数组
C.散列
D.十字链表
正确答案:AD
A项, 当三元组表示稀疏矩阵可以节省空间,因此A项正确。B项,二维数组是一种在内存中连续存储的数据结构,通常用于存储矩阵或表格等二维数据。在压缩散列表存储方式中,我们通常需要将每个键值对映射到一个散列桶中,而散列桶的大小是事先确定的,因此无法像二维数组那样动态地调整大小。此外,散列桶中存储的键值对是无序的,因此需要使用某种散列函数将键值对映射到桶中的位置。而二维数组中,每个元素的位置是确定的,无法使用散列函数进行映射。因此,二维数组不能用于压缩散列表存储方式。C项.散列表不适合用于压缩存储,因为散列是一种非可逆的操作,不能将散列后的值还原为原始值。而压缩存储需要在存储数据时尽可能地减少空间的使用,同时需要能够在需要时还原成原始数据。如果使用散列进行压缩存储,那么在需要读取数据时,就无法还原成原始的数据,导致数据无法正确读取。因此,散列不能用于压缩散列表存储方式。D项.十字链表是一种基于链表的数据结构,它可以用于存储稀疏矩阵,即矩阵中大部分元素都是0的情况。在散列表中,由于哈希函数的存在,冲突是无法避免的,因此需要解决冲突的方法。而对于稀疏矩阵来说,一般只有少数非零元素,这样就会出现大量的空间浪费。十字链表能够优化这种情况,它只记录矩阵中非零元素的位置与值,从而大大减少了空间的占用。因此,十字链表可以用于存储散列表中的稀疏矩阵,从而实现压缩存储,减少空间占用。同时,由于十字链表是基于链表的数据结构,支持快速的插入、删除操作,可以用于实现散列表中的解决冲突的链表法。
知识点:数组、链表、哈希