第5章程序编码
数字通信原理章 (5)

第5章 信道编码技术
5.1.2 差错控制编码的基本思想 差错控制编码的基本实现方法是在发送端给被传输的
信息附上一些监督码元,这些多余的码元与信息码元之间 以某种确定的规则相互关联。在接收端按照既定的规则校 验信息码元与监督码元之间的关系,一旦传输发生错误, 则信息码元与监督码元的关系就受到破坏,从而使接收端 可以发现错误,进而纠正错误。因此,各种编码和译码方 法是差错控制编码所要研究的问题。 5.1.3 差错控制方式
距应满足
dmin≥t+e+1 (e>t)
(5-3)
第5章 信道编码技术 图 5-2 纠错码纠错能力图示一
第5章 信道编码技术 图 5-3 纠错码纠错能力图示二
第5章 信道编码技术
5.2.3 奇偶监督码 奇偶监督码(又称为奇偶校验码)是一种最简单的检错
码,它的基本思想是在n-1位信息码元后面附加一位监督 码元,构成(n,n-1)的分组码,监督码元的作用是使码长 为n的码组中“1” 的个数保持为奇数或偶数。码组中“1” 的个数保持为奇数的编码称为奇数监督码,保持为偶数的 编码称为偶数监督码。
的一种改进形式,它不仅对每一行进行奇偶校验,同时对每 一列也进行奇偶校验。如表5-2所示的例子采用的是偶校验。
发送时,该码是按11001100、00100111、00011110、 11000000、01111011、00100111、01101001的顺序发送,而 在接收端将所接收的信号以列的形式排列,可得表5-2所示 的阵列。
(5-5)
奇偶监督码最小码距为2,无论是奇校验还是偶校验,
都只能检测出单个或奇数个错误,而不能检测出偶数个错
误,因此检错能力低,但编码效率随着n的增加而提高。
Web应用程序设计案例教程第5章

☺2. 编写Page对象Load事件过程的程序代码 ☺3. 编写Page对象Unload事件过程的程序代码
在文件夹ch5中创建一个命名为counter.txt的文本文件,输入 一个数字“0”。
16
【同步实践】
操作要求如下。 ☺(1)新建一个项目ch5,将Webform1.aspx重命名
为counter.aspx。 ☺(2)在counter.aspx页面上添加4个Label控件并设 置各控件的属性,控件在页面中的位置自行确定。 ☺(3)新建一个文本文件counter.txt,存储的内容为 100。 ☺(4)编写其Page_Load事件,浏览此页时显示系统 的当前时间和读取文件counter.txt中的内容并通过 Label控件显示。 ☺(5)编写其Page_Unload事件,将新的计数器数值 保存到文件counter.txt。
14
5.3.2 设计网站访问计数器界面
网站访问计数器页面用 到了4个Label控件,页 面如图
15
5.3.3 编写程序代码, 实现网站访问计数功能
实现网站访问计数器要用到前面章节曾介绍的 Application对象、Session对象和本章学习的Server 对象。 要真正实现网站访问计数器,必须先将统计的次数数 据保存到文件中,然后再从文件中读取。这样,服务 器停止之后重新启动,原先访问统计的次数将保留下 来,从而实现真正的网站访问计数器。 读写文件就要用到Server对象来实现,要实现浏览一 次网页计数器就增加1,就要将新的次数写入文件中, 这就要写一个Page_Unload事件。 ☺1. 创建保存次数的文本文件
9
5.2.2 取得目前浏览网页的路径
如何得知网页浏览者目前正在浏览哪一个网页 呢?Request对象提供了MapPath方法与Path 属性,供服务器来了解目前被浏览网页的路径。 利用Path属性可让服务器端得知目前被浏览网 页的路径(默认浏览文件夹以下的路径),而 MapPath方法不但可以得知目前网页的完整路 径,还可结合一个字符串,这个字符串可以是 文件名称,这样便可产生一个新的文件路径。
信息论与编码第5章限失真信源编码

第一节 失真测度
• 以上所举的三个例子说明了具体失真度的定义. 一般情况下根据实际信源的失真, 可以定义不同 的失真和误差的度量.
• 另外还可按照其他标准, 如引起的损失、风险、 主观感受上的差别大小等来定义失真度d(ui,vj).
• 从实用意义上说, 研究符号实际信源主观要求的、 合理的失真函数是很重要的.
第一节 失真测度
设信源变量为U={u1,…,ur}, 接收端变量为 V={v1,…,vs}, 对于每一对(u,v), 指定一个非负 函数
d(ui,vj)≥0 称为单个符号的失真度(或称失真函数). 失真函数用来表征信源发出符号ui, 而接收端再现 成符号vj所引起的误差或失真. d越小表示失真越小, 等于0表示没有失真.
➢ 应该指出, 研究R(D)时, 条件概率p(v|u)并没有 实际信道的含义. 只是为了求互信息的最小值而引 用的、假想的可变试验信道. ➢ 实际上这些信道反映的仅是不同的有失真信源编 码或信源压缩. 所以改变试验信道求平均互信息最 小值, 实质上是选择编码方式使信息传输率为最小.
率失真理论与信息传输理论的对偶关系
– 接收端获得的平均信息量可用平均互信息量I(U;V)表示;
– 这就变成了在满足保真度准则的条件下 D D 找平均互信息量I(U;V)的最小值.
,寻
– 因为BD是所有满足保真度准则的试验信道集合, 即可以 在D失真许可的试验信道集合BD中寻找某一个信道 p(vj|ui), 使I(U;V)取最小值.
本章所讨论的内容是量化、数模转换、频带 压缩和数据压缩的理论基础.
前言
本章主要介绍信息率失真理论的基本内容, 侧 重讨论离散无记忆信源.
首先给出信源的失真度和信息率失真函数的定 义与性质, 然后讨论离散信源的信息率失真函数计 算. 在这个基础上论述保真度准则下的信源编码定 理.
数字图象处理-第5章图像编码

由量化带来的噪声 量化噪声 过载噪声
5.4.3 编码器、译码器
编码器的任务是把一个多值的数字量用多比特的二进制来表示 译码器是把每一位的码字转换为实际灰度值
(a)
(b)
(c)
(d)
(e)
(f)
图 5—4 编码位数对画面质量的影响
5.3.4 非线性PCM 编码 在线性PCM编码中,量化阶是均匀的 非线性PCM编码的量化阶不均匀
u5 0.10 u6 0.05
0.55 0
0 0.15
1
0.30 0.25 0.25 0.20 0
1
0.45 0.30 0 0.25 1 0
1
0.45 1
图5—17 信源X的 霍夫曼编码图
5.5.4 仙农-费诺码
仙农-费诺码的编码程序可由下述几个步骤来完成:
第一步:设信源X有非递增的概率分布
X
up11
编氏法 应
码取
法
法样
编
码
法
标 自 标自 行 轮
准 适 准适 程 廓
法 应 法应 编 编
法
法码 码
5. 2 图像编码中的保真度准则 客观保真度准则 主观保真度准则
5. 3 PCM编码
5.3.1 PCM 编码的基本原理 脉冲编码调制(Pulse coding Modulation—PCM )是将模拟图像 信号变为数字信号的基本手段
集合中的字母数。
显然,如果 100% ,就说明还有冗余度。因此,冗
余度如下式表示:
Rd
1
N log 2 n H ( X ) N log 2 n
(5—27)
例: 一个信源X和一个字母集合A如下
X
通信原理第5章

(2)
三、实际抽样 ------自然抽样
自然抽样的特点
平顶抽样:
5.2 脉冲编码调制(PCM)
脉冲编码调制(PCM)简称脉码调制,它是一种用一组二进 制数字代码来代替连续信号的抽样值,从而实现通信的方式。 由于这种通信方式抗干扰能力强,它在光纤通信、数字微波通 信、卫星通信中均获得了极为广泛的应用。 PCM是一种最典型的语音信号数字化的波形编码方式。首 先,在发送端进行波形编码(主要包括抽样、量化和编码三个过 程),把模拟信号变换为二进制码组。编码后的PCM码组的数 字传输方式可以是直接的基带传输,也可以是对微波、光波等 载波调制后的调制传输。在接收端,二进制码组经译码后还原 为量化后的样值脉冲序列,然后经低通滤波器滤除高频分量, 便可得到重建信号 x(t ) 。
1 Ts= 是最大允许抽样间隔,它被称为奈奎斯特间隔,相对 2 fH 应的最低抽样速率fs=2fH称为奈奎斯特速率。
混叠现象
信号的重建
该式是重建信号的时域表达式, 称为内插公式。 它说 明以奈奎斯特速率抽样的带限信号x(t)可以由其样值利用内
插公式重建。这等效为将抽样后信号通过一个冲激响应为
际标准中取μ=255。另外,需要指出的是μ律压缩特性曲线 是以原点奇对称的, 图中只画出了正向部分。
2、A律压扩特性
Ax 1 ln A ,0 x 1 / A z 1 ln( Ax) ,1 / A x 1 1 ln A
• • •
x——压缩器归一化输入电压 z——压缩器归一化输出电压 μ ——压缩器参数
量化的物理过程
q7
x q x q x (t)
q
信号的实际值
6
量化误差
6
信号的量化值
第5章 无失真信源编码定理

5.1 编码器
编码器可以看作这样一个系统,它的输入端为原始信 源S,其符号集为 S {S1, S2 ,..., Sq };而信道所能传输的符号集 为 X {x1, x2 ,..., xr } 编码器的功能是用符号集X中的元素,将 原始信源的符号 S i 变换为相应的码字符号 wi ,所以编码器 输出端的符号集为 C :{W1,W2 ,...,Wq }
0
0 0
01
001 0001
树枝数——码的数
节数——码长 端点——码字 满树——等长码 非满树——变长码
码4的树图
码3的树图
在每个节点上都有r个分枝的树称为整树,否则称为非 整树。即时码的树图还可以用来译码。
5.5.3 克拉夫特(Kraft)不等式
定理5.4 对于码符号为 X {x1 , x2 ,..., xr } 的任意即时码,其 码字为 W1 ,W2 ,...,Wq 所对应的码长为 l1 , l2 ,..., lq ,则必定满
第5章 无失真信源编码定理
◆ 编码器 ◆ 等长码 ◆ 等长信源编码定理 ◆ 变长码
◆ 变长信源编码定理
引 言
1、信源编码:以提高通信有效性为目的的编码。通常通 过压缩信源的冗余度来实现。采用的一般方法是压缩每
个信源符号的平均比特数或信源的码率。即同样多的信
息用较少的码率传送,使单位时间内传送的平均信息量 增加,从而提高通信的有效性。
但码3和码4也不太一样,码4称作逗点码,只要收到1,就
可以立即作出译码;而码3不同,当收到一个或几个码时,
必须参考后面的码才能作出判断。 定义 在唯一可译码中,有一类码,它在译码是无须参考 后面的码字就可以作出判断,这种码称为即时码。 定义 如果一个码组中的任一个码字都不是另一个码字 的续长,或者说,任何一个码字后加上若干码元后都不是
第5章差错控制编码(2)
二、线性分组码的性质
1、任意两个准用码字之和仍为一个准用码字 (封闭性)。 2、两个准用码字的码距必是另一个码字的码 重。最小码距为非零码的最小码重。 3、单位元素为全零码。A=0 4、逆元素为全零码本身。A+A=0
电子与通信工程系
三、线性分组码纠错原理
偶监督:S= an-1+ an-2+ an-3…+an-k+ a0 S=0 正确 S=1错误 S称为校正子(伴随式) 若增加为r位监督位,则有r位校正子:共有2 r种 状态组合。 用其中一种表示正确,其余2 r -1组合用来指示 错误位置。 2 r -1≧n(可以纠正一位误码) 若纠正i位误码,则:
1 1 1 0 1 0 0 1 1 0 1 0 1 0 a 6 a 5 a 4 a 3 a 2 a 1 a 0 1 0 1 1 0 0 1
1110 100 H 1101 010 1011 001
T
0 0 0
S B H
T
S 0 0 1) H 最后一列,误码 (
a0
电子与通信工程系
九、交织技术
交织的作用:
减小信道中错误的相关性,把和突发错误离散成短突发错 误,或随机错误。交织深度越大,离散程度越高。
交织方法:
对一个(n ,k)分组码进行深度为m的交织时,把m个码组 按行排列成一个m×n的码阵。该码阵就是(mn ,mk)交织码 的一个码字,每行称为交织码的行码或子码,并以列的顺序传 输。接收端的去交织则执行相反的操作,写成码阵的形式,再 以行为单位,按(n ,k)行码的方式进行译码。
第五章 信道编码 习题解答
第五章 信道编码 习题解答1.写出与10011的汉明距离为3的所有码字。
解:共有10个:01111,00101,00000,01010,01001,00110,11101,10100,11000,11110。
2. 已知码字集合的最小码距为d ,问利用该组码字可以纠正几个错误?可以发现几个错误?请写出一般关系式。
解:根据公式:(1)1d e ≥+ 可发现e 个错。
(2)21d t ≥+ 可纠正t 个错。
得出规律:(1)1d = ,则不能发现错及纠错。
(2)d 为奇数:可纠12d -个码元错或发现1d -个码元错。
(3)d 为偶数:可纠12d-个码元错,或最多发现1d -个码元错。
(4)码距越大,纠、检错能力越强。
3.试计算(8,7)奇偶校验码漏检概率和编码效率。
已知码元错误概率为410e p -=。
解:由于410e p -=较小,可只计算错两个码元(忽略错4或6个码元)的情况:228788!10 2.8106!2!e p C p --==⨯=⨯⨯ 787.5%8η==4.已知信道的误码率410e p -=,若采用“五三”定比码,问这时系统的等效(实际)误码率为多少? 解:由于410e p -=较小,可只计算错两个码元的情况1125211283232(1)610e e e p C C p p C C p --=-≈=⨯5.求000000,110110,011101,101011四个汉明码字的汉明距离,并据此求出校正错误用的校验表。
解:先求出码字间距离:000000 110110 011101 101011000000 4 4 4 110110 4 4 4 011101 4 4 4 101011 4 4 4汉明距离为4,可纠一位错。
由于一个码字共有6个码元,根据公式:21617rn ≥+=+= 得 3r = 即每个码字应有3位监督码元,6-3=3位信息码元。
直观地写出各码字:123456000000110110011101101011x x x x x x 令456x x x 为监督码元,观察规律则可写出监督方程:413523612x x x x x x x x x=⊕⎧⎪=⊕⎨⎪=⊕⎩从而写出校验子方程:113422353126s x x x s x x x s x x x *********⎧=⊕⊕⎪=⊕⊕⎨⎪=⊕⊕⎩列出校验表:6.写出信息位6k =,且能纠正1个错的汉明码。
第5章数据处理、
【例5-6】移位寄存器应用举例。
I0.0
时 序 图
LD I0.0 EU SHRB I0.1, M10.0, +4
正 跳 变 (p) I0.1
第 一 次 移 位
第 二 次 移 位
第 一 次 移 位 前 M B10
01 01
溢 出 位(SM 1.1)X
S-BIT I0.1
第 一 次 移 位 后 M B10
T38
M0.0
M0.0
M10.1 M10.2 M10.3 M10.4 M10.5 M10.6 M10.7 M11.0 I0.1
SHRB
EN
ENO
M10.0 M10.1
+8
DATA S_BIT N
Q0.0
Q0.1
Q0.2
Q0.3
Q0.4
Q0.5
Q0.6
Q0.7
M10.1 R 8
5.1.4 转换指令
1 011
第 二 次 移 位 后
溢 出 位(SM 1.1)0
M B10
011 0
溢 出 位(SM 1.1)1
S-BIT I0.1
S-BIT I0.1
【例5-7】用PLC构成喷泉的控制。用灯L1~L12分别代表喷泉的12个喷水注。
(1)控制要求:按下起动按钮后,隔灯闪烁,L1亮0.5秒后灭,接着L2亮 0.5秒后灭, 接着L3亮0.5秒后灭,接着L4亮0.5秒后灭,接着L5、L9亮0.5秒 后灭,接着L6、L10亮0.5秒后灭,接着L7、L11亮0.5秒后灭,接着L8、L12 亮0.5秒后灭,L1亮0.5秒后灭,如此循环下去,直至按下停止按钮。如图58所示。
L5
L6
L4
L3
信息论与编码-曹雪虹-第五章-课后习题答案
信息论与编码-曹雪虹-第五章-课后习题答案第五章(2) 哪些码是⾮延长码?(3) 对所有唯⼀可译码求出其平均码长和编译效率。
解:⾸先,根据克劳夫特不等式,找出⾮唯⼀可译码31123456231244135236:62163:22222216463:164:22421:2521:2521C C C C C C --------------?<+++++=<<++?=+?>+?<5C ∴不是唯⼀可译码,⽽4C :⼜根据码树构造码字的⽅法1C ,3C ,6C 的码字均处于终端节点∴他们是即时码(1) 因为A,B,C,D四个字母,每个字母⽤两个码,每个码为0.5ms, 所以每个字母⽤10ms当信源等概率分布时,信源熵为H(X)=log(4)=2平均信息传递速率为bit/ms=200bit/s(2) 信源熵为H(X)==0.198bit/ms=198bit/s5-541811613216411281128H(U)=1 2Log2() 14Log4() +18Log8() +116Log16 ()+132Log32 ()Log64()+1128Log128()+1128Log128()+ 1.984= (2) 每个信源使⽤3个⼆进制符号,出现0的次数为出现1的次数为P(0)=P(1)=(3)相应的费诺码(5)⾹农码和费诺码相同平均码长为编码效率为:5-11(1)信源熵(2)⾹农编码:平均码长:编码效率为(3)平均码长为:编码效率:4平均码长为:编码效率:5.16 已知⼆元信源{0,1},其p0=1/4,p1=3/4,试⽤式(4.129)对序列11111100编算术码,并计算此序列的平均码长。
解:根据算术编码的编码规则,可得:P(s=11111100) = P2(0)P6(1) = (3/4)6 (1/4)27)(1log =??=S P l根据(4.129)可得:F(S) = P(0) + P(10) + P(110) + P(1110) + P(11110) + P(111110) = 1–∑≥sy y P )(= 1 – P(11111111) – P(11111110) – P(11111101) – P(11111100)= 1– P(111111) = 1– (3/4)6 = 0.82202 = 0.110100100111⼜P(S) = A(S)= 0.0000001011011001,所以F(S) + P(S) = 0.1101010 即得C = 0.1101010 得S 的码字为1101010平均码长L 为 0.875。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、结构化
把程序的各个部件组织成一个有效系统。 把程序的各个部件组织成一个有效系统。具体措 施-- (1)按标准化的次序说明数据; 按标准化的次序说明数据; 按标准化的次序说明数据 (2)按字母顺序说明对象名; 按字母顺序说明对象名; 按字母顺序说明对象名 (3)使用标准的程序控制结构; 使用标准的程序控制结构; 使用标准的程序控制结构 (4)采用直截了当的算法; 采用直截了当的算法; 采用直截了当的算法 (5)根据实际应用问题排列程序各部分; 根据实际应用问题排列程序各部分; 根据实际应用问题排列程序各部分
二、结构化程序设计的原则
(1)使用语言中的顺序、选择、重复等有限的基本控 )使用语言中的顺序、选择、 制结构表示程序逻辑。 制结构表示程序逻辑。 (2)选用的控制结构只允许有一个入口和一个出口。 )选用的控制结构只允许有一个入口和一个出口。 ),每块只有 (3)程序语句组成容易识别的块(block),每块只有 )程序语句组成容易识别的块( ), 一个入口和一个出口。 一个入口和一个出口。 (4)复杂结构应用基本控制结构进行组合嵌套来实现。 )复杂结构应用基本控制结构进行组合嵌套来实现。 语句, (5)严格控制 )严格控制GOTO语句,仅在下列情形下才可使用: 语句 仅在下列情形下才可使用: ①用一个非结构化的程序设计语言实现一个结构化的构 造。 在某种可以改善而不是损害程序可读性的情况下。 ②在某种可以改善而不是损害程序可读性的情况下。
编程风格是在不影响性能的前提下, 编程风格是在不影响性能的前提下,有 效地组织编排和组织程序, 效地组织编排和组织程序,以提高可读 性和可维护性。 性和可维护性。 风格意味着按照下面一组规则进行编程: 风格意味着按照下面一组规则进行编程:
(齐治昌等编著 p303) ) 节俭化 模块化 简单化 结构化 文档化 格式化
(2)第二层 Main( ){ /* 建立2到100的数组A[ ],其中A[i]=i;*/ for(i=2; i<=100; i++) A[i]=i; /*建立数组B[ ],存放2到10以内的素数;*/ B[1]=2;B[2]=3;B[3]=5;B[4]=7; /*若A[i]是B[]中任一数的倍数,则剔除A[i]*/ for(j=1;j<=4;j++) 把A[ ]中所有能被B[j]整除的数剔除掉; /* 输出A[]中剩余的数;*/ for(i=2; i<=100; i++) 输出A[i] }
(4)程序清晰和模块化,使得在修改和重新 程序清晰和模块化, 程序清晰和模块化 设计一个软件时,可复用的代码量最大。 设计一个软件时,可复用的代码量最大。 (5)程序的逻辑结构清晰,有利于程序准确 程序的逻辑结构清晰, 程序的逻辑结构清晰 性确认; 性确认; (6)每一步工作仅在上层节点的基础上做有 每一步工作仅在上层节点的基础上做有 限的设计扩展,便于检查; 限的设计扩展,便于检查; (7)有利于设计的分工和组织工作。 有利于设计的分工和组织工作。 有利于设计的分工和组织工作
一、节俭化
就是提供尽可能简洁的代码-- 就是提供尽可能简洁的代码-- 避免程序中不必要的动作和变量; 避免程序中不必要的动作和变量; 避免标识符名过长; 避免标识符名过长; 减少程序的体积; 减少程序的体积; 减少程序的执行时间。例如, 减少程序的执行时间。例如,使用执行 时间短的算术运算; 时间短的算术运算;避免不同类型的对 象混合操作; 象混合操作;尽量使用整型运算和布尔 表达式;为所有的I/O设置缓冲,等等。 设置缓冲, 表达式;为所有的 设置缓冲 等等。 避免模块冗余和重复; 避免模块冗余和重复; 检查全局变量的副作用。 检查全局变量的副作用。
二、模块化
把代码划分为内聚度高、 把代码划分为内聚度高、富有意义的功能 模块。要求-- 模块。要求-- (1)内聚度高:确保物理和逻辑功能密切相 内聚度高: 内聚度高 关; (2)功能独立:限定一个模块完成一个独立 功能独立: 功能独立 的功能; 的功能; (3)耦合性低。 耦合性低。 耦合性低
三、简单化
程序设计风格
随着软件规模越来越大,复杂性增加, 人们逐渐看到,在软件生存期中,人们 经常要阅读程序。特别是在软件测试阶 段和维护阶段,编写程序的人与参与测 试、维护的人经常要阅读程序。人们认 识到,阅读程序是软件开发和维护过程 中的一个重要组成部分。因此,程序实 际上也是一种供人阅读的文章,因而就 有一个文章的风格问题。
20世纪 年代诞生的 世纪70年代诞生的 世纪 年代诞生的PascaL语言对 语言对 GOTO语句的处理方法:一方面设置了 语句的处理方法: 语句的处理方法 三种基本控制结构的语句,另一方面, 三种基本控制结构的语句,另一方面, GOTO语句仍然保留。 语句仍然保留。 语句仍然保留 N.Wirth:“通常使用所提供的几种基本控 通常使用所提供的几种基本控 制结构已经足够, 制结构已经足够,习惯于这样做的人不 会感到GOTO语句的必要。也就是说, 语句的必要。 会感到 语句的必要 也就是说, 在一般情况下,可以完全不使用GOTO 在一般情况下,可以完全不使用 语句。如果在特殊情况, 语句。如果在特殊情况,由于特定的要 偶然使用GOTO语句解决问题,那 语句解决问题, 求,偶然使用 语句解决问题 也未尝不可,只是不应大量使用罢了。 也未尝不可,只是不应大量使用罢了。”
(3)第三层 Main( ){ /* 建立2到100的数组A[],其中A[i]=i;*/ for(i=2; i<=100;i++) A[i]=i; /*建立数组B[ ],存放2到10以内的素数;*/ B[1]=2; B[2]=3; B[3]=5; B[4]=7; /*若A[i]是B[]中任一数的倍数,则剔除A[i]*/ for(j=1;j<=4;j++) /*把A[ ]中所有能被B[j]整除的数剔除掉;*/ if (A[i]%B[j]==0) A[i]=0; /* 输出A[]中没有被剔除的数;*/ for(i=2;i<=100;i++) if (A[i]!=0) printf(“A[%d]=%d\n,i,A[i]”); }
失效性、高可靠性,可维护性,易 失效性、高可靠性,可维护性, 扩充和易移植。 扩充和易移植。
容易阅读:源程序除送入计算机运行外, 容易阅读:源程序除送入计算机运行外, 还必须让人容易看懂。 还必须让人容易看懂。这一点作为软件工 程项目和软件产品是一个必不可少的质量 要求。 要求。 低失效性、高可靠性:源程序便于阅读, 低失效性、高可靠性:源程序便于阅读, 便于测试和排除所发现的程序故障。 便于测试和排除所发现的程序故障。 可维护性: 可维护性:源程序在运行过程中发现了问 题或错误时很容易修改 易扩充性: 易扩充性:软件在使用过程中能根据用户 的需要很容易扩充其功能及改善其性能。 的需要很容易扩充其功能及改善其性能。
1968年, E.W.Dijkstra在写给《美国计算 年 在写给《 在写给 机协会通讯》 机协会通讯》杂志编辑部的信中再次建 议从一切高级语言中取消GOTO语句, 语句, 议从一切高级语言中取消 语句 只使用三种基本控制结构编写程序。 只使用三种基本控制结构编写程序。这 一建议引起了激烈的争论。反对方认为, 一建议引起了激烈的争论。反对方认为, 语句不能完全禁止, 对GOTO语句不能完全禁止,因为 语句不能完全禁止 GOTO语句概念简单、使用方便,在某 语句概念简单、 语句概念简单 使用方便, 种情况下,保留GOTO语句反能使写出 种情况下,保留 语句反能使写出 的程序更加简洁,并且GOTO语句可直 的程序更加简洁,并且 语句可直 接得到硬件指令的支持。 接得到硬件指令的支持。
结论: 结论:
不是简单地去掉GOTO语句,而是要创立 语句, 不是简单地去掉 语句 一种新的程序设计思想、方法和风格, 一种新的程序设计思想、方法和风格,以 显著地提高软件生产率和软件质量, 显著地提高软件生产率和软件质量,降低 软件维护成本。 软件维护成本。 有时完全不用GOTO语句进行编码,比用 语句进行编码, 有时完全不用 语句进行编码 GOTO语句编出的程序可读性差。例如,在 语句编出的程序可读性差。 语句编出的程序可读性差 例如, 查找结束时、文件访问结束时, 查找结束时、文件访问结束时,出现错误 情况要从循环中跳出时, 情况要从循环中跳出时,使用布尔变量和 条件结构实现就不如用GOTO语句来得简洁 条件结构实现就不如用 语句来得简洁 易懂。 易懂。
例2. 用筛选法求100以内的素数。所谓“筛选法”,就是 从2到100中去掉2,3,5,7的倍数之后,剩下的就是100 以内的素数。 (1)第一层 Main( ){ 建立2到100的数组A[ ],其中A[i]=i; 建立数组B[ ],存放2到10以内的素数; 若A[i]是B[ ]中任一数的倍数,则剔除A[i] 输出A[ ]中剩余的数; } 上述框架中每一个加工语句都可进一步细化成一个循环 语句。
5.2 结构化程序设计
一、关于GOTO语句的争论 关于GOTO语句的争论 GOTO 1963年,Peter Naur指出:在程序中大量地, 指出: 年 指出 在程序中大量地, 没有节制地使用GOTO语句,会使程序结构变 语句, 没有节制地使用 语句 得非常混乱。 得非常混乱。 1965年,E.W.Dijkstra提出:应当把 提出: 年 提出 应当把GOTO 语句从高级语言中取消, 语句从高级语言中取消,因为程序的质量与程 序中包含的GOTO语句的数量成反比。 语句的数量成反比。 序中包含的 语句的数量成反比 1966年,Bohm与Jacopini证明了任何单入 年 与 证明了任何单入 口单出口的没有“死循环” 口单出口的没有“死循环”的程序都能由三种 最基本的控制结构构造出来。 最基本的控制结构构造出来。
去掉过分复杂和不必要的程序成份。 去掉过分复杂和不必要的程序成份。具体 措施-- 措施-- (1)采用简单明了的算法; 采用简单明了的算法; 采用简单明了的算法 (2)使用简单的数据结构,避免使用多维数 使用简单的数据结构, 使用简单的数据结构 指针和复杂的表; 组、指针和复杂的表; (3)注意对象命名的一致性; 注意对象命名的一致性; 注意对象命名的一致性 (4)简化算术和逻辑表达式 简化算术和逻辑表达式