第四章 串

第四章 串
第四章 串

第四章串

一、内容提要

1、是数据元素为字符的线性表,串的定义及操作。

2、串的基本操作,编制算法求串的其它操作。

3、串的存储结构,因串是数据元素为字符的线性表,所以存在“结点大小“的问题。静态和动态(块链结构,堆结构)存储的优缺点。

4、朴素模式匹配算法及改进(KMP)算法。

二、学习重点

1、串的基本操作,编写串的其他操作(如index,replace等)。

2、在串的模式匹配中,求匹配串的nextval 函数值。

3、尽管朴素的模式匹配的时间复杂度是O(m*n), KMP算法是O(m+n),但在一般情况下,前者实际执行时间近似O(m+n),因此至今仍被采用。KMP算法仅在主串与模式串存在许多“部分匹配”时才显得比前者块的多,其主要优点是主串不回嗍。

5、串操作在存储结构下的实现。

三、例题解析

1、利用串的如下基本运算

create(s),assign(s,t),length(s),substr(s,start,len),concat(s1,s2),编写操作replace的算法

replace(string &s,string t, string v)

//本算法实现串的置换操作,用串v置换串s中所有非重叠的t串。

{i=INDEX(s,t);{判s中有无t}

IF (i!=0)

{CREATE (temp, ‘’);{t为临时串变量,存放部分结果}

m=LENGTH(t);n=LENGTH(s);

WHILE (i!=0)

{ ASSIGN (temp,CONCAT(temp,SUBSTR(s,1,i-1),v));

//用v替换t形成部分结果

ASSIGN (s,SUBSTR(s, i+m,n-i-m+1)); //t串以后形成新s串

n= n-(i-1)-m;

i=INDEX(s,t);

}

ASSIGN (s,CONCAT(temp,s)); //将剩余s连接临时串t再赋给s

}

}

int index(string s,string t)

//本算法求串t在串s中的第一次出现。结果是:若t在s中,则给出串t的第一个字符在串s中的位置,若不存在,则返回0

{j=1;m=length(s); n=length(t); eq=true;

WHILE((j<=m-n+1)&& eq )

IF equal(substr(s,j,n),t)

eq=false;

ELSEj=j+1;

IF( j<=m+n-1)return(j);

Return(0);

}

【讨论】本题是用给定的基本操作,编写其它操作的算法。这种类型题较多,必须严格按题的要求来做,不准选择具体存储结构。否则,即使全对,也很难得分。

2 设目标为t=’abcaabbabcabaacbacba’,模式串p=’abcabaa’;

(1)计算P的NEXTVAL函数值;

(2)不写出算法,只画出利用KMP算法进行模式匹配时每一趟的匹配过程;

【解答】

【讨论】为写NEXTVAL方便,可先写出NEXT函数值,在由此求NEXTVAL.

3、字符串s 满足下式,其中HEAD 和 TAIL的定义同广义表类似,如

HEAD(‘XYZ’)=’X’,TAIL(‘XYZ’)=’YZ’,则

S=concat(head(tail(s)),head(tail(tail(s))))=’dc’

求字符串s。

可供选择的答案是(A) abcd(B) acbd(C) acdb(D) adcb

正确答案是(D)。

四、基本题

(一)选择题

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,inde x(S2,‘8’),length(S2)))

其结果为()【北方交通大学1999一、5(25/7分)】

A.ABC###G0123B.ABCD###2345C.ABC###G2345D.ABC###2345

E.ABC###G1234F.ABCD###1234G.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.0123B.1123C.1231D.1211

5.串‘ababaaababaa’ 的next数组为()。【中山大学 1999 一、7】

A.012345678999 B.012121111212C.011234223456D.0123012322345

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 2B.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 1D.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 1F.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分)】

A.8B.37C.36D.9

9.设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的个数为()。【中科院计算所 1997 】

A.2n-1B.n2C.(n2/2)+(n/2)D.(n2/2)+(n/2)-1E. (n2/2)-(n/2)-1F.其他情况

10.串的长度是指()【北京工商大学 2001一、6 (3分)】

A.串中所含不同字母的个数B.串中所含字符的个数

C.串中所含不同字符的个数D.串中所含非空格字符的个数

(二)判断题

1.KMP算法的特点是在模式匹配时指示主串的指针不会变小。()【北京邮电大学 2002 一、4 (1分)】

2.设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。()【长沙铁道学院 1998 一、1 (1分)】

3.串是一种数据对象和操作都特殊的线性表。()【大连海事大学 2001 1、L(1分)】

(三)填空题

1.空格串是指__(1)__,其长度等于___(2)__。【西安电子科技大学 2001软件一、4(2分)】

2.组成串的数据元素只能是________。【中山大学 1998一、5 (1分)】

3.一个字符串中________称为该串的子串。【华中理工大学 2000 一、3(1分)】

4.INDEX(‘DATASTRUCTURE’,‘STR’)=________。【福州大学 1998 二、4 (2分)】

5.设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。

【重庆大学 2000 一、4】

6.模式串P=‘abaabcac’的next函数值序列为________。【西安电子科技大学 2001软件一、6(2分)】

7.字符串’ababaaab’的nextval函数值为________。【北京邮电大学 2001 二、4 (2分)】

8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为__(1)__,又称P为__(2)__。

【西安电子科技大学 1998 二、5 (16/6分)】

9.串是一种特殊的线性表,其特殊性表现在__(1)__;串的两种最基本的存储方式是__(2)__、__(3)__;两个串相等的充分必要条件是__(4)__。【中国矿业大学 2000 一、3 (4分)】

10.两个字符串相等的充分必要条件是_______。【西安电子科技大学 1999软件一、1 (2分)】

11.知U=‘xyxyxyxxyxy’;t=‘xxy’;

ASSIGN(S,U);

ASSIGN(V,SUBSTR(S,INDEX(s,t),LEN(t)+1));

ASSIGN(m,‘ww’)

求REPLACE(S,V,m)= ________。【东北大学 1997 一、1(5分)】

12.实现字符串拷贝的函数 strcpy为:

void strcpy(char *s , char *t) /*copy t to s*/

{ while(________)

}【浙江大学1999一、5(3分)】

13.下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如 f("abba")返回1,f("abab")返回0;

int f((1)________)

{inti=0,j=0;

while (s[j])(2)________;

for(j--; i

return((3)_______)

}【浙江大学1999一、6 (3分)】

14.下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。

voidmaxcomstr(orderstring *s,*t; int index, length)

{int i,j,k,length1,con;

index=0;length=0;i=1;

while (i<=s.len)

{j=1;

while(j<=t.len)

{ if (s[i]= =t[j])

{ k=1;length1=1;con=1;

while(con)

if (1) _ { length1=length1+1;k=k+1; }else (2) __;

if (length1>length) { index=i;length=length1; }

(3)____;

}

else (4) ___;

}

(5) __

}}【上海大学 2000 一、2 (10分)】

15.完善算法:求KMP算法中next数组。

get _next(string t,int next[])

{j=0; k=(1)__;next[1]=0;

WHILE (j

IF(k==0||t[j]==t[k]) {j=j+1; k=k+1; next[j]=k;}

ELSE k=(2)___;

}

【中山大学 1998 四、1 (4分)】

16.下面函数index用于求t是否为s的子串,若是返回t第一次出现在s中的序号(从1开始计),否则返回0。

例如:s=‘abcdefcdek’,t=‘cde’,则indse(s,t)=3, index(s,’aaa’)=0 。已知t,s的串长分别是mt,ms

int index(s,t,ms,mt);

{i=1;j=1;

WHILE (i

IF (s[i]==t[j]) [ (1)__;(2)__]

ELSE [ (3)___;(4)_ ]

IF (j>mt)return (5)____; ELSEreturn (6)__

}

【南京理工大学 1999 三、2 (6分)】

18.试利用下列栈和串的基本操作完成下述填空题。

initstack(s)置s为空栈;

push(s,x)元素x入栈;

pop(s)出栈操作;

gettop(s)返回栈顶元素;

sempty(s)判栈空函数;

setnull(st)置串st为空串;

length(st)返回串st的长度;

equal(s1,s2)判串s1和s2是否相等的函数;

concat(s1,s2)返回联接s1和s2之后的串;

sub(s,i,1)返回s中第i个字符;

empty(st)判串空函数

int invert(string pre,string &exp)

//若给定的表达式的前缀式pre正确,本过程求得和它相应的表达式exp并返回“true”,否则exp为空串,并返回“false”。已知原表达式中不包含括弧,opset为运算符的集合。

{stack s;int i,n,succ;char ch;

i=1;n=length(pre);succ=true;

(1)__;(2)__;

WHILE(i

{ch=sub(pre,i,l);

IF (3)_

(4)__

ELSE IF (5)__

(6)_

ELSE

{exp=concat((7)___,(8)____);

exp=concat((9)___,(10)___);

(11)__;}

i=i+1;

}

IF (12)___

{exp=concat(exp,sub(pre,n,1)); invert=true; }

ELSE{setnull(exp); invert=false;}

}

注意:每个空格只填一个语句。【清华大学 1996 八】

(四)应用题

1.名词解释:串【大连海事 1996 一、10(1分) 】【河海大学 1998 二、5(3分)】

2.描述以下概念的区别:空格串与空串。【大连海事大学 1996 三、2、(1) (2分)】

3.两个字符串S1和S2的长度分别为m和n。求这两个字符串最大共同子串算法的时间复杂度为T(m,n)。估算最优的T(m,n),并简要说明理由。【北京工业大学 1996 一、5 (6分)】

4.设主串S=‘xxyxxxyxxxxyxyx’,模式串T=‘xxyxy’。请问:如何用最少的比较次数找到T在S中出现的位置?相应的比较次数是多少?【大连海事大学2001 四(8分)】

5.KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进?【大连海事大学1996三、1((2分)】

6.已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next 和nextval函数值。

【北京邮电大学 1997三(10分)】

7.给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。【北京邮电大学 2000 三、1(5分)】

8.令t=‘abcabaa’,求其next 函数值和nextval函数值。【北方交通大学 1994一(6分)】

9.已知字符串‘cddcdececdea’,计算每个字符的next和nextval函数的值。【南京邮电大学 2000 一 2】

10.试利用KMP算法和改进算法分别求p1=‘abaabaa’和p2=‘aabbaab’的next函数和nextval函数。

【东南大学 1999 一、6(8分)】

11.已知KMP串匹配算法中子串为babababaa,写出next数组改进后的next数组信息值(要求写出数组下标起点)。【西南交通大学 2000 二、2】

12.求模式串T=‘abcaabbac'的失败函数Next(j)值。【西安交通大学1996四、4(5分)】

13.字符串的模式匹配KMP算法中,失败函数(NEXT)是如何定义的?计算模式串

p=‘aabaabaaabc’中各字符的失败函数值.【石油大学 1998一、2 (10分)】

14.设字符串S=‘aabaabaabaac',P=‘aabaac'

(1)给出S和P的next值和nextval值;

(2)若S作主串,P作模式串,试给出利用BF算法和KMP算法的匹配过程。

【北方交通大学1998二(15分)】

15.设目标为t=‘abcaabbabcabaacbacba’,模式为p=‘abcabaa’

(1)计算模式p的naxtval函数值;(5分)

(2)不写出算法,只画出利用KMP算法进行模式匹配时每一趟的匹配过程。(5分)

【清华大学 1998 八(10分)】

16.模式匹配算法是在主串中快速寻找模式的一种有效的方法,如果设主串的长度为m,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果,某一模式P=’abcaacabaca’,请给出它的NEXT函数值及NEXT函数的修正值NEXTVAL之值。【上海交通大学 2000一(5分)】

17.设目标为S=‘abcaabbcaaabababaabca’,模式为P=‘babab’,

(1)手工计算模式P的nextval数组的值;(5分)

(2)写出利用求得的nextval数组,按KMP算法对目标S进行模式匹配的过程。(5分)

【清华大学 1997 四(10分)】

18.用无回溯的模式匹配法(KMP法)及快速的无回溯的模式匹配法求模式串T 的next[j]值,添入下面表中:

【北京邮电大学 1992三、1(25/4分)】

19.在改进了的(无回溯)字符串模式匹配中,要先求next数组的值。下面是求nextval值的算法。

Typedef int SAR[m+1];

Typedef char PTY[m+1];

next2(PTY P,SAR NEXTVAL)

{在模式P中求nextval数组的值}

1 {

2 J=1;NEXTVAL[1]=0;K=0;

3 do

4 {IF (K==0 || P[J]==P[K])

5 {J=J+1;K=K+1;

6 IF (P[J]==P[K])

7 NEXTVAL[J]=NEXTVAL[K];

8 ELSE NEXTVAL[J]=K;

9 ELSE K=NEXTVAL[K]

10 while(j!=m)

11 }

算法中第4行有P[J]=P[K],第六行中也有P[J]=P[K]。两处比较语句相同。请分析说明此两处比较语句的含义是什么?分析此算法在最坏情况下的时间复杂度是多少?【北京邮电大学 1993 二、2(6分)】

20.在字符串模式匹配的KMP算法中,求模式的next数组值的定义如下:

请问:

(1)当j=1时,为什么要取next[1]=0?

(2)为什么要取max{K},K最大是多少?

(3)其它情况是什么情况,为什么取next[j]=1? 【北京邮电大学 1994二(8分)】

21.给出KMP算法中失败函数f的定义,并说明利用f进行串模式匹配的规则,该算法的技术特点是什么?

【东南大学 1993 一、3 (9分) 1997 一、2 (8分) 2001 一、6 (6分)】

22.在模试匹配KMP算法中所用失败函数f的定义中,为何要求p1p2……pf(j)为p1p2……pj两头匹配的真子串?且为最大真子串?【东南大学 1996 一、3(7分)】

23.如果两个串含有相等的字符,能否说它们相等?【西安电子科技大学 2000软件一、3 (5分)】

24.设S1,S2为串,请给出使S1//S2=S2//S1成立的所有可能的条件(//为连接符)。

【长沙铁道学院 1997三、5 (3分)】【国防科技大学1999 一】

25.已知:s ='(xyz)+*',t ='(x+z)*y'。试利用联结、求子串和置换等基本运算,将 s 转化为 t 。

【北方交通大学 1996 一、3(5分)】【山东科技大学 2002 一、6 (5分)】

(五)算法设计

1.设s、t为两个字符串,分别放在两个一维数组中,m、n分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出0。(注:用程序实现)【南京航空航天大学 1997 九(10分)】

2.输入一个字符串,内有数字和非数字字符,如:ak123x456 17960?302gef4563,将其中连续的数字作为一个整体,依次存放到一数组a中,例如123放入a[0],456放入a[1],……。编程统计其共有多少个整数,并输出这些数。【上海大学 1998 一(13分)】

3.以顺序存储结构表示串,设计算法。求串S中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。【东南大学 2000 五(15分)】

类似本题的另外叙述有:

(1)如果字符串的一个子串(其长度大于1)的各个字符均相同,则称之为等值子串。试设计一算法,输入字符串S,以“!”作为结束标志。如果串S中不存在等值子串,则输出信息“无等值子串”,否则求出(输出)一个长度最大的等值子串。

例如:若S=“abc123abc123!”,则输出“无等值子串”;若

S=“abceebccadddddaaadd!”,则输出“ddddd”。

【华中科技大学 2001】

4.假设串的存储结构如下所示,编写算法实现串的置换操作。【清华大学 1995 五(15分)】

Typedef struct

{char ch[maxlen];

int curlen;

}strtp;

5.函数void insert(char*s,char*t,int pos)将字符串t插入到字符串s中,插入位置为pos。请用c语言实现该函数。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)

【北京航空航天大学 2001 六(10分)】

6.设计一个二分检索的算法,在一组字符串中找出给定的字符串,假设所有字符串的长度为4。

(1)简述算法的主要思想;(3分)

(2)用c语言分别对算法中用到的类型和变量作出说明;(3分)

(3)用类c语言或自然语言写算法的非递归过程; (8分)

(4)分析该算法的最大检索长度;(3分)

(5)必要处加上中文注释。(3分)

【山东工业大学 1995 八(20分)】

7.设计一C语言的函数 atoi(x).其中X 为字符串,由0--9十个数字符和表示正负数的‘-’组成,返回值为整型数值。【浙江大学1994二(7分)】

8.已知字符串S1中存放一段英文,写出算法format(s1,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串S2, 其多余的字符送S3。【首都经贸大学1998 三、8(15分)】

9.串以静态存储结构存储,结构如下所述,试实现串操作equal算法.

#define maxlen串被确认的最大长度

typedef struct

{char ch[maxlen];

int curlen;

}strtp;

(以一维数组存放串值,并设指示器curlen指示当前串长)【北京轻工业大学1998 一(12分)】

10.编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。【西北大学2000四 (10分)】

11.写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。【西南交通大学 2000 三、2】

12.已知三个字符串分别为s=’ab…abcaabcbca…a’,

s’=’caab’,s’’=’bcb’。利用所学字符串基本运算的函数得到结果串为:

s’’’=’caabcbca…aca…a’,要求写出得到上结果串S’’’所用的函数及执行算法。【东北大学 1998 一、1 (10分)】

13.S=“S1S2…Sn”是一个长为N的字符串,存放在一个数组中,编程序将S 改造之后输出:

(1)将S的所有第偶数个字符按照其原来的下标从大到小的次序放在S的后半部分;

(2)将S的所有第奇数个字符按照其原来的下标从小到大的次序放在S的前半部分;

例如:

S=‘ABCDEFGHIJKL’

则改造后的S为‘ACEGIKLJHFDB’。【中科院计算所 1995】

}

第四章-串-习题及答案.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"

编译原理第4章作业答案

第四章 习题4.2.1:考虑上下文无关文法: S->S S +|S S *|a 以及串aa + a* (1)给出这个串的一个最左推导 S -> S S * -> S S + S * -> a S + S * -> a a + S * -> aa + a* (3)给出这个串的一棵语法分析树 习题4.3.1:下面是一个只包含符号a和b的正则表达式的文法。它使用+替代表示并运算的符号|,以避免和文法中作为元符号使用的竖线相混淆: rexpr→ rexpr + rterm | rterm rterm→rterm rfactor | rfactor rfactor→ rfactor * | rprimary rprimary→a | b 1)对这个文法提取公因子 2)提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗? 3)提取公因子之后,原文法中消除左递归 4)得到的文法适用于自顶向下的语法分析吗? 解 1)提取左公因子之后的文法变为 rexpr→ rexpr + rterm | rterm rterm→rterm rfactor | rfactor rfactor→ rfactor * | rprimary rprimary→a | b 2)不可以,文法中存在左递归,而自顶向下技术不适合左递归文法 3)消除左递归后的文法

rexpr -> rterm rexpr’ rexpr’-> + rterm rexpr’|ε rterm-> rfactor rterm’ rterm’-> rfactor rterm’|ε rfactor-> rprimay rfactor’ rfactor’-> *rfactor’|ε rprimary-> a | b 4)该文法无左递归,适合于自顶向下的语法分析 习题4.4.1:为下面的每一个文法设计一个预测分析器,并给出预测分析表。可能要先对文法进行提取左公因子或消除左递归 (3)S->S(S)S|ε (5)S->(L)|a L->L,S|S 解 (3) ①消除该文法的左递归后得到文法 S->S’ S’->(S)SS’|ε ②计算FIRST和FOLLOW集合 FIRST(S)={(,ε} FOLLOW(S)={),$} FIRST(S’)={(,ε} FOLLOW(S’)={),$} ③ (5) ①消除该文法的左递归得到文法 S->(L)|a

第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-05 IP地址分为几类?各如何表示?IP地址的主要特点是什么? 答:在IPv4的地址中,所有的地址都是32个二进制位,并且可记为 IP地址::= { <网络号>, <主机号>} IP地址被分为A、 A类地址:网络号字段为1字节,最前面的1位是0。 B类地址:网络号字段为2字节,最前面的2位是10。 C类地址:网络号字段为3字节,最前面的3位是110。 D类地址:用于多播,最前面的4位是1110。 E类地址:保留今后使用,最前面的4位是1111。 IP 地址特点如下: 1.每一个IP 地址都由网络号和主机号两部分组成。从这个意义上说,IP 地址是一种分等级的地址机构; 2.IP地址是标志一个主机(或路由器)和一条链路的接口; 3.具有相同网络号的主机集合构成一个网络,因此,由转发器或网桥连接起来的若干个局域网仍为一个网络。具有不同网络号的局域网互连必须使用路由器; 4.所有分配到网络号的网络都是平等的。 4-07 试说明IP地址与硬件地址的区别。为什么要使用这两种不同的地址? 答:如下图所示,IP地址在IP数据报的首部,而硬件地址则位于MAC帧的首部。在网络层以上使用的是IP地址,数据链路层及以下使用的是硬件地址。 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但统一的IP地址把这个复杂问题解决了。连接到因特网的主机只需拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,当需要把IP地址转换为物理地址时,调用ARP的复杂过程都是由计算机软件自动进行的,而用户是看不见这种调用过程的。因此,在虚拟的IP网络上用IP地址进行通信给广大计算机用户带来很大的方便。 4-09 试回答下列问题: (1)子网掩码为255.255.255.0 代表什么意思?

严蔚敏数据结构c语言版习题集答案第四章串

读书破万卷下笔如有神 《一定能摸到红球吗?》说课稿 林银花 教材说明:一、1、课题:《一定能摸到红球吗?》 2、本节内容的地位和作用 在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是 义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活. 3、教学目标设计: (1)认知目标: (A)经历猜测.实验.收集与分析试验结果等过程 (B)体会事件的发生的不确定性知道事情发生的可能性有多大。 (2)、能力目标: (A)经历游戏等的活动过程,初步认识确定事件和不确定事件 (B)在与其它人交流的过程中,能合理清晰地表达自己的思维过程; (3)、情感目标: (A)通过创设游戏情境,让学生主动参与,做“数学实验”,激发学生学习的热情和兴趣,激活学生思维。 (B)在与他人的合作过程中,增强互相帮助、团结协作的精神。 (C)体会到在生活中我们可以从确定和不确定两方面分析一件事情. 4、本课重点、难点分析: 学习的重点是初步体验事情发生的确定性和不确定性. 学习的难点是确定事件发生的可能性大小. 学习本节知识应注意猜测,试验,收集与分析实验结果,从中体会事件发生的可能性及大小. 二、教学对象分析: 1、初一学生性格开朗活泼,对新鲜事物特别敏感,且较易接受,因此,教学过程中创设的问题情境应较生动活泼,直观形象,且贴近学生的生活,从而引起学生的有意注意。 2、初一学生的概括能力较弱,推理能力还有待不断发展,所以在教学时,可让学生充分试验, 收集,分析,帮助他们直观形象地感知。

第4章串 作业(参考答案)

第四章串作业 参考答案: 1、简述空串和空格串(或称空格符串)的区别? 1)空串是指不包括任何字符的串,空格串指包含若干个空格字符的字符串; 2)空串长度为零,空格串长度为所包括的空格字符的个数。2、设s=‘I AM A STUDENT ’,t=‘GOOD’,q=‘WORKER’.求: 1)StrLength(s) 2)StrLength(t) 3)SubString(s,8,7) 4)SubSting(t,2,1) 5)Index(s,’A’) 6)index(s,t) 7)Replace(s,’STUDENT’,q) 8)Concat(SubString(s,6,2),Concat(t,SubString (s,7,8))) 答: 1)StrLength(s)=14 2)StrLength(t)=4 3)SubString(s,8,7) = ‘STUDENT’ 4)SubSting(t,2,1) = ‘O’ 5)Index(s,’A’)= 3

6)index(s,t) = 0 7)Replace(s,’STUDENT’,q) = ‘I AM A WORKER ’ 8)Concat(SubString(s,6,2),Concat(t,SubString(s, 7,8))) = ‘A GOOD STUDENT’ 3、若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行 concat(replace(S1,substr(S1,length(S2),length(S3)),S3),subs tr(S4,index(S2,‘8’),length(S2)))其结果是多少? 答:ABC###G1234 4、下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。请将空格处填上正确的语句。 void maxcomstr(orderstring *s,*t; int index, length) { int i,j,k,length1,con; index=0;length=0;i=1; while (i<=s.len) { j=1; while(j<=t.len) { if (s[i]= =t[j]) { k=1; length1=1; con=1; while(con) if (1) _ { length1=length1+1;k=k+1; } else (2) __; if (length1>length) { index=i; length=length1; } (3)____; } else (4) ___;

计算机组成原理第四章作业答案(终板)学习资料

计算机组成原理第四章作业答案(终板)

第四章作业答案 4.1 解释概念:主存、辅存,Cache, RAM, SRAM, DRAM, ROM, PROM ,EPROM ,EEPROM CDROM, Flash Memory. 解:1主存:主存又称为内存,直接与CPU交换信息。 2辅存:辅存可作为主存的后备存储器,不直接与CPU交换信息,容量比主存大,速度比主存慢。 3 Cache: Cache缓存是为了解决主存和CPU的速度匹配、提高访存速度的一种存储器。它设在主存和CPU之间,速度比主存快,容量比主存小,存放CPU最近期要用的信息。 4 RAM; RAM是随机存取存储器,在程序的执行过程中既可读出信息又可 写入信息。 5 SRAM: 是静态RAM,属于随机存取存储器,在程序的执行过程中既可读出信息又可写入信息。靠触发器原理存储信息,只要不掉电,信息就不会丢失。 6 DRAM 是动态RAM,属于随机存取存储器,在程序的执行过程中既可读出信息又可写入信息。靠电容存储电荷原理存储信息,即使电源不掉电,由于电容要放电,信息就会丢失,故需再生。 7 ROM: 是只读存储器,在程序执行过程中只能读出信息,不能写入信息。 8 PROM: 是可一次性编程的只读存储器。 9 EPROM 是可擦洗的只读存储器,可多次编程。 10 EEPROM: 即电可改写型只读存储器,可多次编程。 11 CDROM 即只读型光盘存储器。 12 Flash Memory 即可擦写、非易失性的存储器。

4.3 存储器的层次结构主要体现在什么地方?为什么要分这些层次?计算机如何管理这些层次? 答:存储器的层次结构主要体现在Cache—主存和主存—辅存这两个存储层次上。 Cache—主存层次在存储系统中主要对CPU访存起加速作用,即从整体运行的效果分析,CPU访存速度加快,接近于Cache的速度,而寻址空间和位价却接近于主存。 主存—辅存层次在存储系统中主要起扩容作用,即从程序员的角度看,他所使用的存储器其容量和位价接近于辅存,而速度接近于主存。 综合上述两个存储层次的作用,从整个存储系统来看,就达到了速度快、容量大、位价低的优化效果。 主存与Cache之间的信息调度功能全部由硬件自动完成。而主存—辅存层次的调度目前广泛采用虚拟存储技术实现,即将主存与辅存的一部份通过软硬结合的技术组成虚拟存储器,程序员可使用这个比主存实际空间(物理地址空间)大得多的虚拟地址空间(逻辑地址空间)编程,当程序运行时,再由软、硬件自动配合完成虚拟地址空间与主存实际物理空间的转换。因此,这两个层次上的调度或转换操作对于程序员来说都是透明的。

第四章习题答案

第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、是数据元素为字符的线性表,串的定义及操作。 2、串的基本操作,编制算法求串的其它操作。 3、串的存储结构,因串是数据元素为字符的线性表,所以存在“结点大小“的问题。静态和动态(块链结构,堆结构)存储的优缺点。 4、朴素模式匹配算法及改进(KMP)算法。 二、学习重点 1、串的基本操作,编写串的其他操作(如index,replace等)。 2、在串的模式匹配中,求匹配串的nextval 函数值。 3、尽管朴素的模式匹配的时间复杂度是O(m*n), KMP算法是O(m+n),但在一般情况下,前者实际执行时间近似O(m+n),因此至今仍被采用。KMP算法仅在主串与模式串存在许多“部分匹配”时才显得比前者块的多,其主要优点是主串不回嗍。 5、串操作在存储结构下的实现。 三、例题解析 1、利用串的如下基本运算 create(s),assign(s,t),length(s),substr(s,start,len),concat(s1,s2),编写操作replace的算法 replace(string &s,string t, string v) //本算法实现串的置换操作,用串v置换串s中所有非重叠的t串。

{i=INDEX(s,t);{判s中有无t} IF (i!=0) {CREATE (temp, ‘’);{t为临时串变量,存放部分结果} m=LENGTH(t);n=LENGTH(s); WHILE (i!=0) { ASSIGN (temp,CONCAT(temp,SUBSTR(s,1,i-1),v)); //用v替换t形成部分结果 ASSIGN (s,SUBSTR(s, i+m,n-i-m+1)); //t串以后形成新s串 n= n-(i-1)-m; i=INDEX(s,t); } ASSIGN (s,CONCAT(temp,s)); //将剩余s连接临时串t再赋给s } } int index(string s,string t) //本算法求串t在串s中的第一次出现。结果是:若t在s中,则给出串t的第一个字符在串s中的位置,若不存在,则返回0 {j=1;m=length(s); n=length(t); eq=true; WHILE((j<=m-n+1)&& eq ) IF equal(substr(s,j,n),t) eq=false; ELSEj=j+1; IF( j<=m+n-1)return(j); Return(0);

严蔚敏《数据结构(c语言版)习题集》答案第四章串

《一定能摸到红球吗?》说课稿 林银花 一、教材说明: 1、课题:《一定能摸到红球吗?》 2、本节内容的地位和作用 在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活. 3、教学目标设计: (1)认知目标: (A)经历猜测.实验.收集与分析试验结果等过程 (B)体会事件的发生的不确定性知道事情发生的可能性有多大。 (2)、能力目标: (A)经历游戏等的活动过程,初步认识确定事件和不确定事件 (B)在与其它人交流的过程中,能合理清晰地表达自己的思维过程; (3)、情感目标: (A)通过创设游戏情境,让学生主动参与,做“数学实验”,激发学生学习的热情和兴趣,激活学生思维。 (B)在与他人的合作过程中,增强互相帮助、团结协作的精神。 (C)体会到在生活中我们可以从确定和不确定两方面分析一件事情. 4、本课重点、难点分析: 学习的重点是初步体验事情发生的确定性和不确定性. 学习的难点是确定事件发生的可能性大小. 学习本节知识应注意猜测,试验,收集与分析实验结果,从中体会事件发生的可能性及大小. 二、教学对象分析: 1、初一学生性格开朗活泼,对新鲜事物特别敏感,且较易接受,因此,教学过程中创设的问题情境应较生动活泼,直观形象,且贴近学生的生活,从而引起学生的有意注意。 2、初一学生的概括能力较弱,推理能力还有待不断发展,所以在教学时,可让学生充分试验,收集,分析,帮助他们直观形象地感知。 3、初一学生已经具备了一定的学习能力,所以本节课中,应多为学生创造自主学习、

计算机网络第四章作业

第四章作业 1.在物理线路上传输比特流过程中造成传输差错的主要原因、差错类型、及特点: 答:传输过程中,差错主要是由通信过程中的噪声引起的。通信信道的噪声分为两类:热噪声和冲击噪声。其中,热噪声引起的差错是随机差错,或随机错;冲击噪声引起的差错是突发差错,或突发错,引起突发差错的位长称为突发长度。热噪声的特点是:时刻存在,幅度较小,强度与频率无关,但频谱很宽;冲击噪声是由外界电磁干扰引起的,与热噪声相比,冲击噪声幅度较大,是引起传输差错的主要原因。 8.采用"0比特插入/删除"技术的原因及其基本工作原理: 答:采用"0比特插入/删除"技术的原因是为了解决帧数据传输的透明性问题,引入了"0 比特插入/删除方法"。基本工作原理:发送端在两个标志字段为F之间的比特序列中,如果检查出连续的5个1,不管它后面的比特位是0或1,都增加1个0;那么在接受过程中,在两个标志字段为F之间的比特序列中,坚持出连续的5个1之后就删除1个0。 9.如果在测试一个实际远程通信系统时,一次连续检测4000B的数据未发现错误,我们能否说这个系统的误码率为0?为什么? 答:不能。因为连续测试4000B的数据时可能发现没有错误,但如果测试的二进制位数比4000B时,就可能出现错误,那这个系统的误码率就不是为0了 补充作业: 1、HDLC帧可分为哪几大类?试简述各类帧的作用。 答:分三大类—信息帧、监控帧和无编号帧。1信息帧:用于数据传输,还可同时用来对已收到的数据进行确认和执行轮询功能。2监控帧:用于数据流控制,帧本身不包含数据,但可执行对数据帧的确认,请求重发信息帧和请求暂停发送信息帧等功能。3无编号帧:主要用于控制链路本身,不使用发送或接收帧序号。 2、简述HDLC帧各字段的意义。HDLC用什么方法保证数据的透明传输? 答: HDLC帧的格式,信息字段(长度可变)为数据链路层的数据,它就是从网络层传下来的分组。在信息字段的两端是24bit的帧头和帧尾。HDLC帧两端的标志字段用来界定一个帧的边界,地址字段是用来填写从站或应答站的地址信息,帧校验序列FCS用来对地址、控制和信息字段组成的比特流进行校验,控制字段最复杂,用来实现许多主要功能。 采用零比特填充法来实现链路层的透明传输,即在两个标志字段之间不出现6个连续1。具体做法是在发送端,当一串比特流尚未加上标志字段时,先用硬件扫描整个帧,只要发现5个连续的1,则在其后插入1个0,而在接收端先找到F字段以确定帧的边界,接着再对其中的比特流进行扫描,每当发现5个连续的1,就将这5个连续1后的1个0删除,以还原成原来的比特流。

第四章 串答案52450

第四章串 注:子串的定义是:串中任意个连续的字符组成的子序列,并规定空串 是任意串的子串,任意串是其自身的子串。若字符串长度为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.01122312 7.01010421 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)。

“第四章 串”自测作业

“第四章串”自测作业 单项选择题 1.串的连接运算不满足 D 。 A. 分配律 B. 交换律 C. 结合律 D. 都不满足 2.串是一种特殊的线性表,其特殊性体现在 B 。 A. 可以顺序存储 B. 数据元素是一个字符 C. 可以链接存储 D. 数据元素可以是多个字符 3.设有两个串p和q,求q在p中首次出现的位置的运算称作 B 。 A. 连接 B. 模式匹配 C. 求子串 D. 求串长 4.串是一个 B 的序列。 A. 不少于一个字母 B. 有限个字符 C. 不少于一个字符 D. 空格或字母 5.已知串s=’ABCDEFGH’,则s的所有不同子串的个数为 D 。 A. 8 B. 9 C. 36 D. 37 6. 设串s1=’ABCDEFG’,s2=’PQRST’,函数concat(x,y)返回x 和y 串的连 接串,substring(s,i,j)返回串s 的从序号i 的字符开始的j 个字符组成的子串,Strlength(s)返回串s 的长度,则concat(substr ing(s1,2,Strlength(s2)),substring(s1,len(s2),2))的结果串是 D 。 A. BCDEF B. BCDEFG C. BCPQRST D. BCDEFEF 填空题 1.两个串相等的充分必要条件是两个串的长度相等且对应位置的字符相同。 2.空格串是由一个或多个空格字符组成的串,其长度等于包含空格的个数。 3.模式串‘abaabade’的next函数值为 01122341 (请列表说明)。

4.在串S=’tuition’中,以t为首字符且值不相同的子串有10 个,它们是‘t’‘tu’ ‘tui’‘tuit’‘tuiti’‘tuitio’‘tuition’‘ti’‘tio’‘tion’。 5. 使用“求子串”substring(S,pos,len)和“联接”concat(S1,S2)的串操作,可从串 s=’conduction’中的字符得到串t=’cont’,则求t的串表达式为 concat(substring(s,1,3),substring(s,7,1)) 。 6. 已知字符串p=’abcabcabbac’,则next(3)和next(6)分别为① 1 、② 3 。 7. 设对主串’bcdbcddabcdbcdbac’和模式串’bcdbcdb’进行KMP模式匹配。第1趟 匹配失败后,则下一趟匹配将由主串的第① 7 个字符与模式串的第__②_4__字符开始比较(字符串中字符从1开始编号)。 编程题 #include #include #include #define MAX 30 typedef struct stack { char data[MAX]; int top; }*STACK,node; void initstack(STACK st) { st->top=-1; } int push(STACK st,char *stringin) { if(st->top==MAX-1) return 0; while(*stringin) st->data[++st->top]=*(stringin++);

最新计算机组成原理第四章作业答案(终板)

1 第四章作业答案 2 4.1 解释概念:主存、辅存,Cache, RAM, SRAM, DRAM, ROM, 3 PROM ,EPROM ,EEPROM CDROM, Flash Memory. 4 解:1主存:主存又称为内存,直接与CPU交换信息。 5 2辅存:辅存可作为主存的后备存储器,不直接与CPU交换信息,容量比主存6 大,速度比主存慢。 7 3 Cache: Cache缓存是为了解决主存和CPU的速度匹配、提高访存速度的一8 种存储器。它设在主存和CPU之间,速度比主存快,容量比主存小,存放CPU 9 最近期要用的信息。 10 4 RAM; RAM是随机存取存储器,在程序的执行过程中既可读出信息又11 可写入信息。 12 5 SRAM: 是静态RAM,属于随机存取存储器,在程序的执行过程中既可读出信13 息又可写入信息。靠触发器原理存储信息,只要不掉电,信息就不会丢失。 14 6 DRAM 是动态RAM,属于随机存取存储器,在程序的执行过程中既可读出信15 息又可写入信息。靠电容存储电荷原理存储信息,即使电源不掉电,由于电容16 要放电,信息就会丢失,故需再生。 17 7 ROM: 是只读存储器,在程序执行过程中只能读出信息,不能写入信息。 18 8 PROM: 是可一次性编程的只读存储器。 19 9 EPROM 是可擦洗的只读存储器,可多次编程。 20 10 EEPROM: 即电可改写型只读存储器,可多次编程。

21 11 CDROM 即只读型光盘存储器。 22 12 Flash Memory 即可擦写、非易失性的存储器。 23 24 4.3 存储器的层次结构主要体现在什么地方?为什么要分这些层次?计算机25 如何管理这些层次? 26 答:存储器的层次结构主要体现在Cache—主存和主存—辅存这两个存储27 层次上。 28 Cache—主存层次在存储系统中主要对CPU访存起加速作用,即从整体运29 行的效果分析,CPU访存速度加快,接近于Cache的速度,而寻址空间和位价却30 接近于主存。 31 主存—辅存层次在存储系统中主要起扩容作用,即从程序员的角度看,32 他所使用的存储器其容量和位价接近于辅存,而速度接近于主存。 33 综合上述两个存储层次的作用,从整个存储系统来看,就达到了速度快、34 容量大、位价低的优化效果。 35 主存与Cache之间的信息调度功能全部由硬件自动完成。而主存—辅36 存层次的调度目前广泛采用虚拟存储技术实现,即将主存与辅存的一部份通过37 软硬结合的技术组成虚拟存储器,程序员可使用这个比主存实际空间(物理地38 址空间)大得多的虚拟地址空间(逻辑地址空间)编程,当程序运行时,再由39 软、硬件自动配合完成虚拟地址空间与主存实际物理空间的转换。因此,这两40 个层次上的调度或转换操作对于程序员来说都是透明的。 41 42

单片机第四章答案

第四章习题与思考答案 4-3 外设端口有哪两种编址方法?各有什么特点? 答:微型计算机对I/O端口进行编址的方式有两种:单独编址和统一编址。 1.外设端口单独编址 特点:(1)需要专用I/O指令,实现CPU和外设间数据传送。 (2)I/O端口地址的独立。 2.外设端口与存储器统一编址 特点:(1)无需专用I/O指令 (2)I/O端口地址是内存地址中的一部分。 4-4 I/O数据有哪四种传送方式?各有什么特点? CPU与外设之间的数据传送方式有无条件传输方式、查询方式、中断方式和DMA方式。 1.无条件传输方式 无条件传送又称为同步传送或直接传送方式。CPU在与外设进行数据交换时,外设随时处于准备好的状态,这样CPU不必查询外设的状态,也不必等待,而是直接进行数据的输入输出。 2.查询传输方式 查询传输方式也称为异步传输、条件传输方式。采用查询方式时,CPU每次与外设进行数据传输前,都要先读取状态端口的信息,查询外设是否准备就绪,只有在外设处于“就绪”状态时,才能向外设的数据端口发送数据或从其中读取数据,如果外设未就绪,就需要CPU原地循环等待外设完成准备工作,所以CPU的工作效率不高。 3.中断传输方式 在中断传输方式中,以外设为主动方,每次外设准备好就可以向CPU发出一次中断请求,使CPU暂停当前正在执行的程序,转去与外设进行一次数据传输工作,当完成了本次数据的输入或输出后,再回到原先被打断的地方继续执行原来的程序。中断方式可以大大提高CPU的效率和系统的实时性。 4.DMA方式

DMA方式即直接存储器存取方式,是一种在DMA控制器的控制下实现的外设与存储器之间的直接数据传输方式。在整个DMA传输过程中,是不需要CPU参与的,完全是通过硬件逻辑电路用固定的顺序发地址和读写信号来实现的,数据不需要经过CPU而是在外设和存储器之间高速传输。 4-5 8051内部的并行I/O口有哪些?各有什么功能? 1.P0口 P0口的第一功能是作为通用I/O口使用。 P0口的第二功能是作为地址(低8位地址)/数据总线的复用口。 2.P1口 P1口的第一功能是作为通用I/O口使用 3.P2口 P2口的第一功能是通用I/O口 P2口的第二功能是作为地址总线,输出高8位地址信号,与P0口输出的低8位地址组合,共同完成外部存储器单元16位地址信号的输出。 4.P3口 P3口的第一功能是通用I/O口,且各引脚有不同的第二功能。 4.8 中断处理的过程是怎样的? 所谓中断是指CPU在正常执行程序的过程中,由于某种随机发生的事件使它暂停当前正在执行的程序,转而去执行另外的一段程序(中断服务程序),在这段程序完成后自动返回被打断的程序处继续执行的过程。 CPU与外设之间一个完整的可屏蔽中断传输过程包括:中断请求、中断响应、中断处理和中断返回。 4.9 8051单片机有几个中断源?各自对应的中断标志是什么?对应的中断服务子程序入口地址是什么?IE寄存器的作用是什么? 8051单片机提供5个中断源,其中2个外部中断,2个定时器/计数器中断,1个串行口中断。

第四章第五章作业

第4~5章 串和数组和广义表 一、填空题 1. 称为空串; 称为空白串。 2. 设S=“A;/document/Mary.doc ”,则strlen(s)= , “/”的字符定位的位置为 。 4. 子串的定位运算称为串的模式匹配; 称为目标串, 称为模式。 5. 设目标T=”abccdcdccbaa”,模式P=“cdcc ”,则第 次匹配成功。 7. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 ;末尾元素A 57的第一个字节地址为 ;若按行存储时,元素A 14的第一个字节地址为 ;若按列存储时,元素A 47的第一个字节地址为 。 (注:数组是从0行0列还是从1行1列计算起呢?由末单元为A 57可知,是从0行0列开始!) 8. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 。 9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的 、 和 。 10.求下列广义表操作的结果: (1) GetHead 【((a,b),(c,d))】=== ; (2) GetHead 【GetTail 【((a,b),(c,d))】】=== ; (3) GetHead 【GetTail 【GetHead 【((a,b),(c,d))】】】=== ; (4) GetTail 【GetHead 【GetTail 【((a,b),(c,d))】】】=== ; 二、单选题 ( )1. 串是一种特殊的线性表,其特殊性体现在: A.可以顺序存储 B.数据元素是一个字符 C.可以链式存储 D.数据元素可以是多个字符 ( )2. 设有两个串p 和q ,求q 在p 中首次出现的位置的运算称作: A.连接 B.模式匹配 C.求子串 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 ( )4. 假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。(无第0行第0列元素) A.16902 B.16904 C.14454 D.答案A, B, C 均不对 ( )5. 设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,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. 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。 ? ???????????? ?=n n n n a a a a a a A ,2,1,2,21,21,1

相关文档
最新文档