第4章数组习题

第4章数组习题
第4章数组习题

第四章-串-习题及答案.doc

第四章串习题及答案 一、基础知识题 4.1 简述下列每对术语的区别: 空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。 4.2 假设有如下的串说明: char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p; (1)在执行如下的每个语句后p的值是什么? p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6'); (2)在执行下列语句后,s3的值是什么? strcpy(s3,s1); strcat(s3,","); strcat(s3,s2); (3)调用函数strcmp(s1,s2)的返回值是什么? (4)调用函数strcmp(&s1[5],"ton")的返回值是什么? (5)调用函数stlen(strcat(s1,s2))的返回值是什么? 4.3 设T[0..n-1]="adaabaabcaabaa",P[0..m-1]="aab".当用模式串匹配目标串T时,请给出所有的有效位移。算法NaiveStrMatch(T,P)返回的位移是哪一个位移。 二、算法设计题: 4.4 利用C的库函数strlen,strcpy和strcat写一算法void StrInsert(char *S, char *T, int i),将串T插入到串S的第i个位置上。若i大于S的长度,则插入不执行。 4.5 利用C的库函数strlen 和strcpy(或strncpy)写一算法void StrDelete(char *S,int i, int m)删去串S中从位置i开始的连续m个字符。若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均删去。 4.6 以HString为存储表示,写一个求子串的算法。 4.7 一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为: a b c d e f g h i j k l m n o p q r s t u v w x y z n g z q t c o b m u h e l k p d a w x f y i v r s j 则字符串"encrypt"被加密为"tkzwsdf".试写一算法将输入的文本串进行加密后输出;另写一算法,将输入的已加密的文本串进行解密后输出。 4.8 写一算法void StrReplace(char *T, char *P, char *S),将T中首次出现的子串P替换为串S。注意:S和P的长度不一定相等。可以使用已有的串操作。 4.9 将NaveStrMatch改写为输出目标串中所有也模式串匹配的有效位移。 *4.10 利用4.9的结果写一算法void StrReplaceAll(char *T, char *P, char *S),将T中出现的所有与P相等的不重叠子串替换为S,这里S和P的长度不一定相等。 4.11 若S和T是用结点大小为1的单链表存储的两个串,试设计一个算法找出S中第一个不在T中出现的字符。 答案: 4.1 简述下列每对术语的区别: 空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。 答:空串是指不包含任何字符的串,它的长度为零。 空白串是指包含一个或多个空格的串,空格也是字符。 串常量是指在程序中只可引用但不可改变其值的串。 串变量是可以在运行中改变其值的。 主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。 静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。 动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。 目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。 有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。 4、2 解:(1) stchr(*s,c)函数的效用是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。 因此: 执行p=stchr(s1,'t');后p的值是指向字符t的位置, 也就是p==&s1[5]。 执行p=strchr(s2,'9');后p的值是指向s2串中第一个9所在的位置,也就是p==&s2[9]。 执行p=strchr(s2,'6');之后,p的返回值是NULL。 (2)strcpy函数效用是串拷贝,strcat函数的效用是串联接。所以: 在执行strcpy(s3,s1); 后,s3的值是"Stocktom,CA" 在执行strcat(s3,","); 后,s3的值变成"Stocktom,Ca," 在执行完strcat(s3,s2);后,s3的值就成了"Stocktom,Ca,March 5,1999"

C语言程序设计习题参考答案第四章(数组)

第四章数组参考答案 一、选择题:1、 B 2、C 3、D 4、C 5、C 6、B 7、D 8、B 9、B 10、A 二、填空题: 1、首地址 2、按行存放 3、一个字符 4、′\0′ 5、字符数组名或字符串 6、9 0 7、6 8、j-1 str[j-1] 9、62 10、s1[i]=s2[i]; 三、改错题 1、错误语句:int a[3][ ]={2,4,6,8,10,12,14,16,18}; 正确语句:int a[ ][3]={2,4,6,8,10,12,14,16,18}; 2、错误语句:if (str[2]>string) string=str[2]; 正确语句:if (strcmp(str[2],string)>0) strcpy(string,str[2]); 3、错误语句:char c[5]={'C','h ','i','n','a '}; 正确语句:char c[6]={'C','h ','i','n','a '};或char c[ ]={“China”}; 4、错误语句:int a[3]={3*0} ; 正确语句:int a[4]; 5、错误语句:scanf(“%d%d%d”,&a); 正确语句:for (i=0; i<3; i++) scanf(“%d”,&a[i]); 或scanf(“%d%d%d”, &a[0], &a[1], &a[2]); 四、编程题 1、用数组来处理,求解Fibonacci数列前40项:1,1,2,3,5,8,13,21…。 #include void main() { int i; int t[40]={1,1}; for(i=2;i<40;i++) t[i]=t[i-2]+t[i-1]; for(i=0;i<40;i++) { if(i%5==0) printf("\n"); printf("%15d",t[i]); } } 2、用选择法对20个整数排序(由大到小)。 #include void main() {int i,j,min,t,x[20]; for(i=0;i<20;i++) scanf("%d",&x[i]); for(i=0;i<19;i++) {min=i; for(j=i+1;j<20;j++) if(x[min]>x[j])min=j; t=x[i];

(实验四)符数组与字符串

实验四字符数组与字符串 一、实验目的 ●了解并掌握一维数组与二维数组的定义方法 ●了解并掌握一维数组与二维数组的初始化方法及元素的引用方法 ●了解并掌握字符串、字符串数组以及字符串函数的使用方法 二、实验环境 ●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以 上硬盘剩余空间。 ●Windows2000、Windows XP或Win 7操作系统 ●Code::Blocks(版本12.11或近似版本,英文版) 三、实验内容 1. 冒泡排序 编写程序,实现如下功能:从键盘上输入整数n(n<=100),再输入n个整数,以冒泡排序算法将n个整数按从小到大的顺序进行排序。 /*example-14.c*/ #include "stdio.h" int main() { int num[100], n, i, j, t; /*输入整数的数量n*/ printf("Input n(<=100):"); scanf("%d", &n); /*输入n个整数*/ printf("Input %d numbers:\n", n); for(i=0; i

/*输出排序后的数据*/ printf("After sorting:\n"); for(i=0; i

数据结构第四章考试题库(含答案)

第四章串 一、选择题 1.下面关于串的的叙述中,哪一个是不正确的()【北方交通大学 2001 一、5(2分)】 A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行 concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index (S2,‘8’),length(S2))) 其结果为()【北方交通大学 1999 一、5 (25/7分)】A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345 E.ABC###G1234 F.ABCD###1234 G.ABC###01234 3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为() A.求子串 B.联接 C.匹配 D.求串长 【北京邮电大学 2000 二、4(20/8分)】【西安电子科技大学 1996 一、1 (2分)】 4.已知串S=‘aaab’,其Next数组值为()。【西安电子科技大学 1996 一、

7 (2分)】 A.0123 B.1123 C.1231 D.1211 5.串‘ababaaababaa’的next数组为()。【中山大学 1999 一、7】A.0 B.012121111212 C.0 D.0 6.字符串‘ababaabab’的nextval 为() A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1) C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 ) 【北京邮电大学 1999 一、1(2分)】 7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval 数组的值为()。 A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2 C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2 E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1 【北京邮电大学 1998 二、3 (2分)】 8.若串S=’software’,其子串的数目是()。【西安电子科技大学 2001应用一、2(2分)】

第4章数组练习题

一填空题 1)数组的元素通过索引来访问,数组Array的长度为Array.length 。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)没有显式引用变量的数组称为匿名数组。 4)JVM将数组存储在堆(堆或栈)中。 5)数组的二分查找法运用的前提条件是数组已经。 6)矩阵或表格一般用二维数组表示。 7)如果把二维数组看成一维数组,那么数组的元素是一维数组。 8)Java中数组的下标的数据类型是int 。 9)不用下标变量就可以访问数组的方法是foreach循环。 10)数组最小的下标是0 。 11)arraycopy()的最后一个参数指明长度。 12)向方法传递数组参数时,传递的是数组的引用。 13)线性查找法的平均查找长度为。 14)数组初始化包括数组的声明,创建和初始化。 15)数组下标访问超出索引范围时抛出数组索引超出绑定异常 16)浮点型数组的默认值是0.0 f 。 17)对象型数组的默认值是null 。 18)对象类型的数组虽然被默认初始化,但是并没有调用构造函数。 19)二维数组的行的长度可以不同。 20)数组创建后其大小不能改变。 二选择题 1.下面错误的初始化语句是__D_ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B__ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是_B___ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是_D___ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为__B__ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是_C___ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中

第4章 数据结构与算法 习题与答案

第四章习题(P111-113) 一、复习题 1、试述数据和数据结构的概念及其区别。 数据是对客观事物的符号表示,是信息的载体;数据结构则是指互相之间存在着一种或多种关系的数据元素的集合。(P93) 2、列出算法的五个重要特征并对其进行说明。 算法具有以下五个重要的特征:有穷性:一个算法必须保证执行有限步之后结束。确切性:算法的每一步骤必须有确切的定义。输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件。输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法没有实际意义。可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。(P95) 3、算法的优劣用什么来衡量?试述如何设计出优秀的算法。 时间复杂度空间复杂度(P97-98) 4、线性和非线性结构各包含哪些种类的数据结构?线性结构和非线性结构各有什么特点? 线性结构用于描述一对一的相互关系,即结构中元素之间只有最基本的联系,线性结构的特点是逻辑结构简单。所谓非线性结构是指,在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱(或直接后继)元素。树型和图型结构就是其中十分重要的非线性结构,可以用来描述客观世界中广泛存在的层次结构和网状结构的关系。(P99-105) 5、简述树与二叉树的区别;简述树与图的区别。 树用来描述层次结构,是一对多或多对一的关系;二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。图也称做网,是一种比树形结构更复杂的非线性结构。在图中,任意两个节点之间都可能相关,即节点之间的邻接关系可以是任意的,图表示的多对多的关系。(P102-P104) 6、请举出遍历算法在实际中使用的例子。 提示:根据实际生活中需要逐个访问处理的情况举例。 7、编写一个算法,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。 提示:根据查找算法和串中求子串的算法,查找输入串中以单个字符形式的子串。 8、若对有n个元素的有序顺序表和无序顺序表进行顺序搜索,试就下列三种情况分别讨论两者在等搜索概率时的平均搜索长度是否相同? (1) 搜索失败; (2) 搜索成功,且表中只有一个关键码等于给定值k的对象; (3) 搜索成功,且表中有若干个关键码等于给定值k的对象,要求一次搜索找出所有对象。

第4章 串与数组 习题参考答案

习题四参考答案 一、选择题 1.下面关于串的叙述中,哪一个是不正确的?(B ) A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 2.串的长度是指( A ) A. 串中包含的字符个数 B. 串中包含的不同字符个数 C. 串中除空格以外的字符个数 D. 串中包含的不同字母个数 3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A.求子串B.联接C.模式匹配D.求串长 4.设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( C )。 A. O(m) B. O(n) C. O(n + m) D. O(n×m) 5. 串也是一种线性表,只不过( A )。 A. 数据元素均为字符 B. 数据元素是子串 C. 数据元素数据类型不受限制 D. 表长受到限制 6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进行存储,a11为第一元素, 其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 7. 有一个二维数组A[1..6, 0..7] ,每个数组元素用相邻的6个字节存储,存储器按字节编址, 那么这个数组占用的存储空间大小是(D )个字节。 A. 48 B. 96 C. 252 D. 288 8.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开始以列序 为主序顺序存放,则数组元素 A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 9. 稀疏矩阵的三元组存储表示方法( B ) A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可 B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效 C. 是一种链式存储方法 D. 比十字链表更高效 10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。 A.5 B.4 C. 3 D. 2 二、填空题 1. 一个串的任意连续字符组成的子序列称为串的子串,该串称为主串。2.串长度为0的串称为空串,只包含空格的串称为空格串。 3. 若两个串的长度相等且对应位置上的字符也相等,则称两个串相等。 4. 寻找子串在主串中的位置,称为模式匹配。其中,子串又称为模式串。 5. 模式串t="ababaab"的next[]数组值为-1001231,nextval[]数组值为-10-10-130。 6. 设数组A[1..5,1..6]的基地址为1000,每个元素占5个存储单元,若以行序为主序顺序 存储,则元素A[5,5]的存储地址为1140。

第四章习题答案

第4章数组 4.1 选择题 1.以下对一维数组a 的定义正确的是(C )。 (A)int n = 5, a[n]; (B)int a(5); (C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n]; 2.下列数组定义语句中,不合法的是(A )。 (A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 }; (C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 }; 3.已知int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a;,不能 ..表示数组 a 中元素的式子是( C )。 (A)*a (B)*p (C)a (D)a[ p-a ] 4.已知int a[] = { 0,2,4,6,8,10 }, *p = a+1; 其值等于0的表达式是(D )。 (A)* (p++) (B)*(++p) (C)*(p--) (D)*(--p) 5.以下不能对二维数组a进行正确初始化的语句是(C )。 (A)int a[2][3] = { 0 }; (B)int a[][3] = { { 0,1 }, { 0 } }; (C)int a[2][3] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; (D)int a[][3] = { 0, 1, 2, 3, 4, 5 }; 6.已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } }; 则a[2][1]的值是(C )。 (A)0 (B)2 (C)6 (D)7 7.已知int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 不能表示数组元素a[2][1]的地址是(B )。 (A)&a[2][1] (B)*(a[2]+1) (C)a[2]+1 (D)*(a+2)+1 8.已知char *a[]={ "fortran", " basic", "pascal", "java", "c++" };,则cout<0 (D)strcmp(s2,s1)>0 4.2 阅读下列程序,写出运行结果 1. #include

PTA第四章串、数组和广义表练习题

B(2.0) D(2.0) D(2.0) D(2.0) D(2.0) A(2.0) B(2.0) B(2.0) D(2.0) C(2.0) D(2.0) D(2.0) 2-1 广义表是一种(B)数据结构。(2分) 1.非递归的 2.递归的 3.树型 4.图状 作者: 严冰 单位: 浙江大学城市学院 2-2 一个广义表为( a, (b, c), d, (), ((f, g), h) ),则该广义表的长度与深度分别为(D)。(2分) 1.4和6 2.6和3 3.3和5 4.5和3 作者: 严冰 单位: 浙江大学城市学院 2-3 稀疏矩阵的快速转置算法的时间复杂度是(D)。(2分) 1.三次方时间 2.二次方时间 3.对数时间 4.线性时间 作者: 严冰

单位: 浙江大学城市学院 2-4 在定义稀疏矩阵的十字链接存储结构时,每个结点结构需包含(D)个域。(2分) 1. 4 2. 3 3. 6 4. 5 作者: 严冰 单位: 浙江大学城市学院 2-5 广义表与稀疏矩阵都是线性表的扩展,它们的共同点为(D)。(2分) 1.都可以用链接结构与顺序结构存储 2.无共同点 3.都是递归结构 4.数据元素本身是一个数据结构 作者: 严冰 单位: 浙江大学城市学院 2-6 (neuDS_C++)以下叙述中正确的是(A )。(2分) 1.串是一种特殊的线性表 2.串的长度必须大于零 3.串中元素只能是字母 4.空串就是空白串 作者: 姚志军 单位: 广东东软学院

2-7 (neuDS_C++)串是一种特殊的线性表,其特殊性体现在(B )。(2分) 1.可以顺序存储 2.数据元素是一个字符 3.可以链接存储 4.数据元素可以是多个字符 作者: 姚志军 单位: 浙江大学 2-8 (neuDS_C++)设有两个串p和q,求q在p中首次出现的位置的运算称作( B)。(2分) 1.连接 2.模式匹配 3.求子串 4.求串长 作者: 姚志军 单位: 广东东软学院 2-9 (neuDS_C++)设串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))的结果串是 (D )。(2分) 1.BCDEF 2.BCDEFG 3.BCPQRST 4.BCDEFEF

第四章习题答案

第4章数组 选择题 1.以下对一维数组 a 的定义正确的是( C )。 (A)int n = 5, a[n]; (B)int a(5); (C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n]; 2.下列数组定义语句中,不合法的是( A )。 (A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 }; (C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 }; 3.已知 int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, p = a;,不能 ..表示数组 a 中元素的式子是( C )。 (A) a (B)p (C)a (D)a[ p a ] 4.已知 int a[] = { 0,2,4,6,8,10 }, p = a+1; 其值等于0的表达式是( D )。 (A) (p++) (B)(++p) (C)(p) (D)(p) 5.以下不能对二维数组a进行正确初始化的语句是( C )。 (A)int a[2][3] = { 0 }; (B)int a[][3] = { { 0,1 }, { 0 } }; (C)int a[2][3] = { { 0, 1 }, { 2, 3 }, { 4, 5 } }; (D)int a[][3] = { 0, 1, 2, 3, 4, 5 }; 6.已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } }; 则 a[2][1]的值是( C )。 (A)0 (B)2 (C)6 (D)7 7.已知int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 不能表示数组元素a[2][1]的地址是( B )。 (A)&a[2][1] (B)(a[2]+1) (C)a[2]+1 (D)(a+2)+1 8.已知char a[]={ "fortran", " basic", "pascal", "java", "c++" };,则 cout<

第四章串和数组习题

第四章串和数组 一.选择题 1.串是一种特殊的线性表,其特殊性体现在() A.可以顺序存储B.数据元素是一个字符 C.可以链式存储D.数据元素可以是多个字符 2.串的长度是() A.串中不同字母的个数B.串中不同字符的个数 C.串中所含字符的个数,且大于0 D.串中所含字符个数 3.若串S=”software”,其子串数目是() A.8 B.37 C.36 D.9 4.数组A[0..5,0..6]的每个元素占5个单元,将其按列优先次序存储在起始地址为1000的连续内存单元中,则元素A[5][5]的地址为() A.1175 B.1180 C.1205 D.1210 5.对矩阵压缩存储是为了() A.方便运算B.节省存储空间C.方便存储D.提高运算速度 6.一个n 阶对称矩阵,如果采用压缩存储方式,则容量为() A.n2B.n2/2 C.n(n+1)/2 D.(n+1)2/2 7.对稀疏矩阵采用压缩存储,其缺点之一是() A.无法判断矩阵有多少行多少列B.无法根据行列号查找某个矩阵元素 C.无法根据行列号计算矩阵元素的存储地址D.使矩阵元素之间的逻辑关系更加复杂二.填空 1.设串s1=”I am a student”,则串长为() 2.设有两个串p和q,其中q是p的子串,求子串q 在p中首次出现位置的算法称为()3.一维数组的逻辑结构是(),存储结构是();对于二维或多维数组,分为按()和()两种不同的存储结构。 4.数组A[1..10,-2..6,2..8]以行优先顺序存储,设第一个元素的首地址为100,每个元素占3个单元的存储空间,则元素A[5][0][7]的存储地址为() 5.三维数组R[C1..D1,C2..D2,C3..D3]共含有()个元素。 三、算法设计 1.编写下列算法(假定下面所用的串均采用顺序存储方式,参数c、c1和c2均为字符型):(1)将串S中所有其值为c1的字符换成c2的字符。 (2)将串S中所有字符逆序 (3)从串S中删除其值等于c的所有字符 (4)从串S中第index个字符起求出首次与字符串S1相同的子串的起始位置 (5)从串S中删除重第i个字符起的j 个字符 (6)从串S中删除所有与串S1相同的子串(允许调用第(4)题和第(5)题的算法)2.设计程序,计算串str中每一个字符出现的次数。 3.采用顺序结构存储串,编写一个算法计算制定子串在一个字符串中出现的次数,如果该子串不出现则为0。 4.如果矩阵A中存在这样一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j 列中值最大的元素,则称为该矩阵的一个马鞍点。编写一个算法计算出m×n的矩阵A的所有马鞍点。 5.编写一个算法,计算一个三元组表表示的稀疏矩阵的对角线元素之和。 6.系数矩阵只存放其非零元素的行号、列号和数值,用一维数组顺序存放之,行号-1作为

第四章练习答案

4.在下述Java语言语句中,错误 ..的创建数组的方法是( ) A.int intArray [ ];intArray=new int[5]; B.int intArray [ ]=new int[5]; C.int [ ] intArray ={1,2,3,4,5}; D.int intArray [5]={1,2,3,4.5}; 4.以下是关于字符串运算的代码,执行该代码段的输出结果是( ) String s=″0123456789″,sl,s2; sl=s.substring(2); s2=s.substring(2,5); System.out.println(s1+s2); A.0122345 B.234567892345 C.012234 D.23456789234 4.设有以下代码: String s l="123"; String s2="123"; String s3=new String("123"); 则表达式s1==s2和s1==s3的值分别是( ) A.true,true B.false,false C.true,false D.false,true 4.需要分析字符串,并将字符串分解成可被独立使用的单词,可使用java. util包中的类是 () A.String B.StringBuffer C.StringTokenizer D.stringTokenizer 14.Java语言提供了两个用于处理字符串的类,它们是__StringBuffer __ String ______。14.设有两个字符串对象str1和str2,则表达式“strl==str2”的意义是判别字符串strl和str2__是否引用同一个对象____。 14.设有字符串定义: String s="ABCDABCD"; 则表达式s.indexOf("B")的值是 1 。 14.设有数组a和b的定义如下: int[]a={1,2,3};int[]b={4,5,6}

第4章 串复习题解答

第四章串存储与基本操作的实现 本章学习要点 ◆熟悉串的相关概念以及串与线性表的关系 ◆重点掌握串的定长存储、堆分配存储的表示方法与基本操作的实现 ◆了解串的各种存储结构,能根据需要合理选用串的存储结构解决实际问题 “串”(string),是字符串的简称,它是一种特殊的线性表,其特殊性在于组成线性表的数据元素是单个字符。字符串在计算机处理实际问题中使用非常广泛,比如人名、地名、商品名、设备名等均为字符串。同样在文字编辑、自然语言理解和翻译、源程序的编辑和修改等方面,都离不开对字符串的处理。 4.1串的基本概念 4.1.1串的概念 1.串的定义 串(string) 是由n个字符组成的有限序列,记为:S=”a0a1a2…a n-1” (n≥0)。 其中,S是串的名字,字符序列a0a1a2…a n-1是串的值,a i(0≤i≤n-1)可以是字母、数字或其他字符元素;由于在C语言系统中数组元素的下标是从0开始的,所以串中所含元素的序号等于该元素的下标值加1;串中所含字符的个数n称为该串的长度,长度为0的字符串称为空串(null string)。 从串的定义可以看出,串实际上是数据元素为字符的特殊的线性表。 例如: (1)A=“X123” (长度为4的串) (2)B=“12345654321” (长度为11的串) (3)C=“Bei Jing” (长度为8的串) (4)D=“” (长度为0的空串) (5)E=“This is a string” (长度为16的串) (6)F=“ is a ” (长度为6的串) 2.子串、主串和位置 串中任意连续的字符组成的子序列称为该串的子串;相应地,包含子串的串称为主串。串中的字符在串序列中的序号称为该字符在该串中的位置;子串的第一个字符在主串中的位置称为子串在主串中的位置。显然,串为其自身的子串,并规定空串为任何串的子串。显然,在不考虑空子串的情况下,一个长度为n的字符串具有n(n+1)/2个子串。 例如: 在上例的(6)中串F就是(5)中串E的子串,且子串F在主串E中的位置是5。由于空格符也是一个字符,所以在串G=“abc defghne”中包含有子串“c def”,而串“cdef”不是串G的子串。串G中第一个字符‘e’的位置是6,第二个字符‘e’的位置是11。 3.串的比较 如果两个串的长度相等且对应位置上的字符相同,则称这两个串相等。两个串A、B的比较过程是:从前往后逐个比较对应位置上的字符的ASCII码值,直到不相等或有一个字符串结束为止,此时的情况有以下几种:

数据结构 习题 第四章 串 答案

第四章串 任意串是其自身的子串。若字符串长度为n(n>0),长为n的子串有1个,长为n-1的子串有2个,长为n-2的子串有3个,……,长为1的子串有n个。由于空串是任何串的子串,所以本题的答案为:8*(8+1)/2+1=37。故选B。但某些教科书上认为“空串是任意串的子串”无意义,所以认为选C。为避免考试中的二意性,编者认为第9题出得好。 二、判断题 三.填空题 1.(1) 由空格字符(ASCII值32)所组成的字符串 (2)空格个数 2.字符 3.任意个连续的字符组成的子序列 4.5 5.O(m+n) 6. 7. 8.(1)模式匹配 (2)模式串 9.(1)其数据元素都是字符(2)顺序存储(3)和链式存储(4)串的长度相等且两串中对应位置的字符也相等 10.两串的长度相等且两串中对应位置的字符也相等。 11.’xyxyxywwy’ 12.*s++=*t++ 或(*s++=*t++)!=‘\0’ 13.(1)char s[ ] (2) j++ (3) i >= j 14.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。串s用i指针(1<=i<=s.len)。t串用j指针(1<=j<=t.len)。算法思想是对每个i(1<=i<=s.len,即程序中第一个WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大匹配。程序中第三个(即最内层)的WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。 程序(a):(1)(i+k<=s.len)AND(j+k<=t.len) AND(s[i+k]=t[j+k]) //如果在s和t的长度内,对应字符相等,则指针k 后移(加1)。 (2)con:=false //s和t对应字符不等时置标记退出 (3)j:=j+k //在t串中,从第j+k字符再与s[i]比较 (4)j:=j+1 //t串取下一字符 (5)i:=i+1 //s串指针i后移(加1)。 程序(b):(1) i+k<=s.len && j+k<=t.len && s[i+k]==t[j+k] //所有注释同上(a) (2) con=0 (3) j+=k (4) j++ (5) i++ 15.(1)0 (2)next[k] 16.(1)i:=i+1 (2)j:=j+1 (3)i:=i-j+2 (4)j:=1; (5)i-mt(或i:=i-j+1) (6)0 17.程序中递归调用 (1)ch1<>midch //当读入不是分隔符&和输入结束符$时,继续读入字符 (2)ch1=ch2 //读入分隔符&后,判ch1是否等于ch2,得出真假结论。 (3)answer:=true (4)answer:=false (5)read(ch) (6)ch=endch

第四章 数组习题集答案

第四章数组习题 一、选择题 1. 如果char型变量占两个字节的存储单元,则按照如下方式定义的数组x占用的字节数 是【】。 char x[50]={2,4,6,8,10}; A)50 B)100 C)10 D) 5 2. 下面关于数组的定义正确的是【】。 A) int n=10; float a[n]={1.0,2.1,3.2}; B) #define N 10 int a[N]={1,2,3}; C) int n; scanf("%d", &n); int a[n]; D) #define N 10; int a[N]={1,2,3}; 3. 若有说明int a[5][4]; 则对其数组元素的正确引用是【】。 A)a[3+1][2] B)a(2)(3) C)a[0,2]D)a[3][5] 4. 若定义了数组int k[][4]={{1},{1,2,3},{5,6}};则数组共有【】元素。 A)6 B)9 C)10 D)12 5. 要将20,30,40,50 存入数组b中, 下列正确的程序段是【】。 A) int i,b[4]; for(i=0; i<4; i++) b[i]=(i+2)*10; B) int b[4]; b={20,30,40,50}; C) int b[4]; b[1]=20,b[2]=30,b[3]=40,b[4]=50; D) int b[4]; b[4]={20,30,40,50}; 6. 下列二维数组初始化语句中正确且与语句float a[]={0,1,2,0,4,0}等价的是【】。 A)float a[6]={0,1,2,0,4}; B)float a[]={0,1,2,0,4}; C)float a[7]={0,1,2,0,4,0}; D)float a[5]={0,1,2,0,4}; 7. printf("%d \n ", strlen ("ATS\n012\1\\" )) ; 程序段的输出结果是【】。

第四章 串

第四章串 一、选择题 1.函数substr(“DATASTRUCTURE”,5,9)的返回值为()。 A. “STRUCTURE” B.“DATA” C. “ASTRUCTUR” D. “DATASTRUCTURE” 2.字符串的长度是指()。 A. 串中不同字符的个数 B. 串中不同字母的个数 C. 串中所含字符的个数 D. 串中不同数字的个数 3.两个字符串相等的充要条件是()。 A. 两个字符串的长度相等 B. 两个字符串中对应位置上的字符相等 C. 同时具备(A)和(B)两个条件 D. 以上答案都不对 4.关于串的叙述中,正确的是() A.空串是只含有零个字符的串 B.空串是只含有空格字符的串 C.空串是含有零个字符或含有空格字符的串 D.串是含有一个或多个字符的有穷序列 5.下面关于串的的叙述中,哪一个是不正确的?() A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 6.设有两个串S1和S2,求S2在S1中首次出现的位置的运算称作( ) A.求子串 B.判断是否相等 C.模型匹配 D.连接 7.若串S=’software’,其子串的数目是( )。 A.8 B.37 C.36 D.9 8.串的长度是指() A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 9.串是一种特殊的线性表,其特殊性体现在( )。 A.数据元素是一个字符 B. 可以顺序存储 C. 数据元素可以是多个字符 D. 可以链接存储 10.下面关于串的的叙述中,哪一个是不正确的(B) A. 串是字符的有限序列 B. 空串是由空格构成的串 C. 模式匹配是串的一种重要运算 D. 串既可以采用顺序存储,也可以采用链式存储 11.若串=‘software’,其非平凡子串(非空且不同于串本身)的数目是(C)A. 8 B. 37 C. 35 D. 9 12.串是一种特殊的线性表,其特殊性体现在(B) A. 可以顺序存储 B. 数组元素是一个字符 C. 可以连续存储 D. 数据元素可以是多个字符 13. 下面关于串的的叙述中,哪一个是不正确的?(B) A.串是字符的有限序列

相关文档
最新文档