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

上传人(卖家):ziliao2023 文档编号:5873187 上传时间:2023-05-13 格式:PPT 页数:80 大小:1.16MB
下载 相关 举报
程序设计语言与编译原理-控制结构课件.ppt_第1页
第1页 / 共80页
程序设计语言与编译原理-控制结构课件.ppt_第2页
第2页 / 共80页
程序设计语言与编译原理-控制结构课件.ppt_第3页
第3页 / 共80页
程序设计语言与编译原理-控制结构课件.ppt_第4页
第4页 / 共80页
程序设计语言与编译原理-控制结构课件.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

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

2、级控制结构分为三种:语句级控制结构分为三种:2 2程序设计语言与编译语言可用的、最简单的控制结构。语言可用的、最简单的控制结构。顺序顺序运算符(语句结束标记)运算符(语句结束标记);一一.顺序顺序3 3程序设计语言与编译若干个语句可以通过顺序运算符组在若干个语句可以通过顺序运算符组在一起作为一个一起作为一个单独的语句单独的语句.复合语句括号:复合语句括号:begin begin endend 或或 程序设计语言与编译u选择控制结构允许程序员在选择控制结构允许程序员在某些可选择某些可选择的语句的语句中选择其中一条中选择其中一条来执行。来执行。l 单选单选 if thenl 二选一二选一 if t

3、hen elsel 多选一多选一 嵌套嵌套if then else 或或 case 程序设计语言与编译 max:=a;if (ab)then max:=a else max:=b;可供选择的语句可供选择的语句 max:=a 和和 max:=b 只选择其中一个只选择其中一个执行执行2.2.二选一二选一 if then else程序设计语言与编译选择结构引起二义性选择结构引起二义性if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then if x0 then

4、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 8ifif 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 S

5、3 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语句语句:p PASCALPASCALp ALGOL 68ALGOL 68p AdaAdavar operator:char;var operator:char;operand1,operand2,result:boolean;operand1,operand2,result:

6、boolean;case operator ofcase operator of.:result:=operand1 and operand2;:result:=operand1 and operand2;+:result:=operand1 or operand2;:result:=operand1 or operand2;=:result:=operand1=operand2;:result:=operand1=operand2;endend1010程序设计语言与编译 不同不同语言语言casecase语句语句的差异:的差异:p ALGOL68中,case语句基于整表达式的值,表达式的值为i

7、,则选择第i个分支执行。p PASCAL显式列出可能的值,表达式的值与分支的值相同时,选择该分支。每个分支在case中出现的次序是无关紧要的。p 表达式的值不在显式列出的值中时的处理:out 和 otherwise;1111程序设计语言与编译JavaJava中中SwitchSwitch语句的选择结构语句的选择结构 switch (表达式表达式)case 常量表达式常量表达式1:语句:语句1;case 常量表达式常量表达式2:语句:语句2;.case 常量表达式常量表达式n:语句语句n;default:语句语句n+1;switch语句判断条件只能接受byte,char,int,short型一旦碰

8、到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的语句都会被执行,直到碰到break语句为止。1212程序设计语言与编译class SampleSwitch public static void main(String args)for(int i=0;i6;i+)switch(i)case 0:System.out.println(i is zero.);break;case 1:System.out.println(i is one.);break;case 2:System.out.println(i is two.);bre

9、ak;case 3:System.out.println(i is three.);break;default:System.out.println(i is greater than 3.);1313程序设计语言与编译 DijkstraDijkstra选择结构选择结构if B1S1if B1S1 B2 S2 B2 S2 B3 S3 B3 S3 .BN SNBN SNfifi其中,其中,BiBi是布尔表达式,称为卫哨。是布尔表达式,称为卫哨。若有多个卫哨为真时执行任一若有多个卫哨为真时执行任一SiSi。特性:非确定性特性:非确定性例如计算例如计算A A和和B B的最大值,可写成的最大值,可写成

10、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程序设计语言与编译计数重复的值可在任何计数重复的值可在任何有序有序集上集上for.tofor.tofor.downtofor.downto1616程序设计语言与编译 forfor语句语句 for(for(表达式一;表达式二;表达式三表达式一;表达式二

11、;表达式三)执行语句执行语句;表达式一:初始化表达式;表达式一:初始化表达式;表达式二:循环条件表达式;表达式二:循环条件表达式;表达式三:循环后的操作表达式。表达式三:循环后的操作表达式。表达式一表达式一表达式三表达式三执行语句执行语句表达式二表达式二结束结束falsefalsetruetrue1717程序设计语言与编译for(int i=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.print

12、ln(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或任意多次的重复 repeat until循环:至少一次以上的重复 2.2.条件条件制导制导 1919程序设计语言与编译whilewhile语句语句 while (while (条件表达式语句条件表达式语句)执行语句执行语句 int x=1;int x=1;While

13、(x3)While(xF=F1 1,A,A3 3=F=F3 3,A,A8 8=F=F8 8,A,A1010=F=F1010)程序设计语言与编译 在参数可省略在参数可省略(缺省参数缺省参数)的情况下,的情况下,一般都要在过程(或函数)一般都要在过程(或函数)首部首部做做出专门的规定出专门的规定:指出以什么样的指出以什么样的特定值(缺省值)特定值(缺省值)来替代省略的实参。来替代省略的实参。程序设计语言与编译int SHOW(char int SHOW(char*s,int x=s,int x=0 0,int,int y=y=0 0)程序设计语言与编译在子程序调用中,在子程序调用中,副作用副作用

14、和和别名别名也会影响程序的可读也会影响程序的可读性,容易导致程序出错。性,容易导致程序出错。程序设计语言与编译对非局部环境的修改对非局部环境的修改 副作用降低了程序的可读性 副作用限制了数学运算律的使用 如:w:=x+f(x,y)+z 副作用影响目标代码的优化 如:u:=x+z+f(x,y)+f(x,y)+x+zx x、y y为变参为变参z z为全局变量为全局变量3.3.副作用副作用 5353程序设计语言与编译4.4.别名别名在单元激活期间在单元激活期间,两个变量表示两个变量表示(共享共享)同一同一数据对象对非局部环境的修改数据对象对非局部环境的修改。FORTRAN的EQUIVALENCE语句

15、,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指向同一数据对象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;en

16、d;调用swap(a);将产生不正确的结果变参和全局变量表示同一数据对象时,也会引起别名 5656程序设计语言与编译 别名也影响编译器生成优化的代码 a:=(x-y*z)+w /*若a与x、y或z中任 b:=(x-y*z)+u 一个是别名 */别名的消除 .废除可能引起别名的结构 .限制使用指针、变参、全局变量、数组等 5757程序设计语言与编译二二.隐式调用单元隐式调用单元异常处理异常处理 隐式地将控制从一个单元转向到另隐式地将控制从一个单元转向到另一个单元,通常有于异常处理一个单元,通常有于异常处理异常是指导致程序正常执行中止的事件,异常是指导致程序正常执行中止的事件,要靠发信号来引发,用

17、要靠发信号来引发,用异常条件异常条件来表示,来表示,并发出相应的信号,引发相应的程序。并发出相应的信号,引发相应的程序。5858程序设计语言与编译 早期语言中除早期语言中除 PL/1外,通常没有专外,通常没有专门的异常条件及异常处理程序。门的异常条件及异常处理程序。后期开发的语言提供了异常处理机后期开发的语言提供了异常处理机制,使涉及异常事件的处理制,使涉及异常事件的处理独立独立出来出来.不包括在程序的主流程中不包括在程序的主流程中,以保证,以保证程序的逻辑按基本算法进行。程序的逻辑按基本算法进行。程序设计语言与编译(1)异常如何,它的作用域是什么?(2)异常如何(或如何发信号)?(3)发出异

18、常信号时,如何规定要执行的单元(异常程序)?(4)发出异常时,如何相应的异常处理程序?(5)处理异常之后,控制转向何处?异常处理要考虑的问题异常处理要考虑的问题 6060程序设计语言与编译 在这些问题中,问题(在这些问题中,问题(5)的解决对)的解决对语言语言处理异常机制处理异常机制的能力和可使用性的能力和可使用性有很大的影响。有很大的影响。程序设计语言与编译 语言设计中可能的语言设计中可能的基本选择基本选择是,相应是,相应的异常处理程序执行完之后,允许的异常处理程序执行完之后,允许控制控制返回发生异常事件的执行点返回发生异常事件的执行点。在这种情况下,异常处理程序可对执在这种情况下,异常处理

19、程序可对执行的程序进行行的程序进行“修补修补”,终止相应的异,终止相应的异常事件,以便程序常事件,以便程序继续正常地执行继续正常地执行。程序设计语言与编译 解决了程序解决了程序继续执行继续执行的问题,的问题,但并但并未未真正真正消除消除发生发生异常的因素。异常的因素。程序设计语言与编译 相应的异常处理程序执行完之后,相应的异常处理程序执行完之后,终终止止引起异常的程序单元的执行,由引起异常的程序单元的执行,由异常异常处理程序进行控制的转移处理程序进行控制的转移。从概念上说,这意味着引起异常的单从概念上说,这意味着引起异常的单元元不能恢复执行不能恢复执行;从实现的观点来看,;从实现的观点来看,这

20、意味着这意味着删除删除异常异常单元的单元的活动记录活动记录。程序设计语言与编译 1.PL/1异常处理异常处理 2.CLU的异常处理的异常处理 3.Ada的异常处理的异常处理自学,了解。自学,了解。程序设计语言与编译 实现出错处理的方法是将用户函数实现出错处理的方法是将用户函数与出错处理程序紧密地结合起来,与出错处理程序紧密地结合起来,但将造成出错处理使用的不方便和但将造成出错处理使用的不方便和难以接受难以接受。程序设计语言与编译 用用C标准库的标准库的assert宏进行出错处理宏进行出错处理 使用使用allege函数在运行时检查错误。函数在运行时检查错误。allege函数对一些小型程序很方便,

21、函数对一些小型程序很方便,对于复杂的大型程序,所编写的出错对于复杂的大型程序,所编写的出错处理程序也将更加处理程序也将更加复杂复杂。程序设计语言与编译异常处理是异常处理是C+的一个主要特征,的一个主要特征,它提出了出错处理更加完美的方法。它提出了出错处理更加完美的方法。设置设置陷阱陷阱 抛出抛出异常异常 捕获捕获异常异常 try throw catch程序设计语言与编译C+的异常处理语句的格式如下:的异常处理语句的格式如下:try catch(异常类型异常类型1)异常异常1处理程序处理程序 catch(异常类型异常类型2)异常异常2处理程序处理程序 catch(异常类型异常类型n)异常异常n处

22、理程序处理程序 程序设计语言与编译Try /可能发现异常的语句块catch(异常类型,e)/发生异常时候的执行语句块 finnally /不管是否发生异常都执行的语句块javajava异常处理异常处理 7070程序设计语言与编译三三.SIMULA 67语言协同程序语言协同程序 定义:两个或两个以上程序单元之间交错地执行,这样的程序称为协同程序。例如:设有程序单元C1和C2,由C1开始执行,当执行到C1的“resume C2”命令时,显示激活C2,并将C1的当前执行点的现场保存起来,将控制C2的执行点;若C2执行到某个“resume C1”语句,将C2的当前执行点现场保存,恢复C1的执行,继续执

23、行下去7171程序设计语言与编译 C1和和 C2似乎在并行地执行,我们似乎在并行地执行,我们将这种执行称为将这种执行称为伪并行伪并行。实际上,实际上,C1 和和 C1是在是在交错交错地执行,地执行,它是并行的一种低级形式。它是并行的一种低级形式。程序设计语言与编译 常规的子程序常规的子程序机制不能描述并行执机制不能描述并行执行的程序单元行的程序单元 CLU 和和 SIMULA67 等语言设置了等语言设置了描述这种交错执行过程的机制。描述这种交错执行过程的机制。程序设计语言与编译 协同程序协同程序 C2协同程序协同程序 C1C1resume C2resume C2resume C1resume

24、C1resume C2resume C2resume C1resume C1程序设计语言与编译四四.并发单元并发单元 诸程序单元并行活动 一个例子:“生产者-消费者”问题单元单元producerproducer单元单元consumerconsumerrepeat repeat 生产一个元素生产一个元素;存放这个元素到缓冲区存放这个元素到缓冲区;foreverforeverrepeat repeat 从缓冲区移出一项从缓冲区移出一项;对该项执行某个运算对该项执行某个运算;foreverforever7575程序设计语言与编译 补充知识补充知识:一个具有一定独立功能的程序在一个数:一个具有一定独立

25、功能的程序在一个数据集合上的一次动态执行过程。据集合上的一次动态执行过程。:动态性:进程具有动态的地址空间动态性:进程具有动态的地址空间 独立性:各进程的地址空间相互独立,除独立性:各进程的地址空间相互独立,除非采用进程间通信手段,非采用进程间通信手段,并发性、异步性并发性、异步性 结构化结构化7676程序设计语言与编译 进程是动态的,程序是静态的:进程是动态的,程序是静态的:程序是有序代码的集合程序是有序代码的集合 进程是程序的执行进程是程序的执行 进程是暂时的,程序的永久的:进程是暂时的,程序的永久的:进程是一个状态变化的过程进程是一个状态变化的过程 程序可长久保存程序可长久保存 进程与程

26、序的组成不同:进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)进程的组成包括程序、数据和进程控制块(即进程状态信息)进程与程序的对应关系:进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。通过调用关系,一个进程可包括多个程序。7777程序设计语言与编译 创立创立许可许可调度调度超时超时等待事件等待事件事件发生事件发生释放释放(New)(New):进程刚创建,但还不能运行。进程刚创建,但还不能运行。就绪状态就绪状态(Ready)(Ready):进程已获得除处理机外的所需资源,等待分配

27、进程已获得除处理机外的所需资源,等待分配 处理机资源;只要分配处理机资源;只要分配CPUCPU就可执行。就可执行。(Running)(Running):占用处理机资源;占用处理机资源;(Blocked)(Blocked):由于进程等待某种条件(如由于进程等待某种条件(如I/OI/O操作或进程操作或进程同步),在条件满足之前无法继续执行。同步),在条件满足之前无法继续执行。7878程序设计语言与编译 内容回顾内容回顾控制结构控制结构语句控制结构语句控制结构单元控制结构单元控制结构顺序、选择、重复顺序、选择、重复显式调用显式调用异常处理异常处理协调程序协调程序并发单元并发单元7979程序设计语言与编译 3-1、3-2、3-3、3-48080

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(程序设计语言与编译原理-控制结构课件.ppt)为本站会员(ziliao2023)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|