1、计算机科学概论1第6章程序设计语言2本章提要3123程序设计语言概述高级程序语言的种类程序设计的基本概念程序单元程序设计语言的执行45高级话题6程序设计语言:指挥计算机工作的命令。程序设计语言:指挥计算机工作的命令。没有程序,计算机将无法进行工作。没有程序,计算机将无法进行工作。最早的程序语言:最早的程序语言: 19451945年的年的PlankalkulPlankalkul ,非存储式高级程序,非存储式高级程序 。6.1.2 程序语言的发展历史 46.1.1 什么是程序语言6.1 6.1 程序设计语言程序设计语言程序设计语言的发展经历了三代的发展变化:程序设计语言的发展经历了三代的发展变化:
2、 第一代:机器语言第一代:机器语言 第二代:符号语言第二代:符号语言 第三代:第三代: 高级语言高级语言表表6.16.1:一些主要程序语言的发展历史。一些主要程序语言的发展历史。56.1.2 程序语言的发展历史 按人与机器的交互程度分类:按人与机器的交互程度分类: 机器语言;机器语言; 汇编语言;汇编语言; 高级语言。高级语言。6.1.3 程序语言的分类 表表6.26.2:部分重要的程序设计语言的分类部分重要的程序设计语言的分类 。6由由“0”0”和和“1”1”组成的二进制码构成。组成的二进制码构成。 优点:优点:速度快,不需要翻译。速度快,不需要翻译。特点:特点:依赖机器,可读性差,难以掌握
3、。依赖机器,可读性差,难以掌握。一个机器语言的例子:表一个机器语言的例子:表6.3 6.3 。用用符号和助记符来代表机器语言符号和助记符来代表机器语言 ,为各操作码分配助记符,为各操作码分配助记符。(如:如:AsmAsm,MasmMasm)优点优点:速度快,可读性较好。速度快,可读性较好。特点特点:依赖机器,较难掌握,需要翻译。依赖机器,较难掌握,需要翻译。一一个符号语言的例子:表个符号语言的例子:表6.4 6.4 。 76.1.4 机器语言 6.1.5 汇编语言 用类英语描述对机器的指令。用类英语描述对机器的指令。(如:(如:FortranFortran,BasicBasic,C C,Pas
4、calPascal,C+C+等。)等。)优点:优点:可读性好,易于掌握。可读性好,易于掌握。特点:特点:不依赖机器,需要翻译。不依赖机器,需要翻译。程序设计就是程序设计就是寻找解决问题的方法,不需关心计算机本身的具体实现。寻找解决问题的方法,不需关心计算机本身的具体实现。 两个高级语言的例子:表两个高级语言的例子:表6.5 6.5 、表、表6.6 6.6 。 86.1.6 高级语言 目前常用的程序语言大约有目前常用的程序语言大约有5050多种多种 。 ( (详见表详见表6.7)6.7)每月对程序设计语言的使用情况有一个排名:每月对程序设计语言的使用情况有一个排名: ( (详见表详见表6.8)6
5、.8)注:排名结果并不代表程序语言的好坏注:排名结果并不代表程序语言的好坏 。6.2.1 常用高级程序语言9按照程序的运行方式分类: 1、汇编型语言2、解释型语言3、编译型语言4、混合型语言5、脚本性语言106.2.1 常用高级程序语言根据程序语言解决问题的方法及功能分类: 1、过程化语言2、函数式语言3、逻辑式语言4、面向对象语言5、专用语言116.2.1 常用高级程序语言 又称为命令式语言或强制性语言。(如:Fortran语言,COBOL语言,Ada语言,C语言,Basic语言,Pascal语言等。) 过程化语言程序按顺序的机器指令。 过程化语言的命令表现在两个方面: 1、操作数据项。 2
6、、控制下一条要执行的指令。 126.2.2 过程化语言 过程化语言的特点:过程化语言的特点:过程化语言过程化语言特点特点适用领域适用领域FortranFortran高精度运算高精度运算复杂数据的处理能力复杂数据的处理能力指数运算(指数运算( )科学计算和工程应用。科学计算和工程应用。COBOLCOBOL能快速访问,更新数据库能快速访问,更新数据库能生成大量报表能生成大量报表方便的格式化输出方便的格式化输出商业领域。商业领域。PascalPascal结构化编程结构化编程学术界,应用软件。学术界,应用软件。AdaAda具有并行处理能力具有并行处理能力大型计算机和工业领域。大型计算机和工业领域。C
7、C具有一些低级指令具有一些低级指令简洁,高效简洁,高效已被已被ANSIANSI和和ISOISO标准化标准化操作系统,系统软件,应用软件。操作系统,系统软件,应用软件。136.2.2 过程化语言又又称为表处理语言。称为表处理语言。(如:(如:LISPLISP语言,语言,SchemeScheme语言。)语言。)将函数看成是将函数看成是“黑盒黑盒”,程序就是将一系列的,程序就是将一系列的“黑盒黑盒”连起来。连起来。 146.2.3 函数式语言函数式语言程序设计的特点:函数式语言程序设计的特点: 1 1、定义函数、定义函数 (也可通过基本函数创建新的函数。)(也可通过基本函数创建新的函数。)2 2、调
8、用函数、调用函数 (可通过函数的组合解决问题。)(可通过函数的组合解决问题。)156.2.3 函数式语言一个一个SchemeScheme语言的范例:语言的范例:P.169P.169函数函数(car(List)(car(List)的作用:从列表的作用:从列表ListList中取出第一个元素。中取出第一个元素。函数函数( (cdrcdr (List) (List) 的作用:从列表的作用:从列表ListList中取出除第一个元素中取出除第一个元素 以外的所有元素。以外的所有元素。现有列表现有列表ListList: List=4 9 12 42 35 47 26List=4 9 12 42 35 47
9、 26则:则: (car (List)(car (List)的结果为的结果为4 4 ( (cdrcdr (List) (List)的结果为的结果为9 12 42 35 47 269 12 42 35 47 26若要从若要从ListList表中取出第四个元素,表中取出第四个元素,则:则: (car(car(cdrcdr( (cdrcdr( (cdrcdr List) List)166.2.3 函数式语言 又称为声明式语言或说明性语言。又称为声明式语言或说明性语言。 程序设计主要是进行事实归纳和规则推理,程序设计主要是进行事实归纳和规则推理, 适合于特定的领域。适合于特定的领域。(如:(如:Pro
10、logProlog语言)语言) 一个一个PrologProlog语言的例子:语言的例子:P.169P.169176.2.4 逻辑式语言 采用面向采用面向对象对象的思想进行程序设计。的思想进行程序设计。 ( (如:如:SmalltalkSmalltalk语言,语言,C+C+语言,语言,JavaJava语言等。语言等。) ) 面向对象语言的面向对象语言的特点:特点: 对象和操作被捆绑在一起。对象和操作被捆绑在一起。 通过对象去调用操作,有可能产生的结果:通过对象去调用操作,有可能产生的结果: 1 1、改变对象自身的状态、改变对象自身的状态 2 2、改变其他对象的状态、改变其他对象的状态 3 3、改
11、变系统的状态、改变系统的状态186.2.5 面向对象语言例如:图形用户界面系统。例如:图形用户界面系统。 图标图标对象对象 图标所允许的操作图标所允许的操作 (如:单击鼠标左键、右键,双击鼠标左键等)(如:单击鼠标左键、右键,双击鼠标左键等)对象的操作。对象的操作。 操作的结果操作的结果对象通过该对象内部的操作产生的结果。对象通过该对象内部的操作产生的结果。196.2.5 面向对象语言 应用于网络和数据库的语言。应用于网络和数据库的语言。 如:如:HTMLHTML语言,语言,PerlPerl语言,语言,PHPPHP语言,语言, SQLSQL语言等。语言等。 特点:属于脚本语言,易于掌握。特点:
12、属于脚本语言,易于掌握。206.2.6 专用语言 一个一个HTMLHTML程序的例子:程序的例子:标题标题这是一个这是一个HTMLHTML范例范例! ! 216.2.6 专用语言 过程化程序语言具有的共性:过程化程序语言具有的共性: 1 1、标识符、标识符 2 2、变量与数据类型、变量与数据类型 3 3、常量和文字、常量和文字 4 4、表达式和赋值语句、表达式和赋值语句 5 5、控制语句、控制语句 6 6、注释、注释 过程化程序语言的语句:过程化程序语言的语句: 1 1、声明语句:说明程序中要使用的元素。、声明语句:说明程序中要使用的元素。 2 2、命令语句:描述算法的步骤。、命令语句:描述算
13、法的步骤。 3 3、注释语句:解释程序的功能。、注释语句:解释程序的功能。22 标识符的作用:标识符的作用:命名命名。 计算机通过标识符与地址的联系来操作数据。计算机通过标识符与地址的联系来操作数据。 不同的程序语言对标识符有不同的规定。不同的程序语言对标识符有不同的规定。 例如:例如:语言语言正确的标识符正确的标识符错误的标识符错误的标识符C Cstu_Nostu_No,Number3 Number3 _ _stu_Nostu_No,stu.nostu.no,3number3numberFortranFortranxyz7xyz7,ab8cab8c,Total12Total127xyz,AB
14、_t7xyz,AB_t,total123total123,ab.cab.cPascalPascalxtable8xtable8,AppleApple9xtable89xtable8,Apple_xApple_xBasicBasicExp5Exp5,teamteam3 34game4game,_ _abcabc(表(表6.116.11)236.3.1 标识符1 1、变量:变量: 以标识符作为名字,代替存储地址。以标识符作为名字,代替存储地址。 变量的特点:保存程序的计算结果。变量的特点:保存程序的计算结果。2 2、数据类型、数据类型 数据类型决定了数据数据类型决定了数据可执行的操作可执行的操作以
15、及以及 数据的数据的取值范围取值范围。程序设计语言的基本数据类型见表程序设计语言的基本数据类型见表6.126.12。 246.3.2 变量与数据类型3 3、变量的声明、变量的声明 将变量指定为某种将变量指定为某种 数据类型。数据类型。 如:如:语言语言变量声明语句变量声明语句C C语言语言float lengthfloat length,widthwidth;int Taxint Tax,TotalTotal;char Symbolchar Symbol;FortranFortran语言语言REAL LengthREAL Length,widthwidthINTEGER TaxINTEGER
16、Tax,TotalTotalCHARACTER SymbolCHARACTER SymbolPascalPascal语言语言varvarLengthLength,widthwidth:realreal;TaxTax,TotalTotal:integerinteger;SymbolSymbol:charchar;BasicBasic语言语言number%number%price!price!name$name$256.3.2 变量与数据类型常量:常量:程序执行过程中不能更改的数据程序执行过程中不能更改的数据 。常量分两种:文字常量和命名常量。常量分两种:文字常量和命名常量。 文字常量:文字常量:
17、直接以数字的形式出现在程序中。直接以数字的形式出现在程序中。 如如c c语言中:语言中:Area=3.14159Area=3.14159* *r r* *r r; / /* *r r为变量为变量* */ / 命名常量:命名常量:以标识符的形式出现在程序中。以标识符的形式出现在程序中。 如如c c语言中:语言中:Area=Area=PIPI* *r r* *r r; / /* *r r为变量为变量* */ /266.3.3 常量和文字1 1、表达式:、表达式: 由一系列由一系列操作数操作数和和运算符运算符的组合构成。的组合构成。操作数:操作数:变量或表达式。变量或表达式。 (表达式的结果为一个具
18、体的值(表达式的结果为一个具体的值 )运算符:运算符:制定运算规则制定运算规则 。常用的运算符有四种(表常用的运算符有四种(表6.146.176.146.17):): 算术运算符;算术运算符; 关系运算符;关系运算符; 逻辑运算符;逻辑运算符; 赋值运算符。赋值运算符。276.3.4 表达式和赋值语句控制语句的作用:控制语句的作用:改变程序中语句的执行顺序。改变程序中语句的执行顺序。主要有两种:分支结构和循环结构。主要有两种:分支结构和循环结构。1 1 、分支结构、分支结构 有两种分支结构:有两种分支结构: ifelseifelse结构结构( (流程图见图流程图见图6.5 6.5 ) )。 s
19、witchswitch结构结构( (流程图见图流程图见图6.66.6) )。286.3.5 控制语句2 2、循环结构、循环结构 有三种循环结构:有三种循环结构: forfor循环结构循环结构( (流程图见图流程图见图6.7 6.7 ) )。 whilewhile循环结构循环结构( (流程图见图流程图见图6.76.7) )。 dowhiledowhile循环结构循环结构( (流程图见图流程图见图6.86.8) )。注:在不同的程序语言中,分支结构和循环结构注:在不同的程序语言中,分支结构和循环结构 的语法描述会稍有差异。的语法描述会稍有差异。296.3.5 控制语句3 3、强制转移语句、强制转移
20、语句是一种强命令型语句,无条件转移程序指令。是一种强命令型语句,无条件转移程序指令。具有统一的语句形式:具有统一的语句形式: gotogoto gotogoto语句的特点:语句的特点: 给程序的执行带来极大的方便;给程序的执行带来极大的方便; 会降低程序的可读性;会降低程序的可读性; 可能导致程序发生严重的错误。可能导致程序发生严重的错误。 一个使用一个使用gotogoto语句的例子:语句的例子:P.177P.177建议:不用或少用建议:不用或少用gotogoto语句语句306.3.5 控制语句 注释是对程序的语句或功能进行说明,注释是对程序的语句或功能进行说明, 为阅读程序提供额外的信息,帮
21、助理解。为阅读程序提供额外的信息,帮助理解。 注释的存在与否都不影响程序的执行。注释的存在与否都不影响程序的执行。 不同的程序语言有不同的注释符号。不同的程序语言有不同的注释符号。 常见语言的注释符号见表常见语言的注释符号见表6.186.18。 建议:为程序写上适当的注释。建议:为程序写上适当的注释。316.3.5 注释1 1、过程:、过程:一些指令的集合一些指令的集合 。 (指令:由顺序结构、分支结构或循环结构组成(指令:由顺序结构、分支结构或循环结构组成 ) 2 2、过程头部:、过程头部:过程名。过程名。( (建议用动词作为过程名建议用动词作为过程名) ) 3 3、过程调用:、过程调用:请
22、求过程提供服务。请求过程提供服务。 注:注:过程就是程序的缩影。过程就是程序的缩影。326.4.1 过程程序单元:程序单元:具有独立的功能。具有独立的功能。过程或函数:过程或函数:具有独立的功能的程序单元。具有独立的功能的程序单元。过程调用的控制流:过程调用的控制流:336.4.1 过程1 1、参数:、参数:过程中要用到的通用变量。过程中要用到的通用变量。 形参:过程中制定的参数。形参:过程中制定的参数。 实参:调用过程时传递给形参的数据。实参:调用过程时传递给形参的数据。2 2、参数的位置:、参数的位置:过程头部的括号中。过程头部的括号中。3 3、参数的传递方式:、参数的传递方式: 传值:将
23、实参的副本传递给形参。传值:将实参的副本传递给形参。 传引用:将实参变量的地址传递给形参。传引用:将实参变量的地址传递给形参。346.4.2 参数 C C语言中描述的一个过程如下:语言中描述的一个过程如下:void push(float f)void push(float f) if(spMax) if(spMax) valsp+=f valsp+=f; elseelse print(“Error! Stack Fulln”) print(“Error! Stack Fulln”); 过程过程的调用:的调用:push(12.3);push(12.3);356.4.2 参数 函数与过程类似。函数
24、与过程类似。函数与过程的不同之处:函数与过程的不同之处:函数必须向调用它的地方传回一个值。函数必须向调用它的地方传回一个值。 (函数必须要有一个计算结果。)(函数必须要有一个计算结果。)函数的头部:函数名。函数的头部:函数名。( (建议用名词作函数名建议用名词作函数名) )366.4.3 函数一个一个C C语言函数的例子:语言函数的例子:float float myrootmyroot(float (float x x,float yfloat y,float z)float z) float temp float temp; temp= ytemp= y* *y-4y-4* *x x* *z
25、 z; if(temp0.0)if(temp0.0) return -1 return -1; elseelse return (root(temp); return (root(temp); 函数函数调用:调用:X1=(-X1=(-b+b+myrootmyroot( (a,b,ca,b,c) )/(2)/(2* *a) a); X2X2=(-b-=(-b-myrootmyroot( (a,b,ca,b,c) )/(2)/(2* *a) a);376.4.3 函数 由程序语言的实现提供的一种底层操作,与开发工具一起提供给程序设计人员。由程序语言的实现提供的一种底层操作,与开发工具一起提供给程序
26、设计人员。 常用的标准输入/输出语句如下:PRINT aPRINT aINPUT aINPUT aBasicBasicwirteln(a)wirteln(a)readln(a)readln(a)PascalPascal语言语言PRINT PRINT * *,a ,aREADREAD* *,a ,aFortranFortran语言语言将变量将变量a a的值输的值输出到屏幕上。出到屏幕上。printf(“%dn”,a);printf(“%dn”,a); 从键盘接从键盘接收整型变量收整型变量a a的值。的值。scanf(“%d”,&a);scanf(“%d”,&a);C C语言语言功能功能输出函数输
27、出函数功能功能输入函数输入函数 库库函数函数语句语句6.4.4 输入与输出38程序翻译程序翻译就是对源程序进行就是对源程序进行编译。编译。 源程序:源程序:由程序设计语言编写的程序。 注:源程序是不能被执行的。注:源程序是不能被执行的。 将源程序变成可执行程序的过程:将源程序变成可执行程序的过程:396.5.1 程序翻译第第1 1步步第第2 2步步 源程序的翻译:源程序的翻译:由编译器完成。由编译器完成。 编译器的三个重要进程:编译器的三个重要进程: 词法分析;词法分析; 分析源程序中的哪些符号串代表了一个实体的进程分析源程序中的哪些符号串代表了一个实体的进程 ,将结果,将结果 保存在一个称为
28、记号的结构单元里。保存在一个称为记号的结构单元里。 语法分析语法分析; ; 对记号进行分析,根据一系列的语法规则来识别程序的语法对记号进行分析,根据一系列的语法规则来识别程序的语法 结构所代表的进程。结构所代表的进程。 目标代码生成;目标代码生成; 将没有语法错误的程序指令转换成机器语言指令。将没有语法错误的程序指令转换成机器语言指令。 406.5.1 程序翻译一个一个C C语言源程序编译的例子:语言源程序编译的例子:第第1 1步:步:编辑源程序:编辑源程序:mytest.cmytest.c第第2 2步:步:用用microsoftmicrosoft C C编译器,命令方式进行编译:编译器,命令
29、方式进行编译: cl cl c c mytest.cmytest.c结果:结果:若源程序没有错误,会生成目标代码程序:若源程序没有错误,会生成目标代码程序: mytest.obj mytest.obj 。注:注:不同的程序语言有不同的编译器。不同的程序语言有不同的编译器。 编译的方式不是唯一的。编译的方式不是唯一的。416.5.1 程序翻译 目标代码并不是可执行代码。目标代码并不是可执行代码。 要获得可执行的程序,需将目标代码链接起来。要获得可执行的程序,需将目标代码链接起来。 链接器的任务就是将目标程序链接成可执行的程序链接器的任务就是将目标程序链接成可执行的程序(或称载入模块)。(或称载入
30、模块)。426.5.2 链接程序一个链接一个链接C C语言目标代码的例子:语言目标代码的例子:第第1 1步:步:对源程序对源程序mytest.cmytest.c编译后生成了目标代码程序编译后生成了目标代码程序 mytest.objmytest.obj;第第2 2步:步:用用microsoftmicrosoft C C编译器,命令方式进行链接:编译器,命令方式进行链接: link /link /out:mytest.extout:mytest.ext mytest.obj mytest.obj结果:结果: 如果不发生错误,会生成一个载入模块:如果不发生错误,会生成一个载入模块: mytest.e
31、xemytest.exe注:注: 不同的程序语言有不同的链接器。不同的程序语言有不同的链接器。 链接的方式不是唯一的。链接的方式不是唯一的。436.5.2 链接程序集成开发环境(集成开发环境(IDEIDE):):也称为软件开发包、开发工具。也称为软件开发包、开发工具。将编辑器、翻译器、链接器和其他软件单元集合在一起。将编辑器、翻译器、链接器和其他软件单元集合在一起。集成开发环境一般集成开发环境一般都是为特定的程序语言定制的。都是为特定的程序语言定制的。 (不同的程序语言有不同的开发环境)(不同的程序语言有不同的开发环境) 同一种语言的开发包也会有一些不同的产品和版本。同一种语言的开发包也会有一
32、些不同的产品和版本。 446.5.3 集成开发环境几种常用程序语言的开发环境:几种常用程序语言的开发环境:程序语言程序语言软件开发包软件开发包C CTurbo CTurbo C,Borland CBorland C,gccgcc,Microsoft c/c+ Microsoft c/c+ 等等C+C+Borland C+Borland C+,Visual C+Visual C+,Build C+Build C+,Microsoft c+ Microsoft c+ 等等FortranFortranf77f77,Powerstation Fortran Powerstation Fortran 等
33、等PascalPascalTurborTurbor Pascal Pascal,DephiDephi 等等456.5.3 集成开发环境 用面向对象的方法来设计程序。用面向对象的方法来设计程序。(与过程化程序设计方法不同)(与过程化程序设计方法不同) 面向对象的系统需包含三个要素:面向对象的系统需包含三个要素: 对象、类和继承。对象、类和继承。 1 1、对象、对象 所有资源都是对象。所有资源都是对象。 资源:资源:以数据和模块的形式表现。以数据和模块的形式表现。 ( (每一个对象把一组数据和一组过程封装在一起。每一个对象把一组数据和一组过程封装在一起。 ) )466.6.1 面向对象程序设计2
34、2、类、类 类是对象的状态描述和方法的定义。类是对象的状态描述和方法的定义。 一个完整的类描述包含了外部接口、内部一个完整的类描述包含了外部接口、内部 算法和数据结构。算法和数据结构。 类是一种抽象的数据类型。类是一种抽象的数据类型。 类所创建的对象被称为这个类的实例。类所创建的对象被称为这个类的实例。 一个类的所有对象都具有相同的数据结构,共享相同一个类的所有对象都具有相同的数据结构,共享相同的实现操作的代码,但各自有不同的状态。的实现操作的代码,但各自有不同的状态。 476.6.1 面向对象程序设计3 3、继承、继承继承是指一个对象除了拥有自己的属性和操作以外,继承是指一个对象除了拥有自己
35、的属性和操作以外, 还可以从另一个对象那里继承一些特性。还可以从另一个对象那里继承一些特性。 继承为软件的开发和维护提供了有力的技术支持。继承为软件的开发和维护提供了有力的技术支持。 486.6.1 面向对象程序设计 程序设计语言本身主要是实现算法,解决问题。程序设计语言本身主要是实现算法,解决问题。 软件开发工具为编写程序和生成可加载模块提供方便。软件开发工具为编写程序和生成可加载模块提供方便。 程序语言和软件开发工具的发展方向:程序语言和软件开发工具的发展方向: 智能化、网络化、标准化智能化、网络化、标准化496.6.2 程序语言的发展趋势本章本章应重点了解的内容:应重点了解的内容:1 1
36、程序设计语言的发展演化过程。程序设计语言的发展演化过程。 2 2常见的程序设计语言的类型。常见的程序设计语言的类型。 3 3过程化程序设计语言的共同基本语义:过程化程序设计语言的共同基本语义: 标识符、变量与数据类型、常量和文字;标识符、变量与数据类型、常量和文字; 表达式(算术表达式、关系表达式、逻辑表达式)表达式(算术表达式、关系表达式、逻辑表达式) 赋值表达式;赋值表达式; 控制语句(分支控制和循环控制);控制语句(分支控制和循环控制); 注释;注释;4 4程序设计语言的基本结构:程序设计语言的基本结构: 顺序结构;顺序结构; 分支结构;分支结构; 循环结构。循环结构。5 5源程序的编译、链接概念。源程序的编译、链接概念。50在此输入标题输入文字在此录入上述图表的综合分析结论在此录入上述图表的综合分析结论在此录入上述图表的综合分析结论在此录入上述图表的综合分析结论“谢谢聆听!51