串和数组自测题
2016-05-29 14:56
375 查看
一、填空题
1. 不包含任何字符(长度为0)的串 [/u]称为空串; 由一个或多个空格(仅由空格)组成的串 [/u]称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 [/u],
“/”的字符定位的位置为 3 [/u]。
4. 子串的定位运算称为串的模式匹配; 被匹配的串 [/u]称为目标串, 子串 [/u]称为模式。
5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 [/u]次匹配成功。
6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m [/u]。
7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288B [/u];末尾元素A57的第一个字节地址
为 1282 [/u];若按行存储时,元素A14的第一个字节地址为 (8+4)*6+1000=1072 [/u];若按列存储时,元素A47的第一个字节地址为 (6*7+4)*6+1000=1276 [/u]。
(注意审题,理解数组是从0行0列开始的还是从1行1列开始的,由末尾元素57可知是从0行0列开始的)
8. 设数组a[1…60,
1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 (57*60+31)*2+2048=8950 [/u]。
9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素
的 行下标 [/u]、 列下标 [/u]和 元素值 [/u]。
10. 求下列广义表操作的结果:
(1) GetHead【((a,b),(c,d))】=== (a,b) [/u];
(2) GetHead【GetTail【((a,b),(c,d))】】=== (c,d) [/u];
(3) GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b [/u];
(4) GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d) [/u];
(做此题注意: GetHead( L) ——取表头(可能是原子或列表); GetTail(L ) ——取表尾(一定是列表) 。)
例如:
二、单选题
( D )1. 串是一种特殊的线性表,其特殊性体现在:
A.可以顺序存储 B.数据元素可以是多个字符
C.可以链式存储 D.数据元素是一个字符
( B )2. 设有两个串p和q,求q在p中首次出现的位置的运算称作:
A.连接 B.模式匹配 C.求子串 D.求串长
( D )3. 设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是:
A.BCDEF B.BCDEFG
C.BCPQRST D.BCDEFEF
( A )4. 假设有60行70列的二维数组a[1…60,
1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 [/u]。(无第0行第0列元素)
A.16902 B.16904
C.14454 D.答案A,
B, C均不对
(解题:(57*60+31)*2+1000=16902)
( B ) 5. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如右图所示)按行序存放在一维数组B[
1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k的值是:
A.i(i-1)/2+j-1 B.i(i-1)/2+j
C.i(i+1)/2+j-1 D.i(i+1)/2+j
(解析:此题如果记不住公式,可以举例子套,用排除法)
6. 从供选择的答案中,选出应填入下面叙述 ?
[/u]内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。
存储数组A的最后一个元素的第一个字节的地址是 A
[/u]。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 B
[/u]和 C [/u]。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 D
[/u]和 E [/u]。
供选择的答案
A~E:①28
② 44 ③ 76
④ 92 ⑤ 108 ⑥ 116
⑦ 132 ⑧ 176
⑨ 184 ⑩ 188
答案:A= [/u]⑧ [/u] B= [/u]③ [/u] C= [/u]⑤ [/u]
D= [/u]① [/u]
E= [/u]⑥ [/u]
7. 从供选择的答案中,选出应填入下面叙述 ?
[/u]内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 A
[/u]个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是 B
[/u]。若按行存储,则A[2,4]的第一个字节的地址是 C
[/u]。若按列存储,则A[5,7]的第一个字节的地址是 D
[/u]。
供选择的答案
A~D:①12
②66 ③72
④96 ⑤114
⑥120 ⑦156
⑧234 ⑨276
⑩282 (11)283
(12)288
答案:A= [/u](12) [/u] B= [/u](10) [/u] C= [/u](3) [/u] D= [/u](9) [/u]
三、计算题
设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’,
求Replace (s,’STUDENT’, q) 和Concat (SubString (s,6,2),
Concat (t, SubString (s,7,8)))。
解:① Replace(s,’STUDENT’,q)=’I AM A WORKER’
② 因为 SubString(s,6,2)=‘A ’;SubString(s,7,8)=‘ STUDENT’ Concat(t,SubString(s,7,8))=’GOOD STUDENT’
所以Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))=‘A GOOD STUDENT’
2. 已知主串s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBADADA’。写出模式串的nextval函数值,并由此画出KMP算法匹配的全过程。
模式串 : ADABBADADA
next: 0112112341
nextval: 0102101040
3. 用三元组表表示下列稀疏矩阵:
参见填空题4. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、 列下标和元素值 。
4. 下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
四、算法设计题
编写一个实现串的置换操作Replace (&S,
T, V)的算法。
写出将字符串反序的递推或递归算法,例如字符串为“abcsxw”,反序为“wxscba”
1. 不包含任何字符(长度为0)的串 [/u]称为空串; 由一个或多个空格(仅由空格)组成的串 [/u]称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 [/u],
“/”的字符定位的位置为 3 [/u]。
4. 子串的定位运算称为串的模式匹配; 被匹配的串 [/u]称为目标串, 子串 [/u]称为模式。
5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 [/u]次匹配成功。
6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m [/u]。
7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288B [/u];末尾元素A57的第一个字节地址
为 1282 [/u];若按行存储时,元素A14的第一个字节地址为 (8+4)*6+1000=1072 [/u];若按列存储时,元素A47的第一个字节地址为 (6*7+4)*6+1000=1276 [/u]。
(注意审题,理解数组是从0行0列开始的还是从1行1列开始的,由末尾元素57可知是从0行0列开始的)
8. 设数组a[1…60,
1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 (57*60+31)*2+2048=8950 [/u]。
9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素
的 行下标 [/u]、 列下标 [/u]和 元素值 [/u]。
10. 求下列广义表操作的结果:
(1) GetHead【((a,b),(c,d))】=== (a,b) [/u];
(2) GetHead【GetTail【((a,b),(c,d))】】=== (c,d) [/u];
(3) GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b [/u];
(4) GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d) [/u];
(做此题注意: GetHead( L) ——取表头(可能是原子或列表); GetTail(L ) ——取表尾(一定是列表) 。)
例如:
二、单选题
( D )1. 串是一种特殊的线性表,其特殊性体现在:
A.可以顺序存储 B.数据元素可以是多个字符
C.可以链式存储 D.数据元素是一个字符
( B )2. 设有两个串p和q,求q在p中首次出现的位置的运算称作:
A.连接 B.模式匹配 C.求子串 D.求串长
( D )3. 设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是:
A.BCDEF B.BCDEFG
C.BCPQRST D.BCDEFEF
( A )4. 假设有60行70列的二维数组a[1…60,
1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 [/u]。(无第0行第0列元素)
A.16902 B.16904
C.14454 D.答案A,
B, C均不对
(解题:(57*60+31)*2+1000=16902)
( B ) 5. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如右图所示)按行序存放在一维数组B[
1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k的值是:
A.i(i-1)/2+j-1 B.i(i-1)/2+j
C.i(i+1)/2+j-1 D.i(i+1)/2+j
(解析:此题如果记不住公式,可以举例子套,用排除法)
6. 从供选择的答案中,选出应填入下面叙述 ?
[/u]内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。
存储数组A的最后一个元素的第一个字节的地址是 A
[/u]。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 B
[/u]和 C [/u]。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 D
[/u]和 E [/u]。
供选择的答案
A~E:①28
② 44 ③ 76
④ 92 ⑤ 108 ⑥ 116
⑦ 132 ⑧ 176
⑨ 184 ⑩ 188
答案:A= [/u]⑧ [/u] B= [/u]③ [/u] C= [/u]⑤ [/u]
D= [/u]① [/u]
E= [/u]⑥ [/u]
7. 从供选择的答案中,选出应填入下面叙述 ?
[/u]内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 A
[/u]个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是 B
[/u]。若按行存储,则A[2,4]的第一个字节的地址是 C
[/u]。若按列存储,则A[5,7]的第一个字节的地址是 D
[/u]。
供选择的答案
A~D:①12
②66 ③72
④96 ⑤114
⑥120 ⑦156
⑧234 ⑨276
⑩282 (11)283
(12)288
答案:A= [/u](12) [/u] B= [/u](10) [/u] C= [/u](3) [/u] D= [/u](9) [/u]
三、计算题
设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’,
求Replace (s,’STUDENT’, q) 和Concat (SubString (s,6,2),
Concat (t, SubString (s,7,8)))。
解:① Replace(s,’STUDENT’,q)=’I AM A WORKER’
② 因为 SubString(s,6,2)=‘A ’;SubString(s,7,8)=‘ STUDENT’ Concat(t,SubString(s,7,8))=’GOOD STUDENT’
所以Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))=‘A GOOD STUDENT’
2. 已知主串s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBADADA’。写出模式串的nextval函数值,并由此画出KMP算法匹配的全过程。
模式串 : ADABBADADA
next: 0112112341
nextval: 0102101040
3. 用三元组表表示下列稀疏矩阵:
参见填空题4. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、 列下标和元素值 。
4. 下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
四、算法设计题
编写一个实现串的置换操作Replace (&S,
T, V)的算法。
写出将字符串反序的递推或递归算法,例如字符串为“abcsxw”,反序为“wxscba”
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#数据结构之顺序表(SeqList)实例详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Lua教程(七):数据结构详解
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一