第二章程序设计语言.ppt

上传人:sccc 文档编号:5666622 上传时间:2023-08-07 格式:PPT 页数:44 大小:1.54MB
返回 下载 相关 举报
第二章程序设计语言.ppt_第1页
第1页 / 共44页
第二章程序设计语言.ppt_第2页
第2页 / 共44页
第二章程序设计语言.ppt_第3页
第3页 / 共44页
第二章程序设计语言.ppt_第4页
第4页 / 共44页
第二章程序设计语言.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第二章程序设计语言.ppt》由会员分享,可在线阅读,更多相关《第二章程序设计语言.ppt(44页珍藏版)》请在三一办公上搜索。

1、第一章 程序设计语言,软件技术基础,第二章 程序设计语言,程序设计语言是也是人人交换信息的工具,程序设计语言是人机交换信息的媒体,2.1 高级程序设计语言概述,最初的语言是机器语言,例:AXAX46,用容易记忆的英文单词代替约定的指令,易读写程序,导致了汇编语言的诞生,使用汇编语言编程需要:直接安排存储,规定寄存器、运算器动作次序了解数据表示的约定(定点、浮点、双精度)不同的计算机在指令长度、寻址方式、寄存器数目、指令表示等都不同,使得汇编程序不仅不可移植而且读起来也很费劲 导致了高级语言的出现,汇编语言和高级语言的诞生,DATA SEGMENT XX DB X YY DB?DATA ENDS

2、 CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 JGE BLGR MOV AL,0FFH MOV YY,AL HLTBLGR:JE EQUT MOV AL,01H MOV YY,AL HLTEQUT:MOVE YY,AL HLTCODE ENDS ENDSTART,例,汇编:,高级语言:,如果用VB编写,本程序是:Dim x,y As Integer if x 0 then Y=1 else if x=0 then Y=0 else Y=-1 endif endif,2.2 高

3、级程序设计语言实现计算的方式,高级语言程序必须经过翻译变成机器语言程序翻译有两种做法:编译和解释,相应的翻译工具分别叫做编译器和解释器2.2.1 编译器工作原理首先是识别符号串:关键字、字面量、标识符、运算符、注释行、特殊符号等六类符号,这个过程就是词法分析(Lexical Analysis)第二步作语法分析(Syntax Analysis)一个语句就作为一串记号流由语法分析器处理。按照语言的文法检查每个语法分析树,第三步作语义分析(Semantic Analysis)对各句子的语法树作检查:运算符两边类型是否相兼容;该作哪些类型转换;控制转移到不该去的地方;是否有重名等等。若有错转出错处理,

4、否则生成执行代码第四步是中间代码生成。中间代码是向目标码过渡的一种编码,形式尽可能和机器的汇编语言相似,但不涉及具体机器的操作码和地址码。好处是可在中间码上作优化第五步是优化。对中间码程序作局部和全局优化,使运行更快,占用空间最小第六步是代码生成。生成目标机器的目标码(或汇编)程序,源程序.c,目标程序.obj,可执行程序.exe,结果,编译,连接,执行,2.2.2 高级语言程序的解释执行,解释执行需要有一个解释器(lnterpretor),它先作词法分析,建立内部符号表;再作语法和语义分析,即以中间码建立语法树,并作类型检查。完成检查后把每一语句压入执行堆栈,压入后立即解释执行,操作系统的命

5、令、BASIC、VB、Prolog、LISP、Java、Java Script、Post Script都是解释执行的,各种应用软件提供的界面语言(一般都很小)多半是解释执行的。解释器不大,工作空间也不大、能根据程序执行情况决定下一步做什么(人工智能经常是这样的)是它的优点,不过,解释执行难于优化、效率较低,这是这类语言的致命缺点,2.3 高级程序设计语言基本特征,2.3.1 变量、表达式、赋值计算的数据对象特别是计算结果的对象在编程时是不存在的。我们只能用变量表示它例:已知三角形三边长度求面积:s:=0.5*(a+b+c)area:=sqrt(s*(s-a)*(s-b)*(s-c)其中a,b,

6、c,s,area是变量,0.5是常量(也是字面量),“+”和“*”是运算符,sqrt是开平方函数表达式是常量、变量、函数调用或者由它们和运算符组成的序列:=是赋值号它将右端表达式算出的结果赋给左端的变量,2.3.2 程序的控制结构-条件语句,有了条件判断if(E)then TB else FB end if,打破了自上至下逐句执行的模式当表达式E为真时,执行TB块那一组语句 为假时跳过TB块执行FB块那一组语句早期的if 语句借助goto语句改变执行顺序,但这种无条件goto不能保证结构的完整性,即另外某处也可以goto到这个条件分支中,2迭代语句,例如,求自然数1到10000之和的程序,迭代

7、结构的一般式有几种:,while(E)do S enddo 表达式E为真执行S,直至E为假(a)当循环,Do S Until(E)先执行S再查看E,E为真不重复(b)直到循环,for(i=E0;E1;E2)do S enddo i得初值E0,判断iE2,执行S后i增量E1,判断若iE2,出for-do(c)计数循环,(1)结构化程序控制,(2)其它控制结构,方便使用的变体:Case语句是嵌套if的简化,Do-until,for-do均为while-do变体,其它控制,Call-return:程序单元间的转移,执行后返回原地。Exception-raise:程序出了异常情况,raise(引发)后

8、,正常执行转到异常处理程序段,并不再返回。在C+中,使用的是try throw结构,在VB中是ON ERROR GOTO 语句。Abort(STOP):强行停止执行。Exit:转到本程序块末端。Delay XX:延迟XX时间后继续执行。,2.3.2 数据类型,计算机中计算对象(不管是常量、变量)都是有类型的,类型不同内部表示不同,就是象12+32.7这种简单的计算也是不允许的,要先做类型转换才能计算1.常用的基本类型,强类型语言(所谓强类型,就是编译时所有变量类型均确定,类型转换必须显式地给出)无类型语言则无需变量的类型声明,给它什么值它就是什么类型。2.数组Dim Names(15)As S

9、tring声明16个元素数组,每个元素都是字符串类型Dim Matrix(9,9)As Double是10*10=100元素的方阵,元素为双精度浮点数不同类型的一维数组能否组成一多维数组?一般语言不可以,VB利用Variant可以把它们联接起来并把它叫做数组的数组,3.记录,相同或不同类型数据组成的结构叫记录。记录型记录了对象的属性信息,记录的各个组成部分,称为记录域,各个域的数据类型可以不相同。用VB声明的一个例子:Type Person RecordName As StringAge As IntegerSex As StringTelnumber As StringLable As In

10、tegerEndtype,在VB中,可以这样声明数组型变量:Dim Student1 As Person Record访问记录元素用点表示法:Student1.Name=“ChangShan”Student1.Age=20Student1.Sex=“Male”Student1.Telnumber=“(010)62783294”,4.指针类型,变量P中存放的是另一个变量A的地址,而变量A中存放的却是数值:123,在讲述指针之前,让我们首先来看一个例子(我们采用C语言来描述):int I;/*定义一个整型变量 I*/I=1;/*I赋值为1*/I=I+1:/*表达式计算*/计算机语言中的变量,代表的

11、只是计算机内存中的一个存储单元,单元中存放的内容是变化的若变量中存放的不是对象,而是另一个变量在计算机内存中的存储地址,则 这种变量被称为指针变量,提供指针类型的语言一般都提供两种与指针有关的操作:取地址操作和取值操作取值操作取的是指针所指的变量的值,*P=123取地址操作取的是变量的内存地址,P=&A若给指针赋了初值,并在程序的运行期间不再改变,则称这种指针为常量指针指针是一种简洁、灵活的语言对象。审慎的使用可以显著提高编程的灵活性和效率,但不负责任的使用将使你掉进错误的深渊。,2.3.4 过程,函数过程Funcion Fname(形参表)As 返回类型 类型和数据声明 语句集End Fun

12、ction,子程序过程Sub 名字(形参表)类型和数据声明 语句集End Sub,主程序中的数据通过型构中的形参表进入过程,1.过程的定义(由型构和过程体组成),在过程中声明的变量是局部变量,只在过程中有效2.过程调用函数过程用函数名引用,需有与形参表变元的个数、类型、次序一样的实参表,子程序过程的引用是过程调用,也要有实参表形参和实参匹配后,主程序中声明的变量在过程中自动可用。但反过来不行,外块的变量与内块同名:就近声明优先通过点表示法才能出现在内块(P.X5.0)and X,2.3.5 过程的数据传递-无参过程,过程的型构中没有形参表定义,调用时不需要实参。过程中用到的数据是所在环境的全程

13、量或自己内部声明的局部量,2.传递变元从主程序向过程传递数据可以有两种方式:传值和引用 引用,Function Add(n1,n2 As Integer)As Integer Add=n1+n2 n2=0 n1=0 End Function,Dim A,B As Integer A=10 B=2 Sum=Add(A,B)Debug.Print A Debug.Print B Debug.Print Sum,若函数中不加方括号中内容,则打印结果为:10 2 12 若函数中加上方括号中内容,则打印结果为:0 0 12主程序向过程Add传递A、B时,把A、B的地址结合到n1、n2上。即引用主程序中的

14、值。,传值:A B的值拷贝到n1 n2中,过程中n1 n2改变 A B 不变,例如Pascal:Function F(Var X Y:float)return float;-引用 Function F(X,Y:float)return float;-传值,2.3.6 变量的生命期和Static变量,程序中的变量生命期随其声明所在程序块而异按其“寿命”的长短有:,若需要一个局部变量在局部程序块消失后依然保留其值,又不希望它是全局变量被该局部块以外的程序引用,则可使用静态(Static)局部变量注意:Static 变量在局部模块中声明,2.3.7 输入/输出,程序的输入/输出分作两大类:程序之间以

15、文件形式进行数据传递。人机交互,一般由高级程序设计语言以过程调用的形式实现。过程在高级语言内部通过操作系统调用完成,2.4 面向对象程序语言的基本特征,面向对象语言是过程式语言的进一步发展。2.4.1 对象概述,过程式程序的结构是层层调用,下层程序除自己声明的数据而外共享上层程序声明的数据一个子程序改动了共享数据则另一个必然受影响。我们叫它数据耦合,“分而治之”的思想使我们想到进一步封装,即把相关的数据与过程装在一起,尽可能让它独立。设想有一程序有100个子程序,经过分析,这100个子程序并不是每个子程序都要用到所有的数据,把数据相关和程序相关(有嵌套调用)的分成组。,数据叫做对象的属性(At

16、tribate),操作则改称方法(Method),即改变属性的方法。对象间相互只有通信,“调用”方法叫发消息(Message),这样封装的程序块是一个复杂的计算对象,私有的数据描述了本对象的状态,操作表示了本对象的行为 对象接受外界的消息而动作,改变对象内部的状态,2.4.2 类与对象,对象是封装了属性和方法的实体,客观世界的对象往往有许多相似之处,我们沿用程序中表达数据的抽象办法,定义一类对象然后声明它的不同实例。Dim v As Double v是双精型的数据变量Dim OK As Command Button OK是按钮类的对象变量这个类CommandButton是系统事先定义好的,OK

17、是它的实例对象。有着和CommandButton一样的属 性和方法,只是要给出各属性的值。类是生成实例的样板,是实例加工厂,堆栈类,Class char_stack int size/私有属性 char*tos,*end;char*spublic:/公共方法 char_stack(int sz);char_stack();int push(char c);char pop();char top();,再单写各方法定义,如:int char_stack:push(char c)return*tos=end?*tos+=c:0;,有了这个类就可以对实例对象作计算了,下面给出该类的使用例子:main

18、()char c char_stack stk1(100)/声明一实例对象stk1 stk1.push(%)/压入%到stk1中 stk1.push(#)c=stk1.pop()/从stk1中弹出一字符 if(stk1.top()=#).else,2.4.3 类定义,类封装了属性和方法类中的成员原则上是类私有(private)的,外部是看不到也不得访问的。为了保证与类外界通信可以定义公有(public)属性。上例中属性全部是私有方法全部是公有的。当然,也可以定义公有数据和私有方法由于类的数据结构比较复杂,类一般有构造(实例的)函数(constructor)和析构函数(Destructor)。它

19、们都可以重复定义多次(以不同的方法构造实例),面向对象的封装性可以支持各独立对象的协作计算,不需要主控对象。在其它类的方法定义中,可以嵌入向另外一些类发消息的语句,各类的方法互相发消息,只要其中某几个类的实例是事件触发的,2.4.4 类继承,每个类都可以派生许多子类,子类继承父类的属性和方法。子类子可以派生它的子类派生类只需定义自己的属性和方法,雇员信息继承关系,2.5 网络计算时代的编程语言,分布式客户/服务器计算时代(1885-1995),大大改变了单主机计算时代的应用开发概念。Intrenet使计算机应用的概念又面临一次大跃进,数据描述语言(HTML,XML)脚本语言(JavaScript,VBScript,PostScript)平台无关的编程语言(Java),2.4.5 多态性,由于继承,属性和方法可能重名,这就产生了多态(同一名字执行内容不同)。静态(在编译或连接(Linking)时就可以分辨的叫重载(overloading),例如,多个构造函数是最常见的。运行中根据执行情况才能决定束定到哪个方法体叫动态束定,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号