第5章 串
第5章 习题与思考题和答案
4.下段程序执行的输出结果是。
S=0:T=0:U=0
For i=1 To 3
For j=1 To i
For K=j To 3
S=S+1
Next K
T=T+1
Next j
U=U+1
Next i
Print S;T;U
A.3 6 14B.14 63C.14 3 6D.16 4 3
Next j
If j>Int (Sqr(n-m))ThenPrint n,m,n-m
EndIf
Next m
Next n
EndSub
六
(1)编程序计算:1!+3!+5!+….+11!
(2)输入两个正整数m和n,求其最大公约数a和最小公倍数b,计算最大公约数a的方法如下:先算出m/n余数r,若r等于0,则n为最大公约数;若r不为0,则把原来的n值作为新的m值,把原来的r值作为新的n值,继续运算。这样辗转相除,直到r为0,此时的n值为最大公约数a,最小公倍数则可用原始m与n值的积除以最大公约数求得。
Private Sub Form_click()
Dim k,a,b as integer
a=20
b=2
k=2
Do While k<=a
b=b*2
k=k+5
Loop
Print b
End Sub
5.写出以下程序在单击命令按钮后的输出结果。
Private Sub Form_click()
k=0
fori=1 to 5
If n <= 0 Or m <= 0 Then
第四、五章串、数组和广义表练习题答案
第四、五章串、数组和广义表练习题答案一.填空题1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。
3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。
5. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
6. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)7. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。
答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89508. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
9.求下列广义表操作的结果:(1)GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号(2)GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ;(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b ;(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d);10.C语言规定,字符串常量按_字符数组_____处理,它的值在程序的执行过程中是不能改变的。
Python程序设计-第5章-字符串-第6章(2)-(第9次课)知识讲解
#Exp5_2.py s=raw_input('请输入几个数字,用逗号分隔:') li=s.split(',') print li sum=0 for x in li:
sum=sum+float(x) print 'sum=',sum 输入及程序运行结果: 请输入几个数字,用逗号分隔:23,2,5,12.3 ['23', '2', '5', '12.3'] sum= 42.3
Li2=Li[:]
print Li
Li.sort()
#列表元素按升序排序
print '升序:'
print Li
print Li2
print '降序:'
Li2.sort(reverse=True) #列表元素按降序排序
print Li2
程序运行结果:
['apple', 'peack', 'wps', 'word', 'access', 'excel', 'open', 'seek']
>>> s[1:3]
#取出位置为1到位置为2的字符,不包括3
'bc'
>>> s[:3]
#取出从头至位置为2的字符
'abc'
>>> s[4:]
#取出从位置4开始的所有字符
'ef'
>>> s[:]
#取出全部字符
第5章 字符串操作
5.4.4 截取字符串
为保持页面整洁,开发时常对一些超长的文本进行部分显
示 <?php $text="祝全国程序开发人员在编程之路上一帆风顺二龙腾 飞三羊开泰四季平安五福临门六六大顺七星高照八方来财 九九同心十全十美百事可乐千事顺心万事吉祥PHP编程一 级棒"; if(strlen($text)>30){ echo substr($text,0,30)."…"; } else{ echo $text; }
5.4.1 去除字符串首尾空格和特殊字符
2、ltrim()函数 ltrim()函数用于去除字符串左边的空格或者指定字符串。
string ltrim(string str[,string charlist]); <?php $str=" (:@_@ 重庆第二师范学院 计算机科学二班 @_@:) "; echo ltrim($str); echo "<br>"; echo ltrim($str,"(:@_@ @_@:)" ); ?>
5.3 字符串的连接符
半角句号“.”是字符串连接符,可以把两个或两个以上
的字符连接成一个字符串。 <?php $name = "重庆第二师范学院:"; $url = ""; echo $name.$url.".cn"; ?> <?php $name = "重庆第二师范学院:"; $url = ""; echo "$name.$"; ?>
strcasecmp()函数不区分字符大小写
注: strcmp()函数和strcasecmp()函数在用户登录时,应用广泛。
计算机科学第5章 数据结构与算法
处理步骤2
符合条件
分支条件 不符合条件 符合条件 进入循环
循环条件 不符合条件 循环结束
„
分支1
分支2
循环体
处理步骤N
处理步骤N
处理步骤N
结束
(a)顺序结构
结束
(b)分支结构
结束
(c)循环结构
图 5-3 算法基本结构示意图
5.1 数据结构概述
5.1.2 算法
在大多数情况下,时间和空间因素可以进行相应转换,具体选择时可根
据实际需要和成本因素确定选择什么策略。 另外,需要提醒一点,不是时间复杂度高,算法的数学复杂程序就高。
使用更高级的数学方法,能够以更少的时间和空间代价获取处理结果。
这时,用于算法执行的时间虽然少了,但是用于算法设计的时间会大大 增加。如果设计出的程序有足够多的使用率,代价总体上是值得的。
5.1 数据结构概述
5.1.2 算法
用计算机解决一个复杂的实际问题,大体需要如下的步骤。 (1)将实际问题数学化,即把实际问题抽象为一个带有一般性的数学 问题。这一步要引入一些数学概念,精确地阐述数学问题,弄清问题的 已知条件、所要求的结果、以及在已知条件和所要求的结果之间存在着 的隐式或显式的联系。 (2)对于确定的数学问题,设计其求解的方法,即所谓的算法设计。 这一步要建立问题的求解模型,即确定问题的数据模型并在此模型上定 义一组运算,然后借助于对这组运算的调用和控制,从已知数据出发导 向所要求的结果,形成算法并用自然语言来表述。这种语言还不是程序 设计语言,不能被计算机所接受。 (3)用计算机上的一种程序设计语言来表达已设计好的算法。换句话 说,将非形式自然语言表达的算法转变为一种程序设计语言表达的算法。 这一步叫程序设计或程序编制。 (4)在计算机上编辑、调试和测试编制好的程序,直到输出所要求的 结果。
第5章-串
子串,s旳串值变化。
5-2 串旳表达和实现
一.串旳顺序存储
1.存储方式:同一般旳线性表旳顺序存储构 造完全相同.用一组地址连续旳存储单元存 储字符序列, 据预定义大小,为每个定义旳串 变量分配一种固定长度旳存储区。
2.索引存储旳例子 设字符串:A=”Red” B=”Yellow” C=”Blue” D=”White” 用指针free指向堆中未使用空间旳首地址。
索引表: Name A B C D ……
Length 3 6 4 5 ……
Stradr 0 3 9
……
free 堆:
R e d Y e l l o w B l u E Wh i t e …
为 len 旳子串。而且赋予给s2,len=0得到旳是空串。 【例5-7】 SubStr ("abcdefghi",3,4) = "cdef”
4. 串比较: Strcmp (s1,s2) 操作条件:串s1,s2存在。 操作成果:若s1= =s2,返回值为0;若s1<s2, 返
回值<0;若s1>s2, 返回值>0。
(2)使用gets() 函数
格式为:gets(字符数组名); 【例5-3】 char str[10]; printf("Input your str: "); gets(str);
•使用gets ()方式输入时,字符串中允许具有空
格。
2.字符串旳输出
字符串旳输出也有两种措施:
(1)使用printf () 函数 使用printf () 函数时,输出格式中要设置"%s",再
止符,以此表达串旳结尾。例如C语言中处理定长串旳措施
第5章 语法分析——自下而上
B d
e
SaAcBeaAcdeaAbcdeabbcde SS→aAcBeB→d A→Ab A→b
每次归约的都是句型中的句柄。
22
算符优先分析法
LR分析法
23
1. LR分析法介绍
2. LR(0)分析表的构造
3. SLR分析表的构造
24
从左(Left,L)向右扫描输入串,构造一 个最右推导(Rightmost,R)的逆过程 进行规范归约(最左归约),每次归约 的都是真正的句柄; 对文法限制最少,是识别效率较强的方 法; 出错处理能力较强; 采用自动构造技术(构造LR分析表)
B
e
A
b
d
S → aAcBe A → Ab A→b B→d
b
分 析 树
输入串:abbcde
7
短语 直接短语 句柄
8
定义:设文法G的开始符号为S,是文法 *则称β是 的一个句型,若有SA且Aβ, + 相对于非终结符A的一个短语。 句型
短语是指句型中的某个部分,这部分可以由某 个非终结符推出。 可以利用语法树来找出句型中的所有短语。
查表 A[0,a]=s2,进栈 A[2,a]=s2,进栈 A[2,b]=s5,进栈 A[5,b]=r2,按第2条产生式归约 G[2,A]=3,进入状态3 A[3,b]=s4,进栈 A[4,#]=r1,归约 G[0,A]=1,进入状态1 A[1,#]=acc 31
对于一个文法,如果能够构造一张分析表, 使得它的每个入口均是唯一确定的,则我们 把这个文法称为LR文法。
33
前缀:字的任意首部。即移去符号尾
部零个或多于零个符号得到的一个符
号串。 例:abc的前缀有ε,a, ab, abc
第5章 串
【例5-8】子串定位 例 IndexStr ("abcdebda","bc")=2 " "" " IndexStr ("abcdebda","ba")= 0 " "" " 6. 串插入 InsStr (s,t,i) 操作条件: , 存在 操作条件:串s,t存在 操作结果:将串 插入到串 的第i个字符前 的串值发 插入到串s 个字符前, 操作结果:将串t插入到串 的第 个字符前,s的串值发 生改变. 生改变. 7. 串删除 DelStr(s,i,len) 操作条件: 存在 操作条件:串s存在 操作结果:删除串 中第i个字符起长度为 的子串, 个字符起长度为len的子串 操作结果:删除串s 中第 个字符起长度为 的子串,s 的串值改变. 的串值改变.
5-1-2 串的输入与输出 1.字符串的输入 . 语言中, 在C语言中,字符串的输入有两种方法: 语言中 字符串的输入有两种方法: (1)使用 )使用scanf () 函数 使用scanf () 函数时,输入格式中要设置"%s", 函数时,输入格式中要设置" ", 使用 再加上字符数组名称. 再加上字符数组名称. 【例5 - 2 】 char str[10]; printf(" printf("Input your str: "); scanf("%s" scanf("%s",str); 使用 使用scanf ()方式输入时,字符串中不能含有空格. 方式输入时, 方式输入时 字符串中不能含有空格. 在C++中还可以用输入流对象cin . C++中还可以用输入流对象 中还可以用输入流对象cin
第3.3.5章 串操作类指令
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
2.串比较指令CMPS 2.串比较指令CMPS 串比较指令 语句格式: 语句格式: ① CMPS SRC, SRC,DST CMPSB——字节串比较 ② CMPSB 字节串比较 CMPSW——字串比较 ③ CMPSW 字串比较
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
当相等/为 时重复串操作 (2) REPE/REPZ 当相等 为0时重复串操作 )
格式: 格式:REPE/REPZ string primitive (用来检查两字符串中是否 其中string primitive可为 可为CMPS或SCAS指令 有不同的元素 ) 其中 可为 或 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0或ZF=0(即某次比较的结果两个操 ) 或 ( 作数不等)时退出REP,否则(即某次比较的结果两个操作数相等) 作数不等)时退出 ,否则(即某次比较的结果两个操作数相等) 往下执行。 往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。 总结:重复串操作条件: 总结:重复串操作条件: (COUNT REG)≠0且ZF=1; (即某次 ) 且 ; 比较的结果两个操作数相等) 比较的结果两个操作数相等) 退出串操作条件: 退出串操作条件: (COUNT REG)=0或ZF=0; 串操作条件 ) 或 ;
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
《自动控制原理》第5章习题答案
jω
期望极点
期望极点
− p3
j
600
j0.58
− p2
-1
− p1
0 -j
-3
-2
σ
-2
19.150 -1
40.880 0.33 0
119.640
校核相角条件: 根据在图中主导极点位置的近似值-0.33 ± j 0.58 和开环极点的位置, 作由各开环极点到期望主导极点的向量,
Φ = -119.640 -40.880 -19.150 = -179.670≈-1800
− p2
-10 -5
− p1
0
σ
②计算期望主导极点位置。
超调量σ% ≤ 20%,调整时间 ts ≤ 0.5s
4
ζω n
= 0.5s , ζω n = 8
σ%=e
−
ζπ
1−ζ 2
= 0.2 , ζ = 0.45 , θ = 63.2 0
故,期望主导极点位置, s1, 2 = −8 ± j15.8
期望极点
Gc ( s ) =
4,控制系统的结构如图 T5.3 所示,Gc(s)为校正装置传递函数,用根轨迹法设计校正装置,
使校正后的系统满足如下要求,速度误差系数 Kv ≥ 20,闭环主导极点 ω n = 4 ,阻尼系数 保持不变。
R(s)
+ -
Gc(s)
4 s ( s + 2)
Y(s)
图 T5.3
解:①校核原系统。
14
+20
0dB
1
Φ (ω ) 度
900 00
5
ω rad/s
ω rad/s
2,控制系统的结构如图 T5.1 所示,试选择控制器 Gc(s), 使系统对阶跃响应输入的超调量
数据结构(c语言版)
目录第1章绪论第2章线性表第3章栈和队列第4章串第5章数组第6章树第7章图第8章查找第9章排序第10章文件第1章绪论1.1数据结构的基本概念和术语1.2算法描述与分析1.3实习:常用算法实现及分析习题11.1数据结构的基本概念和术语1.1.1引例首先分析学籍档案类问题。
设一个班级有50个学生,这个班级的学籍表如表1.1所示。
表1.1学籍表序号学号姓名性别英语数学物理0120030301李明男8691800220030302马琳男7683855020030350刘薇薇女889390个记录又由750我们可以把表中每个学生的信息看成一个记录,表中的每个数据项组成。
该学籍表由个记录组成,记录之间是一种顺序关系。
这种表通常称为线性表,数据之间的逻辑结构称为线性结构,其主要操作有检索、查找、插入或删除等。
又如,对于学院的行政机构,可以把该学院的名称看成树根,把下设的若干个系看成它的树枝中间结点,把每个系分出的若干专业方向看成树叶,这样就形成一个树型结构,如图1.1所示。
树中的每个结点可以包含较多的信息,结点之间的关系不再是顺序的,而是分层、分叉的结构。
树型结构的主要操作有遍历、查找、插入或删除等。
最后分析交通问题。
如果把若干个城镇看成若干个顶点,再把城镇之间的道路看成边,它们可以构成一个网状的图(如图1.2所示),这种关系称为图型结构或网状结构。
在实际应用中,假设某地区有5个城镇,有一调查小组要对该地区每个城镇进行调查研究,并且每个城镇仅能调查一次,试问调查路线怎样设计才能以最高的效率完成此项工作?这是一个图论方面的问题。
交通图的存储和管理确实不属于单纯的数值计算问题,而是一种非数值的信息处理问题。
图1.2交通示意图1.1.2数据结构有关概念及术语一般来说,数据结构研究的是一类普通数据的表示及其相1968 D.E.Knuth 教授开创了数据结“数据结构”是计算机专业的一门专业基础课。
它为操作关的运算操作。
数据结构是一门主要研究怎样合理地组织数据,建立合适的数据结构,提高计算机执行程序所用的时间效率和空间效率的学科。
C语言第5章
问题分析 可以使用多个赋值语句,完成把这些价格存入一个表格的任务。用嵌套for循环 打印输出结果。输出时用转移字符’\t’控制对齐,行号变化时必须插入一个’\n’ 以输出回车换行。为了在输出中增添描述性标题,只需简单地在首行数值打印之 前打印一行标题,在首列数值打印前打印一列标题即可。
程序实现
§5.3.4 多维数组的初始化和引用
#include <stdio.h> #include <stdlib.h> void main() { int i,j,nSum=0, nAverage,nAver[3]; int nScore[3][5]={{80,61,59,85,76},{75,65,63,87,77},{92,71,70,90,85}}; for(i=0;i<3;i++) { for(j=0;j<5;j++) nSum=nSum+nScore[i][j]; nAver[i]=nSum/5; nSum=0; } nAverage=(nAver[0]+nAver[1]+nAver[2])/3; printf("math:%d\nc languag:%d\ndFoxpro:%d\n",nAver[0],nAver[1],nAver[2]); printf("total:%d\n", nAverage); }
输出方法:
输出第i行第j列元素: printf(“%d”,a[i][j]); 输出整个数组元素:
for (i=0;i<2;i++) for(j=0;j<3;j++) printf(“%d”,a[i][j]);
例5-5 用二维数组实现如下表5-2所示的计算每门课的 平均分数。
编译原理 第5章
例:有文法G(S):
S→bAb A→( B | a B→Aa ) 解:文法符号优先关系推导如下: (1) 求=· 关系: 由S→bAb , A→( B, B→Aa ) b =· A, A =· b, (=· B , A =· a, a =· )
自底向上的语法分析
• 核心问题
– 寻找可归约串。对“可归约串”概念的不同定义, 就形成了不同的自底向上的分析方法。在算符优 先分析法中我们用“最左素短语”来刻画“可归 约串”,在“规范归约”中,则用“句柄”来刻 画“可归约串”
分析方法
• 输入串:
abbcde
S → a A c B e A → A b|b B → d
S
b
>·
=· <·
>·
A
(
=·
<· <· =·
=·
<·
B
a
>·
>·
>·
>· =· =·
)
#
寻找句柄
>·
<· <·
>·
简单优先文法的定义: (1)在文法符号集中,任意两个符号之间最多只有 一种优先关系; (2)在文法中任意两个产生式没有相同的右部。
语法树结构如下:
S S S b S b
b
A b
B
b
U S0…Sj-1SjSj+1Sj+2… …Si-1SiSi+1…Sn
算符优先分析
• 我们要通过两个相邻符号SiSi+1之间的关系来找到句 柄: – SiSi+1在句柄内:必然有规则U …SiSi+1… – Si在句柄内部,但是Si+1在句柄之后:必然有规则 U …Si,且存在规范句型…USi+1…。 – 如果Si+1在句柄内,而Si在句柄外,那么必然存在 规范句型…SiU…,且U Si+1…。
数据结构课后习题(第4-5章)
【课后习题】第4章 串 第5章 数组和广义表网络工程2010级( )班 学号: 姓名:题 号 一 二 三 四 总分 得 分一、填空题(每空1分,共30分)1. 串有三种机内表示方法: 、 和 ,其中前两种属于顺序存储结构,第三种属于 。
2. 若n 为主串长度,m 为子串长度,则串的BF (朴素)匹配算法最坏的情况下需要比较字符的总次数为 ,T(n)= 。
3. 是任意串的子串;任意串S 都是S 本身的子串,除S 本身外,S 的其他子串称为S 的 。
4. 设数组a[1…50, 1…60]的基地址为1000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[32,58]的存储地址为 。
5. 对于数组,比较适于采用 结构够进行存储。
6. 广义表的深度是指_______。
7. 将一个100100 A 的三对角矩阵,按行优先存入一维数组B[297]中,A 中元素66,66A 在B 数组中的位置k 为 。
8. 注意:a i,j 的k 为 2(i-1)+j-1,(i=1时j=1,2;1<i<=n 时,j=i-1,i,i+1) 。
9. 称为空串; 称为空白串。
10. 求串T 在主串S 中首次出现的位置的操作是 ,其中 称为目标串, 称为模式。
11. 对称矩阵的下三角元素a[i,j],存放在一维数组V 的元素V[k]中(下标都是从0开始), 12. k 与i ,j 的关系是:k= 。
13. 在n 维数组中每个元素都受到 个条件的约束。
14. 同一数组中的各元素的长度 。
15. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。
16.稀疏矩阵中有n个非零元素,则其三元组有行。
17.求下列广义表操作的结果:18.(1)GetHead【((a,b),(c,d))】=== ;19.(2)GetHead【GetTail【((a,b),(c,d))】】=== ;20.(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== ;21.(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== ;22.广义表E=(a,(b,E)),则E的长度= ,深度= ;二、判断题(如果正确,在下表对应位置打“√”,否则打“⨯”。
数据结构(C语言版)第4-5章习题答案
第4~5章串和数组自测卷答案一、填空题(每空1分,共20分)1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
(对应严题集4.1①,简答题:简述空串和空格串的区别)2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。
4. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。
6. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)8. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。
答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89509. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
第5章 单片机串口通信
RS-232C标准总线为25根,可采用标准的DB-25和DB-9的D型插 头。目前计算机上只保留了两个DB-9插头,作为提供多功能I/O卡 或主板上COM1和COM2两个串行接口的连接器。
引脚 名称
功能
引脚 名称
功能
1 DCD 载波检测
6 DSR 数据准备完 成
2 RXD 发送数据 7 RTS 发送请求
数据位:要传输的数据信息,可以是字符或数据,一般为 5~8位,由低位到高位依次传送。
可编程位:位于数据位之后,占1位,用于发送数据的校验, 或传送多机串行通信的联络信息。
停止位:位于数据位末尾,占1位,始终为高电平,用于向 接收端表示1帧数据已发送完毕。
异步通信特点:
对收发双方的时钟精度要求较低(收发双方不同步时,能 依靠在每帧开始时的不断对齐,自行纠正偏差); 传送速度较低(每个字节都要建立一次同步)。
串行口的四种工作方式对应三种波特率。由于 输入的移位时钟的来源不同,所以,各种方式的波 特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)·fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
第5章 单片机的串口通信
知识
5.1 单片机串行口通信
一、串口工作原理
1. 并口通信和串口通信(数据通信的两种常用形式)
(1)并口方式——数据的各位同时发送或同时接收。
并行传送特点:传送速度快,但因需要多根传输线, 故一般只在近距离(3米、5米、7米)通信中使用。 否则,相互干扰大,无法快速传送
(2)串行方式——数据的各位依次逐位发送或接收。
编译原理 第05章_算符优先分析法
S)中不存在形如A…BC…的产生式,则称之为算符文
即:如果文法G中不存在具有相邻非终结符的产生式,
符文法,如果该文法中的任何终结符号对a,b之间,在三种
关系中最多只有一种成立,则称该文法为算符优先文法。
(1)求文法中每个非终结符P的首终结符集合FIRSTVT(P)
①定义:FIRSTVT(P)={a|P+a…或者P+Qa…,a ∈VT,P,Q
FOR
THEN
FIRSTVT(Xi+1)中的每个a DO THEN
置 Xi≮a;
IF Xi为非终结符而Xi+1为终结符
FOR
置 END;
LASTVT(Xi)中的每个a DO
a≯Xi+1;
4、直观算法优先算法:
(1)直观算符优先法的下推自动机:
两个工作栈:①算符栈OPTR:用于存放运算符
②算量栈OPND:用于存放运算量
E
E T F i + T T * F F i i
第5章 算符优先分析法
②算符优先分析法每一次归约时,可归约串中至少有一个终结符。
i+i*i# E+i*i# E+T*i# E+T*F# E+T# E#
E E i + T T * F i i
第5章 算符优先分析法
(3)最左素短语:
素短语是指至少含有一个终结符,并且除它自身 之外不再含有更小的素短语。 最左素短语指处于句型最左边的那个素短语。 最左素短语具备三个条件:
i+i-i*(i+i)
①矩阵元素M(a,b)表示a在前,b在后时,a与b之间的优先关系。
②矩阵元素M(a,b)的取值:≮,≯,≡ 。
编译原理第五章语法分析——自下而上分析
第五章语法分析——自下而上分析要紧内容:[1]自下而上分析的大体问题[2]算符优先分析法[3]算符优先分析表和优先函数的构造[4]LR分析器的大体原理大体要求:[1]明白得自下而上分析法的大体思想[2]明白得有关归约、短语、句柄、标准归约等概念[3]把握算符优先分析法[4]了解算符优先表和优先函数的构造技术[5]了解LR 分析器大体原理和工作方式教学要点:本章介绍自下而上语法分析方式。
所谓自下而上分析法确实是从输入串开始,慢慢进行“归约”,直至归约到文法的开始符号;或说,从语法树的结尾开始,步步向上“归约”,直到根结。
讲义摘要:5.1 自下而上分析大体问题自下而上分析法的大体思想:从输入串开始,慢慢进行“归约”,直到文法的开始符号。
即从树结尾开始,构造语法树。
所谓归约,是指依照文法的产生式规那么,把产生式的右部替换成左部符号。
自上而下分析的核心问题是:如何判定符号串的可归约性,和如何归约。
即,识别可归约串的问题。
归约自下而上分析法事实上确实是一种“移进-归约”法,即,采纳“移进-归约”思想进行。
实现思想是:对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,(该句型对应某产生式的右部,即栈顶生成了某产生式的右部的文法符号串),就将栈顶的这一部份替换成 (归约为) 该产生式的左部符号,这称为归约。
重复这一进程直到归约到栈中只剩文法的开始符号时那么为分析成功,也就确认输入串是文法的句子。
现举例说明。
例1:设文法G[S]为:(1) S→aAcBe(2) A→b(3) A→Ab(4) B→d试对abbcde进行“移进-归约”分析。
步骤: 1 2 3 4 5 6 7 8 9 10解:动作: 进a 进b 归(2) 进b 归(3) 进c 进d 归(4) 进e 归(1)表1符合栈的转变进程自下而上语法分析的进程也可看成自底向上构造语法树的进程,每步归约都是构造一棵子树,最后当输入串终止时恰好构造出整个语法树,如图1所示。
(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
D.1用C语言写的某单位的认识管理程序语言,2操作系统,3编译
程序 【答案】B 【解析】计算机系统的组成如下图所示:
其中,C语言写的某单位的认识管理程序语言属于应用程序,编译 程序属于语言处理程序。
3 假定下列指令已装入指令寄存器。则执行时不可能导致CPU从 用户态变为内核态(系统态)的是( )。[2015年联考真题]
5 下列说法中( )不是创建进程必须的。[上海交通大学考研真 题]
A.建立一个进程的进程表项 B.为进程分配内存 C.为进程分配CPU D.将进程表项放入就绪队列 【答案】C 【解析】进程刚被创建后,实际上是处于就绪状态的,所以不许为 进程分配CPU。
6 若系统S1采用死锁避免方法,S2采用死锁检测方法,下列叙述 中正确的是( )。[2015年联考真题]
4 下列选项中会导致进程从执行态变为就绪态的事件是( )。 [2015年联考真题]
A.执行P(wait)操作 B.申请内存失败 C.启动I/0设备 D.被高优先级进程抢占 【答案】D 【解析】D项,被高优先级进程抢占,进程会由执行态变为就绪 态。ABC三项,程序由于缺少资源而由执行态转为阻塞态。
目录
第一部分 名校考研真题 一、选择题 二、综合应用题
第二部分 课后习题 第1章 绪 论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查 找 第9章 内排序 第10章 外排序 第11章 数据结构和STL
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23
2.索引存储的例子
设字符串: A=‖Red‖ B=‖Yellow‖ C=‖Blue‖ D=‖White‖ 用指针free指向堆中未使用空间的首地址。
图5-5 带长度的索引表
24
考虑到对字符串的插入和删除操作,可能引起串的长 度变化,在“堆”中为串值分配空间时,可预留适当的空 间。这时,索引表的索引项应增加一个域,用于存储该串 在“堆”中拥有的实际存储单元的数量。当字符串长度等 于该串的实际存储单元时,就不能对串进行插入操作。
// 可用Str来定义该类型的结构体变量
17
2.存储方式 当计算机按字节(Byte)为单位编址时,一个存储单元刚好存放一 个字符,串中相邻的字符顺序地存储在地址相邻的存储单元中。 当计算机按字(例如1个字为32位)为单位编址时,一个存储单元可 以由4个字节组成。此时顺序存储结构又有非紧凑格式和紧凑格式两种存 储方式。 (1)非紧凑存储 设串S="String Structure",计算机字长为32位(4个Byte), 用非紧凑格式一个地址只能存一个字符,见图5-1。其优点是运算处理简 单,但缺点是存储空间十分浪费。 (2)紧凑存储 同样存储S="String Structure",用紧凑格式一个地址能存四个 字符,见图5-2。 紧凑存储的优点是空间利用率高,缺点是对串中字符处理的效率低。
利用函数malloc()为每个新串分配一块实际串长所需要 的存储空间,分配成功则返回一个指向起始地址的指针作 为串的基址,同时,约定的串长也作为存储结构的一部分。 函数free()则用来吸收用malloc()分配的存储空间。
27
堆分配存储结构的串定义如下: typedef struct { char *ch; int length; } HString;
求两个串连接的结果。
操作结果:s1="Microsoft□Office"; s2="Office"。
13
(3) 求子串SubStr (s,i,len):
操作条件:串s存在。 操作结果:返回从串s的第i个字符开始的长度为 len 的子 串。len=0得到的是空串。 【例5-7】 SubStr ("abcdefghi",3,4) = "cdef‖
25
3.带长度的索引表的C语言描述
如图5-5所示,索引项的结点类型为: typedef Struct { char name[MAXLEN]; // 串名 int length; // 串长 char *Stardt; // 起始地址 } LNode;
4.C语言中用动态分配函数malloc()和free()来管理“堆”
由于串仍然是以数组存储的字符序列表示,因此串的 操作仍基于―字符序列的复制‖实现。
28
插入操作的基本思想是构造一个新的串。 (1)将串S拷贝到临时串中 (2)要为被插入串S重新分配存储空间 (3)将S串中插入位置之前的子串、T串以及S串 中插入位置之后的子串依次复制到这个新分 配的存储空间中去。
29
2.串的存储密度
在各种串的处理系统中,所处理的串往往很长或很多。例如一本书的几 百万个字符,情报资料的几千万个条目,这要求我们必须考虑字符串的存储 密度。 存储密度 = 串值所占的存储位 / 实际分配的存储位。 串链接存储的存储密度小,存储量比较浪费,但运算处理,特别是对串 的连接等操作的实现比较方便。
其中: 数据域(data)—— 存放串中的字符; 指针域(next)—— 存放后继结点的地址。 仍然以存储S="String Structure"为例,链接存储结构如图5-3所示。
S
t
r
…
r
S ∧
图5-3 链接存储结构
(1)链接存储的优点——插入、删除运算方便; (2)链接存储的缺点——存储、检索效率较低。
bool StrInsert (Hstring* S, int pos, Hstring T) { char S1[S->length] ; // S1 作为辅助串空间用于暂存 S.ch int i, j; char *p; if (pos < 1 || pos > S->length+1) return FALSE; // 插入位置不合法
3.大结点结构
为了提高存储空间的利用率,有人提出了大结点的结构(即串的链块表 示)。 所谓大结点,就是一个结点的值域存放多个字符,以减少链表中的结点数 量,从而提高空间的利用率。例如每个结点存放四个字符,如图5-4。
s t r i
n
g
s
t r u c
t u r e
∧
图5-4 大结点结构表示
这样一来,存储空间利用率明显提高,但插入、删除极不方便,所以链接 存储的优点也消失了。由于字符串的特殊性,用链表作为字符串的存储方式也 不太实用,因此使用较少。
22
5-2-3 串的堆分配存储结构
在实际应用中,往往要定义很多字符串,并且各字符串长度在定义之前又 无法确定。在这种情况下,可以采用堆分配存储(也称为索引存储),这是一 种动态存储结构。 1.堆分配存储的方法 (1)开辟一块地址连续的存储空间,用于存储各串的值,该存储空间称为“堆” (也称为自由存储区)。 (2)另外建立一个索引表,用来存储串的名字(name)、长度(length)和 该串在“堆”中存储的起始地址(Stradr)。 (3)程序执行过程中,每产生一个串,系统就从“堆”中分配一块大小与串的 长度相同的连续空间,用于存储该串的值, 并且在索引表中增加一个索引项, 用于登记该串的名字、 长度、和该串的起始地址。
名称等,一般也是作为字符串数据处理的。另外
,信息检索系统,文字编辑系统,语言翻译系统
等,也都是以字符串数据作为处理对象的。
9
5-1-2 串的输入与输出
1.字符串的输入 在C语言中,字符串的输入有两种方法: (1)使用scanf () 函数 使用scanf () 函数时,输入格式中要设置"%s",再加上字符数组名 称。 【例5-2】 char str[10]; printf("Input your str: "); scanf("%s",str); • 使用scanf ()方式输入时,字符串中不能含有空格 • 在C++中还可以用输入流对象cin 。
5
1、"串就是线性表"的结论是否正确? 2、串和线性表的主要差别是什么?
6
2.几个术语
(1)长度——串中字符的个数,称为串的长度。 (2)空串——长度为零的字符串称为空串。 (3)空格串——由一个或多个连续空格组成的串称为空格串。
( 4 )串相等——两个串是相等的,是指两个串的长度相等且对应字符 都相等。
【例5-8】子串定位 IndexStr ("abcdebda","bc")=2 IndexStr ("abcdebda","ba")= 0
(6) 串插入 InsStr (s,t,i) 操作条件:串s,t存在 操作结果:将串t插入到串s 的第i个字符前,s的串值发 生改变。 (7) 串删除 DelStr(s,i,len) 操作条件:串s存在 操作结果:删除串s 中第i个字符起长度为len的子串, s的串值改变。
4
5-1 串的定义和基本运算 5-1-1 串的定义 1. 串的定义
串(String)是由零个或多个任意字符组成的有限序 列。一般记作:
s="a1 a2 …ai…an"
其中s 是串名,用双引号括起来的字符序列为串值, 但引号本身并不属于串的内容。ai(1<=i<=n)是一个任 意字符,它称为串的元素,是构成串的基本单位,i是它 在整个串中的序号;n为串的长度,表示串中所包含的字 符个数。
12
5-1-3 串的基本运算
(1)求串长LenStr(s) 操作条件:串s存在 操作结果:求出串s的长度。 (2)串连接:ConcatStr(s1,s2) 操作条件:串s1,s2存在。 操作结果:新串s1是串s1和串s2连接以后的新串,原串 s2值不变,串s1的值则改变。 【例5-6】设 s1="Microsoft□",s2="Office",
10
(2)使用gets() 函数
格式为:gets(字符数组名);
【例5-3】 char str[10]; printf("Input your str: "); gets(str);
使用gets ()方式输入时,字符串中允许含有空格。
11
2.字符串的输出
字符串的输出也有两种方法: (1)使用printf () 函数 使用printf () 函数时,输出格式中要设置"%s ",再 加上字符数组名。 【例5-4】 printf("Your str is %s",str); 在C++中还可以用输出流对象cout 。 (2)使用puts () 函数 格式为:puts (字符数组名); 【例5-5】 printf("Your str is "); puts (str);
数据结构
第5章 串
第 5 章
串
知 识 点
串的有关概念和术语 串的基本运算 串的存储方法 串的模式匹配运算
2
难 点
串的模式匹配运算算法
要 求
掌握串的逻辑结构 掌握串的存储结构 熟练掌握串的基本运算 能设计串的计简单算法 了解串的匹配运算算法的基本思想
3
第ห้องสมุดไป่ตู้5 章 目录
5-1 串的定义和基本运算 5-2 串的表示和实现 5-3 串的基本运算 小 结 验证性实验5 串子系统 自主设计实验5 字符串分割处理 单元练习5
(5)子串——串中任意连续的字符组成的子序列称为该串的子串。
(6)主串——包含子串的串称为该子串的主串。
( 7 )模式匹配——子串的定位运算又称为串的模式匹配,是一种求子 串的第一个字符在主串中序号的运算。被匹配的主串称为目标串,子 串称为模式。
7
【例5-1】字符串的长度及子串的位置。 字符串 S1="SHANG" S2="HAI" 字符串长度 5 3