程序设计语言与编译原理_控制结构课件.ppt

上传人:飞****2 文档编号:82449754 上传时间:2023-03-25 格式:PPT 页数:80 大小:1.16MB
返回 下载 相关 举报
程序设计语言与编译原理_控制结构课件.ppt_第1页
第1页 / 共80页
程序设计语言与编译原理_控制结构课件.ppt_第2页
第2页 / 共80页
点击查看更多>>
资源描述

《程序设计语言与编译原理_控制结构课件.ppt》由会员分享,可在线阅读,更多相关《程序设计语言与编译原理_控制结构课件.ppt(80页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、程序设计语言与编译 第三章第三章 控制结构控制结构主要讨论语言中描述算法的机制,即主要讨论语言中描述算法的机制,即控制结构控制结构。主要讨论各种主要讨论各种语句级控制结构语句级控制结构和和单元级控制结单元级控制结构构。控制结构控制结构:程序员用来规定程序各个成分程序员用来规定程序各个成分(语(语句和程序单元)句和程序单元)的执行流程的控制部分的执行流程的控制部分l语句级控制结构语句级控制结构l单元级控制结构单元级控制结构1 1程序设计语言与编译 3.2 语句级控制结构语句级控制结构顺序(顺序(sequencingsequencing)选择(选择(selectionselection)重复(重复

2、(repetitionrepetition)语句级控制结构语句级控制结构语句级控制结构语句级控制结构:语言用来构造各种语句执行顺语言用来构造各种语句执行顺 序的机制序的机制语句级控制结构分为三种:语句级控制结构分为三种:2 2程序设计语言与编译语言可用的、最简单的控制结构。语言可用的、最简单的控制结构。顺序顺序运算符(语句结束标记)运算符(语句结束标记);一一.顺序顺序3 3程序设计语言与编译复合语句复合语句若干个若干个语句可以通句可以通过顺序运算符序运算符组在在一起作一起作为一个一个单独的独的语句句.复合复合语句括号:句括号:begin begin endend 或或 程序设计语言与编译二二

3、.选择选择u选择控制控制结构允构允许程序程序员在在某些可某些可选择的的语句句中中选择其中一条其中一条来来执行。行。l 单选 if thenl 二二选一一 if then elsel 多多选一一 嵌套嵌套if then else 或或 case 程序设计语言与编译1.单选单选 if then max:=a;if (ab)then max:=a else max:=b;可供可供选择的的语句句 max:=a 和和 max:=b 只只选择其中一个其中一个执行行2.2.二选一二选一 if then else程序设计语言与编译选择结构引起二义性选择结构引起二义性if if x0 x0 then then

4、if if x10 x0 then if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then beginbegin if x10 then x:=0 else x:=1000 if x0 then if x0 then beginbegin if x10 then x:=0 else x:=1000 if x0 then if x0 then beginbegin if x10 then x:=0 if x10 then x:=0 endend else x:=1000 else x:=10008

5、83.多选一多选一 嵌套嵌套 的的 if then else ifif a a then Sthen S1 1 else ifelse if b b then S then S2 2 else if else if c c then S then S3 3 else S else S4 4 fi fi fi fififi 程序设计语言与编译 PL/1的select结构 SELECT:WHEN(A)S1;WHEN(B)S2;WHEN(C)S3;OTHERWISE S4;END9 9多选一的多选一的简洁表达简洁表达程序设计语言与编译 多种语言的多种语言的casecase语句语句:pPASCALPA

6、SCALpALGOL 68ALGOL 68pAdaAdavar operator:char;var operator:char;operand1,operand2,result:boolean;operand1,operand2,result:boolean;case operator ofcase operator of.:result:=operand1 and operand2;:result:=operand1 and operand2;+:result:=operand1 or operand2;:result:=operand1 or operand2;=:result:=oper

7、and1=operand2;:result:=operand1=operand2;endend1010程序设计语言与编译 不同不同语言语言casecase语句语句的差异:的差异:pALGOL68中,case语句基于整表达式的值,表达式的值为i,则选择第i个分支执行。pPASCAL显式列出可能的值,表达式的值与分支的值相同时,选择该分支。每个分支在case中出现的次序是无关紧要的。p表达式的值不在显式列出的值中时的处理:out 和 otherwise;1111程序设计语言与编译JavaJava中中SwitchSwitch语句的选择结构语句的选择结构 switch (表达式表达式)case 常量表

8、达式常量表达式1:语句:语句1;case 常量表达式常量表达式2:语句:语句2;.case 常量表达式常量表达式n:语句语句n;default:语句语句n+1;switch语句判断条件只能接受byte,char,int,short型一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的语句都会被执行,直到碰到break语句为止。1212程序设计语言与编译classSampleSwitch publicstaticvoidmain(Stringargs)for(inti=0;i6;i+)switch(i)case0:System.o

9、ut.println(iiszero.);break;case1:System.out.println(iisone.);break;case2:System.out.println(iistwo.);break;case3:System.out.println(iisthree.);break;default:System.out.println(iisgreaterthan3.);1313程序设计语言与编译3.3.Dijkstra Dijkstra选择结构选择结构if B1S1if B1S1 B2 S2 B2 S2 B3 S3 B3 S3 .BN SNBN SNfifi其中,其中,BiBi

10、是布尔表达式,称为卫哨。是布尔表达式,称为卫哨。若有多个卫哨为真时执行任一若有多个卫哨为真时执行任一SiSi。特性:非确定性特性:非确定性例如计算例如计算A A和和B B的最大值,可写成的最大值,可写成if Aif A B MAX:=BB MAX:=B A A B MAX:=AB MAX:=Afifi1414程序设计语言与编译三三.重复重复当预先知道重复次数时,在循环计数器值的有限集合上重复。FORTRAN的DO循环中,用标号控制循环体 DO 7 I=1,10 A(I)=0 B(I)=0 7 CONTINUE 1.1.计数器制导计数器制导1515程序设计语言与编译 Pascal Pascal的

11、的for for 语句语句计数重复的值可在任何计数重复的值可在任何有序有序集上集上for.tofor.tofor.downtofor.downto1616程序设计语言与编译 forfor语句语句 for(for(表达式一;表达式二;表达式三表达式一;表达式二;表达式三)执行语句执行语句;表达式一:初始化表达式;表达式一:初始化表达式;表达式二:循环条件表达式;表达式二:循环条件表达式;表达式三:循环后的操作表达式。表达式三:循环后的操作表达式。表达式一表达式一表达式三表达式三执行语句执行语句表达式二表达式二结束结束falsefalsetruetrue1717程序设计语言与编译for(int i

12、=0;i10;i+)for(int i=0;i10;i+)System.out.println(i);System.out.println(i);int i=0;int i=0;for(;i10;i+)for(;i10;i+)System.out.println(i);System.out.println(i);int i=0;int i=0;for(;i10;)for(;i=10)if(i=10)break;break;System.out.println(i);System.out.println(i);i+;i+;等等 效效 1818程序设计语言与编译 while 循环:描述0或任意多次

13、的重复 repeat until循环:至少一次以上的重复 2.2.条件条件制导制导 1919程序设计语言与编译whilewhile语句语句 while (while (条件表达式语句条件表达式语句)执行语句执行语句 int x=1;int x=1;While(x3)While(xF=F1 1,A,A3 3=F=F3 3,A,A8 8=F=F8 8,A,A1010=F=F1010)程序设计语言与编译 在参数可省略在参数可省略(缺省参数缺省参数)的情况下,的情况下,一般都要在一般都要在过程(或函数)程(或函数)首部首部做做出出专门的的规定定:指出以什么指出以什么样的的特定特定值(缺省(缺省值)来替

14、代省略的来替代省略的实参。参。程序设计语言与编译C+的缺省参数的缺省参数int SHOW(char*s,int x=int SHOW(char*s,int x=0 0,int,int y=y=0 0)程序设计语言与编译在子程序在子程序调用中,用中,副作用副作用 和和别名名也会影响程序的可也会影响程序的可读性,容易性,容易导致程序出致程序出错。程序设计语言与编译对非局部环境的修改对非局部环境的修改 副作用降低了程序的可读性 副作用限制了数学运算律的使用 如:w:=x+f(x,y)+z 副作用影响目标代码的优化 如:u:=x+z+f(x,y)+f(x,y)+x+zx x、y y为变参为变参z z为

15、全局变量为全局变量3.3.副作用副作用 5353程序设计语言与编译4.4.别名别名在单元激活期间在单元激活期间,两个变量表示两个变量表示(共享共享)同一同一数据对象对非局部环境的修改数据对象对非局部环境的修改。FORTRAN的EQUIVALENCE语句,EQUIVALENCE(A,B)Pascal的变参使得形参和实参共享同一数据对象C+的引用参数 5454程序设计语言与编译procedure swap(var x,y:integer);begin x:=x+y;y:=x-y;x:=x-y;end;调用swap(a,a);swap(bi,bj);若i=jswap(p,q);若p、q指向同一数据对

16、象5555void swap(int&x,int&y)x:=x+y;y:=x-y;x:=x-y;程序设计语言与编译procedure swap(var x:integer);/*a是全局变量*/begin x:=x+a;a:=x-a;x:=x-a;end;调用swap(a);将产生不正确的结果变参和全局变量表示同一数据对象时,也会引起别名 5656程序设计语言与编译 别名也影响编译器生成优化的代码 a:=(x-y*z)+w /*若a与x、y或z中任 b:=(x-y*z)+u 一个是别名 */别名的消除 .废除可能引起别名的结构 .限制使用指针、变参、全局变量、数组等 5757程序设计语言与编译

17、二二.隐式调用单元隐式调用单元异常处理异常处理 隐式地将控制从一个单元转向到另隐式地将控制从一个单元转向到另一个单元,通常有于异常处理一个单元,通常有于异常处理异常是指导致程序正常执行中止的事件,异常是指导致程序正常执行中止的事件,要靠发信号来引发,用要靠发信号来引发,用异常条件异常条件来表示,来表示,并发出相应的信号,引发相应的程序。并发出相应的信号,引发相应的程序。5858程序设计语言与编译 早期早期语言中除言中除 PL/1外,通常没有外,通常没有专门的异常条件及异常的异常条件及异常处理程序。理程序。后期开后期开发的的语言提供了异常言提供了异常处理机理机制,使涉及异常事件的制,使涉及异常事

18、件的处理理独立独立出来出来.不包括在程序的主流程中不包括在程序的主流程中,以保,以保证程序的程序的逻辑按基本算法按基本算法进行。行。程序设计语言与编译(1)异常如何说明说明说明说明,它的作用域是什么?(2)异常如何发生发生发生发生(或如何发信号)?(3)发出异常信号时,如何规定要执行的单元(异常处理处理处理处理程序)?(4)发出异常时,如何绑定绑定绑定绑定相应的异常处理程序?(5)处理异常之后,控制流程流程流程流程转向何处?异常处理要考虑的问题异常处理要考虑的问题 6060程序设计语言与编译 在在这些些问题中,中,问题(5)的解决)的解决对语言言处理异常机制理异常机制的能力和可使用性的能力和可

19、使用性有很大的影响。有很大的影响。程序设计语言与编译方法方法1 语言言设计中可能的中可能的基本基本选择是,相是,相应的异常的异常处理程序理程序执行完之后,允行完之后,允许控制控制返回返回发生异常事件的生异常事件的执行点行点。在在这种情况下,异常种情况下,异常处理程序可理程序可对执行的程序行的程序进行行“修修补”,终止相止相应的异的异常事件,以便程序常事件,以便程序继续正常地正常地执行行。程序设计语言与编译 解决了程序解决了程序继续执行行的的问题,但并但并未未真正真正消除消除发生生异常的因素。异常的因素。程序设计语言与编译方法方法2 相相应的异常的异常处理程序理程序执行完之后,行完之后,终止止引

20、起异常的程序引起异常的程序单元的元的执行,由行,由异常异常处理程序理程序进行控制的行控制的转移移。从概念上从概念上说,这意味着引起异常的意味着引起异常的单元元不能恢复不能恢复执行行;从;从实现的的观点来看,点来看,这意味着意味着删除除异常异常单元的元的活活动记录。程序设计语言与编译 1.PL/1异常异常处理理 2.CLU的异常的异常处理理 3.Ada的异常的异常处理理自学,了解。自学,了解。程序设计语言与编译4.C语言的出错处理语言的出错处理 实现出出错处理的方法是将用理的方法是将用户函数函数与出与出错处理程序理程序紧密地密地结合起来,合起来,但将造成出但将造成出错处理使用的不方便和理使用的不

21、方便和难以接受以接受。程序设计语言与编译 用用C标准准库的的assert宏宏进行出行出错处理理 使用使用allege函数在运行函数在运行时检查错误。allege函数函数对一些小型程序很方便,一些小型程序很方便,对于复于复杂的大型程序,所的大型程序,所编写的出写的出错处理程序也将更加理程序也将更加复复杂。程序设计语言与编译5C+语言的异常处理语言的异常处理异常异常处理是理是C+的一个主要特征,的一个主要特征,它提出了出它提出了出错处理更加完美的方法。理更加完美的方法。设置置陷阱陷阱 抛出抛出异常异常 捕捕获异常异常 try throw catch程序设计语言与编译C+的异常的异常处理理语句的格式

22、如下:句的格式如下:try catch(异常异常类型型1)异常异常1处理程序理程序 catch(异常异常类型型2)异常异常2处理程序理程序 catch(异常异常类型型n)异常异常n处理程序理程序 程序设计语言与编译Try/可能发现异常的语句块catch(异常类型,e)/发生异常时候的执行语句块finnally/不管是否发生异常都执行的语句块javajava异常处理异常处理 7070程序设计语言与编译三三.SIMULA 67语言协同程序语言协同程序 定义:两个或两个以上程序单元之间交错地执行,这样的程序称为协同程序。例如:设有程序单元C1和C2,由C1开始执行,当执行到C1的“resume C2

23、”命令时,显示激活C2,并将C1的当前执行点的现场保存起来,将控制C2的执行点;若C2执行到某个“resume C1”语句,将C2的当前执行点现场保存,恢复C1的执行,继续执行下去7171程序设计语言与编译 C1和和 C2似乎在并行地似乎在并行地执行,我行,我们将将这种种执行称行称为伪并行并行。实际上,上,C1 和和 C1是在是在交交错地地执行,行,它是并行的一种低它是并行的一种低级形式。形式。程序设计语言与编译 常常规的子程序的子程序机制不能描述并行机制不能描述并行执行的程序行的程序单元元 CLU 和和 SIMULA67 等等语言言设置了描置了描述述这种交种交错执行行过程的机制。程的机制。程

24、序设计语言与编译 协同程序同程序 C2协同程序间的控制转移关系协同程序间的控制转移关系协同程序协同程序 C1C1resume C2resume C2resume C1resume C1resume C2resume C2resume C1resume C1程序设计语言与编译四四.并发单元并发单元 诸程序单元并行活动 一个例子:“生产者-消费者”问题单元单元producerproducer单元单元consumerconsumerrepeat repeat 生产一个元素生产一个元素;存放这个元素到缓冲区存放这个元素到缓冲区;foreverforeverrepeat repeat 从缓冲区移出一项从

25、缓冲区移出一项;对该项执行某个运算对该项执行某个运算;foreverforever7575程序设计语言与编译 补充知识补充知识qq进进进进程程程程:一一个个具具有有一一定定独独立立功功能能的的程程序序在在一一个个数数据集合上的一次动态执行过程。据集合上的一次动态执行过程。进程的特点进程的特点进程的特点进程的特点:动态性:进程具有动态的地址空间动态性:进程具有动态的地址空间 独独立立性性:各各进进程程的的地地址址空空间间相相互互独独立立,除除非采用进程间通信手段,非采用进程间通信手段,并发性、异步性并发性、异步性结构化结构化7676程序设计语言与编译 进程与程序的区别进程与程序的区别进程与程序的

26、区别进程与程序的区别进程是动态的,程序是静态的:进程是动态的,程序是静态的:程序是有序代码的集合程序是有序代码的集合 进程是程序的执行进程是程序的执行进程是暂时的,程序的永久的:进程是暂时的,程序的永久的:进程是一个状态变化的过程进程是一个状态变化的过程 程序可长久保存程序可长久保存进程与程序的组成不同:进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)进程的组成包括程序、数据和进程控制块(即进程状态信息)进程与程序的对应关系:进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。通过调

27、用关系,一个进程可包括多个程序。7777程序设计语言与编译 创建创建创建创建运行运行运行运行就绪就绪就绪就绪阻塞阻塞阻塞阻塞结束结束结束结束创立创立许可许可调度调度超时超时等待事件等待事件事件发生事件发生释放释放进程的五状态模型进程的五状态模型进程的五状态模型进程的五状态模型创建状态创建状态创建状态创建状态(New)(New):进程刚创建,但还不能运行。进程刚创建,但还不能运行。就绪状态就绪状态(Ready)(Ready):进程已获得除处理机外的所需资源,等待分配进程已获得除处理机外的所需资源,等待分配 处理机资源;只要分配处理机资源;只要分配CPUCPU就可执行。就可执行。运行状态运行状态运

28、行状态运行状态(Running)(Running):占用处理机资源;占用处理机资源;阻塞状态阻塞状态阻塞状态阻塞状态(Blocked)(Blocked):由于进程等待某种条件(如由于进程等待某种条件(如I/OI/O操作或进程操作或进程同步),在条件满足之前无法继续执行。同步),在条件满足之前无法继续执行。7878程序设计语言与编译 内容回顾内容回顾控制结构控制结构语句控制结构语句控制结构单元控制结构单元控制结构顺序、选择、重复顺序、选择、重复显式调用显式调用异常处理异常处理协调程序协调程序并发单元并发单元7979程序设计语言与编译 第三章习题第三章习题第三章习题第三章习题3-1、3-2、3-3、3-48080

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com