1、第第2章章 Object Pascal语言基础语言基础在Delphi开发环境中,采用面向对象的Pascal语言(Object Pascal)。该语言源于Pascal语言。其结构清晰,语句灵活,便于移植,广泛应用于多种软件开发工具中。此外,Object Pascal语言支持面向对象技术,是一种功能完善的程序设计语言。2.1 Object Pascal的符号集的符号集符号是Object Pascal语言的基本单位。每一个符号都是由一个或多个字符构成,常见的符号种类有:标识符、运算符、标点符号和数字符号等。2.1.1 标识符标识符1.构成与功能:标识符的主要作用是标识程序中使用到的常量、变量、函数、
2、过程和类型的名称,由英文字母、数字和下划线组成。2.构成标识符原则:标识符全长不超过255个字符。标识符由字母或下划线起始。标识符对大小写不敏感。标识符中不允许出现空格。标识符不得与系统保留字或指令字重名。标识符不得与系统函数重名。2.1.2 关键字与指令字关键字与指令字1.定义:系统定义的具有特殊含义与用途的标识符称为关键字或指令字。2.联系:都是系统定义的标识符。3.区别:关键字又称保留字,用户在程序设计过程中声明标识符时一定不得与关键字重名;指令字用于程序中的特殊位置,只在自身定义的程序段范围内有效,在程序的其他范围内,用户可以声明与指令字同名的标识符。4.建议:声明用户标识符时,即不要
3、与系统关键字重名,也不要与指令字重名。关键字关键字说明关键字关键字说明absolute 定义变量,其起始地址与另一变量相同abstract创建抽象方法as将一个对象转换为另一个对象asm插入汇编语言cdecl定义调用C编写DLL中函数的规则class定义类constructor声明构造函数contains指定包(packet)中间包含文件destructor声明析构函数dynamic声明动态方法except用于异常处理export该函数可以被输出供其他用户调用exports用以输出对象,可输出多项external外部引用far标识制定函数可以远程调用finalization标识单元释放时要调用
4、的方法finally异常处理时最后调用的方法implementation标识单元实现部分inherited调用父类方法initialization单元初始化是调用方法is用于对象判断name定义方法别名near指定函数可以本地调用nodefault不允许存在默认值object声明对象pascal函数调用协议program指出工程为应用程序raise抛出异常register调用函数时在注册表中记录reintroduce重新发布threadvar定义随线程启动变量try标识异常处理开始5.常见关键字表2.1.3 注释注释1.目的:提高程序的可读性和可维护性。2.方法:花括号注释 圆括号与星号注释(
5、*)双斜杠注释/3.注意:不得使用嵌套注释2.2 常量与变量常量与变量用户程序在运行时将处理大量数据,有的数据在程序运行的整个过程都是不变的,称为常量;而有的数据在程序运行过程中,取值会发生变化,称为变量。2.2.1 常量常量由于在程序运行始终,常量值是不发生变化的,因此,常量在声明同时就要赋值。1.常量声明const(常量标识符号)=(常量值);2.声明一个常量:constpi=3.1415926;3.声明多个常量:conste=2.71828;nation=中华人民共和国;/Delphi中用单引号表标识字符串2.2.2 变量变量变量在使用之前,必须先声明,在声明时要指定变量类型,只有声明后
6、变量才能使用。1.声明变量var(变量声明1);(变量声明2);(变量声明n);变量声明包括两个部分:变量名称和变量类型。中间用分冒号开,变量声明结束后用分号标识。var /标识以下为变量声明x,y:Single;/声明两个变量x与y,它们都是实数类型str1:String;/声明一个名称为str1的字符串类型变量2.变量初值:变量声明后,系统即在存储空间中划分出适当的区域来保存该变量的取值。此时,存储空间中的值是随机的。为了提高程序的健壮性,在声明变量后Object Pascal编译器会自动为变量赋初值:整型变量声明后自动赋值为0,实型变量赋值为0.0,指针型变量赋值为null;字符串变量赋
7、值为空。2.3 数据类型数据类型数据类型是数据的重要特征,用以决定数据的形式、取值范围和相应操作。Object Pascal中数据类型可以分为简单数据类型,用户构造数据类型和指针数据类型3种。2.3.1 简单数据类型简单数据类型简单数据类型包括标准类型与用户自定义类型两种。标准类型由系统定义,包括实型、整型、字符型和布尔型;用户定义类型包括枚举型和子界型。所有的标准类型都是有序的,而除了实型以外,其他标准数据类型都是顺序的,即不但有顺序,还有顺序编号。1.实数(浮点数)类型名称字长取值范围单精度Single32位1.510-453.4103848位实数Real4848位2.910-391.71
8、038双精度Double64位5.010-3241.71030864位浮点Comp64位-263+1263-1拓展浮点数Extend80位3.610-49511.1104932货币类型Currency64位-922337203685477.5808 922337203685477.5807Object Pascal的实型数据1)实数特点:实型数据字长越长,数据精度越高。2)特殊实数:Currency:专为财务货币处理设计,该类型规定数据必须有4位小数,当Currency与其他数据类型共同运算时,Currency类型。Comp:针对Inter公司的64位CPU架构进行了优化。3)实数与整数转换:
9、TRUNC:舍弃取整,即将浮点数小数部分舍弃,得到整数;ROUND:舍入取整,即根据四舍五入原则对浮点数取整。TRUNC(1.2)=1ROUND(1.2)=1TRUNC(1.8)=1ROUND(1.8)=2TRUNC(-8.9)=-8 ROUND(-8.9)=-92.整数类型名称字长取值范围短整型ShortInt8位有符号-127128字节型Byte8位无符号0255小整型SmallInt16位有符号-3276832767字型Word16位无符号065535整型Integer/LongInt 32位有符号-21474836482147483647序数型Cardinal/LongWord32位无
10、符号0429496729564位整数Int6464位有符号-263263Object Pascal的整型数据1)整数运算:整除运算:DIV表示整除运算,相当于整数除法中的求商操作;取余运算:MOD表示取余运算,相当于整数除法中的求余数操作。7 MOD 3=27 DIV 3=16 MOD 3=26 DIV 3=02)常用函数PRED函数:表示取某个整数的前导数。SUCC函数:表示取某个整数的后继数。PRED(10)=9SUCC(10)=11PRED(-10)=-11SUCC(-10)=-9 3.字符与字符串1)字符:用以存放单个符号。类型名称字节取值范围ANSI字符AnsiChar1字节扩展AN
11、SI字符字符Char1(2)字节扩展ANSI字符宽字符WideChar2字节UniCode字符Object Pascal的字符型数据Char与AnsiChar是等价类型,而WideChar字符提供了对汉字等宽字节编码的支持(2)特殊符号表示:空格表示:或者使用系统定义了常量BLANK。定界符表示:单引号是字符定界符,其形式为:。第一和第四个单引号是表示定界符,第二与第三两个连续单引号在一起,表示符号转义,第二个单引号是转义符,表示后面的单引号不再是定位符而是普通字符了。(3)常见函数:ORD函数:求取字符在ANSI表中序号;CHR函数:求该整数序号对应的字符。例如:ORD(a)=97 ORD(
12、9)=57CHR(112)=p CHR(PRED(ORD(6)=52)字符串:(1)定义:由两个单引号定位的一串字符。类型名称字节最大长度短字符串ShortString2256255个ANSI字符长字符串AnsiString42GB231个ANSI字符宽字符串WideString42GB230个UniCode字符字符串声明的语法格式如下:Var str1:String;Object Pascal的字符型数据(2)字符串长度:一个字符串中包含字符的个数称字符串的长度。变长字符串:长度动态变化的字符串。Var str1:String;定长字符串:最大长度确定的字符串,超出最大长度的字符自动删除。V
13、ar str2:Stringn;4.布尔型1)定义:布尔型数据用于进行判断,故只有两个取值:TRUE与FALSE。2)分类:类型名称字节取值范围布尔型Boolean1字节TRUE(1);FALSE(0)2字节布尔型WordBool2字节TRUE(非0数);FALSE(0)4字节布尔型LongBool4字节TRUE(非0数);FALSE(0)一般仅使用第一种布尔类型Boolean。Object Pascal中的布尔型数据3)相关运算(1)函数运算ORD(FALSE)=0SUCC(TRUE)=FALSEPRED(TRUE)=FALSEPRED(FALSE)=TRUE(2)关系运算布尔类型数据与其他
14、数据类型进行关系运算时,运算结果为布尔值。35=FALSE35=TRUEAB=FALSETRUE0=TRUEFALSE TRUE=TRUE5.枚举类型枚举类型实际上是将用户定义的有限的具有描述意义的值与序号一一对应起来,这些值称枚举值。1)定义TYPE =(,);Var :;2)原则枚举值只能是标识符。一个枚举值只能属于一个枚举类型,且只出现一次。定义枚举类型时,该类型所有可能的取值必须全部列出3)用例用户可以定义关于色彩的枚举类型如下TYPE Color=(Red,Green,Blue);Var UsrColor,MyColor:Color;4)赋值赋值必须是该类型的枚举值或是同类型的枚举变
15、量值,以下为合法赋值:UsrColor:=Red;MyColor:=UsrColor;下面赋值是非法的:UsrColor:=Orange;MyColor:=1;5)相关运算枚举类型可以进行ORD、PRED、SUCC以及关系运算。ORD(Green)=1PRED(Blue)=Green在枚举值列表中,第一个枚举值没有前驱,最后一个枚举值没有后继。枚举类型可以进行关系运算,在运算时,根据枚举值序号大小进行比较得到结果。例如:Red Green=FALSEGreenBlue=TRUE6.子界类型用于指定变量的取值范围,便于检查不合法的输入数据。1)定义TYPE =常量1.常量2;Var :;2)要求
16、常量1与常量2的类型必须一致,它们的类型也称为子界的基类型。子界的上界(常量2对应序号)必须大于子界的下界(常量1对应序号)。3)实例TYPEAGE=0.150;character=a.z;Varpeopleage:AGE;inputchar:character;2.3.3 用户构造数据类型用户构造数据类型常见的用户构造数据类型有数组、集合和记录。1.数组数组是相同类型的数据按一定顺序排列构成的序列。1)数组特点 数组元素存放在内存中的连续区域 用户利用数组中位置的编号来操作该数组元素值2)静态数组数组元素的个数是固定的,在程序初始化时,用户必须分配数组存储单元数目,该数字在分配后不可改变。(
17、1)定义TYPE =ARRAY下标下限.下标上限 OF;Var :;(2)实例TYPEIntArr=ARRAY0.9 OF Integer;VarArrX:IntArr;(3)多维数组当数组下标对多于一对则称多维数组。TYPE=ARRAY下限1.上限1,下限2.上限2,下限n,上限n OF;Var:;例:TYPE RealArr=ARRAY1.5,0.4,3.6 OF Single;Var ArrY:RealArr;ArrY是一个三维实数数组,第一维长度为5,第二维长度为5,第三维长度为4,因此,整个数组大小为554=100,即数组共由100个Single类型数据构成。3)动态数组动态数组类型
18、在声明时不需要指定数组大小。(1)定义TYPEMYARR1=ARRAY OF Integer;MYARR2=ARRAY OF ARRAY OF Single;VarArr1:MYARR1;Arr2:MYARR2;(2)说明MYARR1是一个一维动态数组类型,MYARR2是一个二维动态数组,如果用户想定义更多维数的动态数组,只需在定义时使用多次ARRAY OF关键字。(3)使用在使用之前,必须先使用SetLength方法来确定数组大小。(4)SetLength函数SetLength(Arr1,5);/指定数组Arr1有5个元素SetLength(Arr2,4,5);/制定数组Arr2有20个元素
19、,第一维大小为4,第二维大小为52.集合类型1)集合特点 所有元素必须是具有相同特征的有序数据。有序数的类型就是集合的基类型。每个集合最多可以拥有255个元素。2)定义TYPE=set of;Var:;集合中的元素是有序的,一般情况下,基类型为子界型或枚举型。例如:TYPECharSet=set of Char;IntSet=set of 0.100;ColorSet=set of Color;VarCharS:CharSet;IntS:IntSet;ColorS:ColorSet;3)集合赋值集合在使用前要先赋值,集合值用中括号定界,对于连续取值可以采用子界形式:CharS:=0.9,a,A
20、;/集合中有12个元素值IntS:=2,4,6,8,10;/集合中有5个元素值ColorS:=;/空集合4)集合运算(1)集合可以进行并(+)、交(*)、差(-)运算,其操作数与运算结果都必须是集合类型数据。(2)集合可以进行关系运算,运算的结果是布尔类型。(3)in运算,判断某个元素值是否在集合中。Set1,Set2:IntSet;Set1:=1,3,5,6,7,8;Set2:=2,4,6,7,9;Set1+Set2=1,2,3,4,5,6,7,8,9;Set1Set2=1,3,5,8;Set1*Set2=6,7;Set1=Set2的值为FALSE;Set1Set2的值为TRUE;1,3,5
21、=Set1的值为FALSE;7 in Set1的值为TRUE;12 in Set2 的值为FALSE3.记录类型将一组数据类型关联起来共同来描述某个对象的特征。1)定义=RECORD :;:;:;END;2)实例将学生个人信息包括:学号、姓名、年龄、性别和家庭住址,这可以通过定义记录类型来描述。STUDENT=RECORDSNO:String;SNAME:String;SAGE:Integer;SSEX:Boolean;SADDRESS:Sring;END;3)赋值VarSInf:STUDENT;SInf.SNO:=123456789;SInf.SNAME:=Tom;SInf.SAGE:=19
22、;SInf.SSEX:=TRUE;SInf.SADDRESS:=19th,Well Street.;2.3.3 指针类型指针类型指针类型的变量称指针变量。这是一种特殊的变量,变量的取值是其他数据存放的地址。有了指针变量,用户可以直接操作变量地址并可以修改该地址存放的数值。1.指针定义TYPE =;基类型可以是任何基本数据类型,也可以是集合、数组和记录等用户定义数据类型,是指针标识,表示这是一个指向基类型的指针。TYPE PointOfInteger=Integer;PointOfChar=Char;PointOfStud=STUDENT;Var pInt:PointOfInteger;/定义一
23、个指向整型的指针变量 pChar:PointOfChar;/定义一个指向字符的指针变量 pStuInf:PointOfStud;/定义一个指向STUDENT结构的指针变量2.地址与数据关系pInt19810217H指针变量pInt指向地址0217H,在地址为0217H的存储单元中,存放着整数1981。3.指针操作1)分配地址new过程来为指针分配地址。例如:new(pInt)。此时,系统自动在内存中划分出一个Integer类型的存储单元,并将该单元的地址赋给pInt指针。2)指针赋值pInt:=1981;相当于X:=1981;pInt:=X;3)释放指针Dispose(pInt);4)指针加减
24、运算2171981pInt9850H9854H9858HpInt+1的含义不是pInt数值加整数1,而是表示pInt指向下一个存储单元。Int+1指向地址是9854H+4=9858H,而(pInt+1)的值为17。如果指向的是pInt 1运算,pInt则指向9850H,pInt值为19812.3.4 其它数据类型其它数据类型1.时间日期类型即Double类型,Object Pascal语言规定0对应1899-12-30正午12点整,作为标准日期时间。对于每个Double类型数据,整数部分表示与标准日期时间误差的天数,正数表示标准日期之后的天数,负数表示标准日期之前的天数;小数部分表示时间,即从
25、0点时刻到当前时刻的时间与全天24小时的比值。3.75表示日期为1900-1-2,时间为下午6时;-1.25表示日期为1899-12-29,时间为上午6时;35066表示日期为1996-1-2,时间为上午12时。在程序设计中,一般采用字符串来表示日期,然后用日期转换函数来完成字符与日期时间的转变。2.变体类型1)说明Variant类型支持所有简单数据类型以及日期类型、货币类型甚至是OLE自动化对象。Variant类型变量在程序运行期间可以转换为其他任何类型的变量。2)定义Varv:Variant;v:=1;/Variant为Integerv:=Delphi;/Variant为Stringv:=
26、TRUE;/Variant为BooleanVariant类型会导致系统编译速度降低,程序占用存储空间加大,更有可能增加程序逻辑错误,所以不提倡用户使用Variant类型。2.3.5 类型转换类型转换1.定义类型转换是将一种类型的变量转换为另外一种类型的变量。2.转换方式如果整数和实数同时参与运算时,整数自动转换为实数。除此之外的类型转换均采用显式的类型转换方法,即用户使用类型转换函数来完成不同数据类型间的转换工作。3.常用转换函数函数名称作用Chr将一个有序数据转换为一个ANSI字符Ord将一个有序类型值转换为它的序号Round转换一个实型值为四舍五入后的整型值Trunc转换一个实型值为小数截
27、断后的整型值Int返回浮点数的整数部分IntToStr将数值转换为字符串IntToHex将数值转换为十六进制数字符串StrToInt将字符串转换为一个整型数常Val将字符串转换为一个数字Str将数字转换为格式化字符串StrToDateTime将字符串转换为日期/时间格式DateTimeToStr将日期时间格式转换为字符串 常用的类型转换函数 2.4 运算符运算符 运算符是程序设计语言中表示数据运算类型的符号,根据运算类型的不同,一般可以分为数据赋值、数值运算、逻辑运算、比较运算和位运算。2.4.1 赋值运算赋值运算 赋值运算是将赋值符号右边表达式或变量的值传递给赋值符号左边的变量。赋值符号是冒
28、号和等号两个符号的组合,即:=。X:=5;可以读作X获得值5,或X被赋值为5。2.4.2 数值运算数值运算1.定义数值运算主要是对数据进行取反、加、减、乘、除运算、整除和取余运算。符号功能实例运算结果-取反-5-5+加法5+3.48.4-减法10-64*乘法3*515/除法7/32.33333333Abs取绝对值Abs(-7.6)7.6Sqr求平方数Sqr(5)25Sqrt求正平方根Sqrt(16)4Object Pascal中的常用数值运算符2.平方与开方运算Power函数是定义在Math单元的函数,在使用时要在程序中声明Math单元。Power函数的格式如下:Power(const Bas
29、e,Exponent:Extended)这里,Base表示基数,Exponent表示指数,例如:94表示为Power(9,4);12的立方根表示为Power(12,1/3)。3.算式优先级如果有括号,要先计算括号中的内容,当括号是多级时,要先计算最里面括号中的内容。如果表达式没有括号,计算的顺序是:函数求反乘法、除法、整除、取余加、减。当两个运算优先级相同时,一般按自左向右的顺序进行。2.4.3逻辑运算逻辑运算逻辑运算是一种特殊运算,其运算结果是Boolean值。逻辑运算可以分为布尔运算和关系运算两类。1.布尔运算布尔运算只能针对布尔型数据进行,包括:AND(与)、OR(或)、NOT(非)和X
30、OR(异或)。ABA And B A OR BNOT AA XOR BTRUETRUETRUETRUEFALSEFALSETRUEFALSEFALSETRUEFALSETRUEFALSETRUEFALSETRUETRUETRUEFALSEFALSEFALSEFALSETRUETRUE布尔运算符的运算规则在表达式中,NOT优先级最高,AND与XOR次之,OR优先级最低,此外用户可以增加括号来改变优先级。2.关系运算关系运算用于判断两个相同类型数据之间的关系,并返回对应的布尔值,这些参加运算的数据必须是可以比较的。符号功能实例结果=判等3=5FALSE判不等35TRUE判大于45.2FALSE=判
31、大于等于8=8TRUE判小于-2-1.7TRUE=判小于等于7=8TRUEObject Pascal中常见的关系运算符3.特殊比较当布尔变量进行关系比较时,比较依据的是Boolean值的顺序,即按照FALSE为0,TRUE为1来进行比较。对两个集合变量A、B进行比较时,如果A是B的子集,则A=B取值为TRUE,否则为FALSE;如果A是B的真子集,则AB取值为TRUE,否则为FALSE;如果A、B中的所有元素相同,则A=B的值为TRUE,否则为FALSE;若A、B元素中有任何一个或多个元素不同,则AB取值为TRUE,否则为FALSE。2.4.4 位运算位运算位运算是一种专门针对整数进行的运算。
32、符号功能实例结果NOT按位取反NOT X-17OR按位或X OR Y-4AND按位与X AND Y16XOR按位异或X XOR Y-20SHL向左位移X SHL 264SHR向右位移Y SHR 4-1Object Pascal中的常见位运算符1.数据码制1)正负表示对于一个有符号数的二进制表示,最左边的一位用来表示符号:0表示正数,1表示负数,其余各位二进制数用来表示数据。2)原码、反码与补码正数而言,原码、反码和补码都是一致的,均是正数的二进制表示;对于负数而言,原码是负数绝对值的二进制表示(符号位为1),反码是原码数据按位取反(符号位不变),补码由反码+1计算而得。数据原码反码补码4000
33、0 01000000 01000000 0100-41000 01001111 10111111 1100数据的码制表示3)移位运算SHL运算是数据左移操作,X SHL 2表示0001 0000位串按位向左移动2位,由于位串只有8个二进制位,所以最左端两位数据将会丢失,而最右端两位数据移动后空出位置将自动补零,得到0100 0000,即64。同理,用户可以计算X SHL 3的值为-128.SHR运算操作与SHL操作相似,Y SHR 4表示二进制串按位右移4位,最右端移除部分,最左端空出4位补符号位,即最高位数字,得到二进制串1111 1111,结果是-1;如果Y取值为4,则Y SHR 4,得到
34、符号串0000 0000,结果是0.SHL与SHR运算是有损运算,运算结果有可能不精确。SHL操作与SHR操作不是互逆的,即(X SHR 2)SHL 2不一定得到X。2.4.5 字符串运算字符串运算1.连接运算连接运算符“+”,表示两个字符串拼接成一个字符串。2.函数运算下表中列出了Object Pascal语言中常用的字符串运算。符号功能实例结果+字符串连接CH+INACHINAUpperCase(s)字符串转大写UpperCase(this)THISLowerCase(s)字符串转小写LowerCase(ANSI)ansiPos(s1,s2)查找s2在s1中首次出现位置Pos(Beijin
35、g,i)3Length(s)求字符串长度Length(people)6CompareStr(s1,s2)字符串比较,区分大小写,当s1=s2时,返回0;当s1s2时,返回大于0数;当s10CompareText(s1,s2)同CompareStr,不区分大小写CompareText(is,IS)=0Copy(s,star,len)在字符串s中star位置,复制长为len的子串。若star+len-1Length(s),则复制到字符串结束为止;若star=0或starLength(s),则复制空串Copy(19810217,4,3)102Object Pascal中的常用字符串运算符2.5 语句
36、语句语句是程序设计中的基本单位,在Object Pascal语言中有顺序、分支和循环3种语句结构,人们已经证明,仅使用这3种语句结构即可以实现所有程序功能。2.5.1 基础知识基础知识1.书写规则1)命名规则命名规则要求程序中使用到的常量、变量以及过程与函数的名称要遵循规定。大小写字母错落有致。根据名称能清楚了解变量含义。要求变量名称第一个字符小写,表示变量类型。为函数与过程命名时,要求以大写字母开始,大小写字母错落排列。2)完备性规则对于设置了判断条件的语句,每一种可能性都要有对应的处理语句。函数与过程执行完毕后要判断执行是否正常。2.书写格式1)一个完整的Object Pascal应用程序
37、由program关键字开始,end.关键字结束。end后是.,表示程序结束。2)在程序中,uses关键字标明本程序要调用的单元,一个应用程序至少调用了SysUtils系统单元,如果还要使用其他单元的函数与过程,要加上被调用的单元名称。3)用户使用常量与变量均要遵循“先声明后使用”则。声明位置要在程序段之前,即该程序的begin关键字之前。2.5.2 基本语句基本语句Delphi语句可以分为简单语句与复合语句,简单语句包括表达式(它是由操作符和操作数组成)、赋值语句和调用语句;复合语句是指用begin.end把简单语句包括起来构成的语句。1.赋值语句在程序语句中,赋值语句最为重要,其语法结构如下
38、所示::=表达式;x:=y:=10;/错误x:=10;/正确y:=10;【例2-1】已知ABC两边AB,AC长度和A度数,求ABC第三边BC长度和ABC面积。步骤:(1)用户输入AB,AC长度和A度数;(2)根据公式 计算BC边长;(3)根据公式 计算ABC面积;(4)程序输出边长与面积。设计过程:为了简化程序设计,这里采用控制台程序设计模式。打开Delphi编程环境后,执行FileClose All命令关闭当前环境,然后执行FileNewOther命令,打开如下图所示的对话框。选择Console Application选项,单击OK按钮,则进入新的开发环境。在代码编辑器中输入如下代码。pro
39、gram Project1;uses SysUtils;const pi=3.1415926;/定义常量var AB,AC,ALPHA,S,BC:single;/定义变量begin 用户代码开始 readln(AB,AC,ALPHA);/读入3个变量 writeln(AB=,AB,AC=,AC,ALPHA=,ALPHA);/读入变量回显 ALPHA:=ALPHA*pi/180;/角度转换弧度 BC:=sqrt(sqr(AB)+sqr(AC)-2*AB*AC*cos(ALPHA);S:=(AB*AC*sin(ALPHA)/2;writeln(BC=,BC,S=,S);/显示计算结果 readln
40、;/等待用户键入回车建结束程序end.程序运行效果如下图所示。2.基本输入输出函数1)read函数read函数语句形式是:read(变量表)变量表中的变量是用逗号分开的;用户在输入数据时,要保证数据与变量类型相同,并且两个数据之间用空格分开,输入完成后按Enter键结束。(1)输入数字read(X,Y);用户键入12 24后回车,则12赋值给X,24赋值给Y。(2)输入字符由于空格也是字符,所有输入时要求字符与字符之间不用空格分开。read(ch1,ch2);用户键入AB回车,则ch1赋值为A,ch2赋值为B。(3)输入Boolean值对于Boolean值而言,在输入时,用1代表TRUE,0代
41、表FALSE。2)readln函数readln函数与read近似,其区别在于,当readln函数当最后一个变量赋值结束后,自动结束本行输入,使得下一个read语句从新一行开始。3)read与readln对比用户输入以下数据:1.02.03.0回车4.0 5.06.07.0回车执行语句read(X,Y);read(A,B,C);结果:X赋值为1.0;Y赋值为2.0;A赋值为3.0;B赋值为4.0;C赋值为5.0。若执行语句readln(X,Y);readln(A,B,C);则执行完毕后,X赋值为1.0;Y赋值为2.0;A赋值为4.0;B赋值为5.0;C赋值为6.0。4)write函数write函
42、数用于数据输出,write语句格式为:write(输出列表);如:write(X,X+Y);结果是1.0,3.0;为了标识输出结果,可以在write函数中加入说明信息,这些信息以字符串形式给出。如:write(X=,X,X+Y=,X+Y),显示结果是X=1.0,X+Y=3.0。5)writeln函数 writeln作用与write类似,只是在输出完成后自动换行。6)实例为了使得数据输入与输出更加符号用户习惯,可以在代码中加入相关write语句,用以提示当前用户输入数据的性质可以将【例2-1】的代码修改如下:begin write(Input AB:);readln(AB);write(Inpu
43、t AC:);readln(AC);write(Input ALPHA:);readln(ALPHA);ALPHA:=ALPHA*pi/180;BC:=sqrt(sqr(AB)+sqr(AC)-2*AB*AC*cos(ALPHA);S:=(AB*AC*sin(ALPHA)/2;writeln(BC=,BC:10:4);writeln(S=,S:10:4);readln;end.运行效果如下图所示。2.5.3 分支语句分支语句针对一定条件进行判断,根据判断结果来选择相应的处理方法,需要用条件判断语句或情况选择语句进行处理。1.IF语句1)格式:if 条件 then 语句;或是:if 条件then
44、语句1 else 语句2;2)程序结构图两种if语句的结构3)实例在程序中读入3个数,求出最大值并输出。步骤:(1)用户输入的三个数为a,b,c;(2)比较a,b大小,将较大者存入Largest变量;(3)比较c,Largest大小,将较大者存入Largest变量;(4)输出Largest变量。参考代码:program Project1;uses SysUtils;var a,b,c,largest:single;/定义变量begin write(Please Input a:);/用户输入数据 readln(a);write(Please Input b:);readln(b);write(
45、Please Input c:);readln(c);if a bthen largest:=a else largest:=b;if c largest then largest:=c;writeln(Largest Num is,largest:8:4);readln;end.运行效果如下图所示。在if then else结构中,如果then后面的语句只有一条,则该语句结束时,不用分号。2.多分支IF语句用户选择条件往往多于两个,这就构成了多分支选择。1)结构复合if语句的结构2)实例学校规定,学生考试成绩在60分以下为不合格;60分以上,70分以下为合格;70分以上,80分以下为中等;8
46、0分以上,90分以下为良好,90分以上为优秀(60分以下不包括60分,60分以上包括60分,以此类推)。要求输入学生成绩后,程序给出学生等级。步骤:(1)用户输入学生成绩;(2)系统判断成绩范围,给出对应等级;(3)输出成绩等级 参考代码:program Project1;usesSysUtils;varscore:integer;level:string;begin write(Please input score:);readln(score);if score=90 then level:=优秀 else if(score=80)then level:=良好 else if(score=
47、70)then level:=中等 else if(score=60)then level:=合格 else level:=不合格;write(Level:,level);readln;end.运行效果如下图所示。3)语句二义性由于if语句的结构有if.then与if.then.else两种,使用复合if语句进行多路分支判定,可能出现会出现逻辑异常。(1)二义性结构复合if语句的二义性(2)处理else语句要和最接近的、没有其他else语句对应的if语句对应。(3)修改if thenbegin if then endelse 3.case语句1)结构case of:语句1;:语句2;::语句n
48、end;2)说明表达式的值必须是顺序类型,即整型、布尔型、字符型、枚举型和子界型。值表是一串用逗号隔开的与表达式类型一致的常量序列。语句可以是单条语句、复合语句和空语句。当case语句执行时,先计算表达式的值,如果它的值等于某一个常量,则执行该情况常量后面的语句,在执行完语句后,跳到case语句的末尾end处。3)注意事项 Case关键字后的表达式值必须是顺序类型。值表中的数据应与表达式具有相同的类型。值表中数据出现的次序没有限制。同一数据不能在同一个case语句中出现两次或两次以上。值表中数据可以存在多个数据,数据之间用逗号分开,对于连续数据,可以采用子界形式定义。如果case语句后表达式的
49、取值不在当前值表中的取值范围中,则认为本条case语句无效,执行case语句的下一条语句。在所有值表之后,可以增加一个else子句,表示当所有条件不满足时,执行该语句处理,但也可以省略。每个常量后面只能是一个语句或一个复合语句。4)实例用户输入两个数据和一个运算符号,根据运算符号得到运算数值并输出。(1)步骤用户输入数据与运算符号;根据运算符号判断运算类型;计算运算结果;输出结果。(2)参考代码program Project1;usesSysUtils;var x,y,res:single;op:char;begin write(First Num:);readln(x);write(Seco
50、nd Num:);readln(y);write(operation type:);readln(op);case op of +:res:=x+y;-:res:=x-y;*:res:=x*y;/:res:=x/y;end;write(Result:,res:8:6);readln;end.运行效果如下图所示。2.5.4 循环语句循环语句循环结构通常由3种循环语句来实现。它们分别为For循环、While循环和Repeat循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行的条件称循环条件,当满足循环条件是,执行循环体,否则,退出循环,执行循环后语句。1.FOR循环1)格式for:
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。