




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi7程序设计与实验指导张景安赵慧勤张叶娥傅文博编著Delphi7程序设计与实验指导张景安赵慧勤1第二章面向对象的PascalDelphi的编程语言即ObjectPascal是在Pascal的基础上发展起来的,它继承了Pascal语言语法结构严谨和编译代码高效优化等优点。本章将介绍ObjectPascal的数据类型、常量、变量、运算符、语句、函数和过程等。第二章面向对象的Pascal22.1数据类型2.1.1简单数据类型简单类型包括有序类型和实型两种。1.有序类型有序类型包括整型、字符型、布尔型、枚举型和子界型。有序类型是一种线性的数据结构,每个值都有唯一的前驱(除第一个)和唯一的后继(除最后一个)。(1)整型整型的表示范围及存储格式见表2-1。2.1数据类型2.1.1简单数据类型3类型取值范围存储格式Integer-2147483648~2147483647有符号32位整数Cardinal0~4294967295无符号32位整数Shortint-128~127有符号8位整数Smallint-32768~32767有符号16位整数Longint-2147483648~2147483647有符号32位整数Int64-263~263-l有符号64位整数Byte0~255无符号8位整数Word0~65535无符号16位整数Longword0~4294967295无符号32位整数表2-1整型的取值范围和存储格式2.1数据类型类型取值范围存储格式Integer-2147483648~242.1数据类型(2)字符型字符型的类型标识符是Char。字符型的数据只能是单个字符,不能是一串字符。例如'ABC','x=?'等都不是字符型的数据,而是字符串。(3)布尔型通常用到的布尔类型是Boolean,一个Boolean类型的变量占一个字节,它只有两种取值:true和false。定义变量i,ch,t分别为整型、字符型、布尔型。vari:Interge;ch:Char;t:Boolean;2.1数据类型(2)字符型52.1数据类型(4)枚举类型枚举类型是用一些标识符来表示一系列有序数,即由一些标识符组成的一个线性表。定义枚举类型的语法是:typetypeName=(val1,...,valn)(5)子界类型子界类型指的是某个有序类型(称为基类)的一个子集。定义子界类型的语法是:typetypeName=Low..High;2.1数据类型(4)枚举类型62.1数据类型2.实型表2-2给出了实型的表示范围和存储格式。类型范围有效位所占位数Real±2.9*10-24~1.7*1030811~-28Real48±2.9*10-39~1.7*103811~-26Single±1.510-45~3.4*10387~84Double±5.0*10-324~1.7*1030815~168Extended±3.6*10-4951~1.1*10493219~2010Comp-263+l~263-l19~208Currency-922337203685477.5808~922337203685477.580719~208表2-2实型的表示范围和存储格式2.1数据类型2.实型类型范围有效位所占位数Real±272.1数据类型2.1.2字符串类型字符串类型是用一对单引号括起来的一系列字符。字符串类型的表示范围和存储格式见表2-3。类型最多字符字节数字符集ShortString2552~256BANSI向后兼容AnsiString2314~2GBSBCS,MBCSLongString2314~2GBUnicodeWideString2304~2GB等价于AnsiChar表2-3字符串类型的表示范围和存储格式2.1数据类型2.1.2字符串类型类型最多字符字节数字82.1数据类型2.1.3结构类型结构数据类型是一种复合数据类型,由多个数据组成。结构类型包括集合类型、数组类型、记录类型、文件类型等。1.集合类型集合类型是一组相同类型元素的组合。定义集合类型:typeName=setofBaseType2.数组数组是一些具有相同类型元素的有序组合。(1)静态数组静态数组的声明格式为:typeName=array[indexType1,...,indexTypen]ofBaseType;2.1数据类型2.1.3结构类型92.1数据类型(2)动态数组动态数组没有固定的大小或长度。当赋值或使用某些函数(如SetLength)时,动态数组在内存中重新分配。动态数组的声明格式为:typeName=arrayofBaseType;定义动态数组不需声明元素的个数。例如:typeDynamicarray=arrayofReal;vara1,a2:Dynamicarry;a1:=a2;//a1和a2指向相同的内存单元。2.1数据类型(2)动态数组102.1数据类型3.记录类型记录类型(有的语言中被称为结构)是一个不同种类元素的集合,每个元素称为字段(field)。在声明时,指定记录的名字和每个字段。声明格式为:typeRecordTypeName=recordFieldList1:type1;FieldList2:type2;…FieldListn:typen;end;2.1数据类型3.记录类型112.1数据类型4.文件类型文件类型是由相同类型的元素组成的有序集合。文件类型的声明格式为:typefileTypeName=fileoftype例:声明一个文件类型RecordList,以上面已定义的TdateRec为数据类型。typeRecordList=fileofTdateRec;varMyrecordlist:RecordList;2.1数据类型4.文件类型122.1数据类型2.1.4可变类型有时要对一些数据类型变化的数据进行操作,并且在编译期间不能确定数据的类型,这时就可以使用可变类型的数据。可变类型可以使用除记录、集合、静态数组、文件等结构类型、指针类型及长整型外的所有类型。可变类型有一个特殊的值Null,表示不明的或丢失的数据。可变类型变量的声明格式为:varv1:Variant;2.1数据类型2.1.4可变类型132.2常量与变量2.2.1标识符标识符是描述ObjectPascal程序各个部分的名称,这些部分包括标记、对象、过程、类型、单元、变量及程序。标识符的大小写无关(即它不区分大小写),并且遵循以下规则:可为任意长度,但只有前255个字符有效。标识符的第1个字符必须是字母或下划线。跟在第1个字符后面的字符必须是字母、数字或下划线。标识符中不允许出现空格。2.2常量与变量2.2.1标识符14
2.2.2常量常量是一个在程序的运行过程中具有不变值的标识符,常量的声明格式如下:Const常量名=表达式;变量不能在一个常量声明中使用,但算术和逻辑运算符可以,下面的函数可以在常量声明中使用。AbsLowRoundChrOddSizeOfHiOrdSuccHighPredSwapLengthPtrTruncLo2.2常量与变量2.2.2常量2.2常量与变量152.2常量与变量2.2.3变量变量是程序代码中代表一个内存地址的标识符,而此地址中的内容在程序执行过程中可以改变。在变量使用之前必须先声明,变量声明格式如下:var变量名表:类型名;例:vars:string;i:integer;flag:Boolean;2.2常量与变量2.2.3变量162.3表达式与运算符2.3.1表达式表达式就是变量、常量、字符串、运算符及函数按照一定规则的组合。例:'People’sRepublicOf'+'China'Gross/12Max(x,y)-Min(x,y)2.3.2运算符1.赋值运算符(:=)赋值运算符“:=”是先计算赋值运算符右边表达式的值,再将结果赋给左边的变量。2.3表达式与运算符2.3.1表达式172.3表达式与运算符2.算术运算符表2-4算术运算符运算符作用操作数类型结果类型+表示正值Integer或RealInteger或Real算术加Integer或RealInteger或Real-表示负值Integer或RealInteger或Real算术减Integer或RealInteger或Real*算术的乘运算Integer或RealInteger或Real/浮点数的除运算Integer或RealRealDiv整型数的除运算IntegerIntegerMod模运算IntegerInteger2.3表达式与运算符2.算术运算符运算符作用操作数类型结果182.3表达式与运算符3.关系运算符关系运算符是对两个类型相容且可以比较大小的数据进行比较,结果为布尔类型,见表2-5。表2-5关系运算符运算符作用结果类型=等于Bealoon<>不等于Bealoon<小于Bealoon>大于Bealoon<=小于或等于Bealoon>=大于或等于BealoonIn属于Bealoon2.3表达式与运算符3.关系运算符运算符作用结果类型=等于192.3表达式与运算符4.逻辑运算符逻辑运算符对逻辑类型的操作数进行运算,结果为布尔型,见表2-6。表2-6逻辑运算符运算符作用操作数类型结果类型not逻辑非BealoonBealoonand逻辑与BealoonBealoonor逻辑或BealoonBealoonxor逻辑异或BealoonBealoon2.3表达式与运算符4.逻辑运算符运算符作用操作数类型结果202.3表达式与运算符5.集合运算符
表2-7集合运算符运算符作用操作数类型结果类型+集合的并集集合类型集合类型-集合的差集集合类型集合类型*集合的交集集合类型集合类型<=A<=B,A是否是B的子集集合类型Bealoon>=A>=B,B是否是A的子集集合类型Bealoon=两个集合是否相等集合类型Bealoon<>两个集合是否不相等集合类型BealooninsinA,s是否属于集合A有序类型,集合类型Bealoon2.3表达式与运算符5.集合运算符运算符作用操作数类型结果212.3表达式与运算符6.运算符的优先级运算符优先级not1(最高)*,/,div,mod,and2+,-,or,xor3关系运算符4(最低)表2-8ObjectPascal各运算符的优先级2.3表达式与运算符6.运算符的优先级运算符优先级not1222.4语句2.4.1注释注释是添加在程序中用来说明代码功能的语句,它是非执行语句,对程序的执行部分不会产生任何影响,有助于提高程序的可读性。在ObjectPascal中,有三种注释标记:花括号“{}”注释:位于“{}”中的内容为注释。双斜杠“//”注释:“//”之后到本行结束的内容为注释。圆括号及星号对“(*……*)”注释:(*……*)中的内容为注释。例如以下语句都是注释:{ThefirstkindOfcomment.}//Thesecond
kindOfcomment.(*ThethirdkindOfcomment.*)2.4语句2.4.1注释232.4语句2.4.2简单语句和复合语句简单语句是ObjectPascal中最简单也最常用的语句,简单语句用分号分隔。赋值语句、函数、过程调用语句等是简单语句,例如下面的语句都是简单语句:r:=m+n;//两个值相加并赋值ShowMessage('I’mastudent.');复合语句是多个简单语句的组合,复合语句以begin表示开始,以end表示结束。例如:begini:=1;j:=i+1;s:='abc';end;2.4语句2.4.2简单语句和复合语句242.4语句2.4.3条件语句条件语句是ObjectPascal语言提供的选择结构语句,主要有如下两种:1.if语句if语句的表示形式:if<表达式>then<执行语句>[else<执行语句>]2.4语句2.4.3条件语句252.4语句【例2-1】求两个数中的最大值。ifa>bthenmax:=a//在变量a之后不能加“;”Elsemax:=b;【例2-2】符号函数。
-1(x<0)y=0(x=0)1(x>0)用if语句的嵌套实现,如下:ifx<0theny:=-1elseifx>0theny:=1elsey:=0;2.4语句【例2-1】求两个数中的最大值。用if语句的嵌套262.4语句2.case语句case语句的表示形式:case<表达式>of<选择值1>:<执行语句1>…<选择值n>:<执行语句n>[else<执行语句n+1>]end;2.4语句2.case语句272.4语句【例2-3】编写一个程序,输入一个年份,判断是否是闰年。闰年的条件是满足下面条件之一:(1)能被4整除,但不能被100整除的年份;(2)能被100整除,也能被400整除的年份。对这两个条件都不符合的年份不是闰年。程序功能:输入一个年份,显示其是否为闰年的信息。界面设计:四个组件:两个文本框Label1和Lable2,分别显示提示和结果信息;一个Edit组件Edit1,用来输入要进行判断的年份;一个Button组件Button1,用来查询结果。如图2-1所示。2.4语句【例2-3】编写一个程序,输入一个年份,判断是否282.4语句图2-1窗体界面程序代码:procedureTForm1.Button1Click(Sender:TObject);varyear:Integer;flag:Boolean;2.4语句图2-1窗体界面292.4语句beginyear:=StrtoInt(Edit1.text);//将字符串转变为整型
ifyearmod4=0thenbeginifyearmod100=0thenbeginifyearmod400=0thenflag:=trueelseflag:=false;endelse
flag:=true;endelseflag:=false;ifflagthenLabel2.Caption:='该年份是闰年'elseLabel2.Caption:='该年份不是闰年';end;2.4语句beginflag:=true;302.4语句
2.4.4循环控制语句循环语句可以使用户重复执行一条或多条语句,直到满足某个条件时为止。1.for语句for语句的一般形式为:for循环变量:=<起始值>to/downto<终止值>do<循环体>;【例2-4】求1~100所有整数的累加和。vars,i:Integer;s:=0;fori:=lto100dos:=s+i;2.4语句2.4.4循环控制语句312.4语句2.while语句while语句的一般形式为:while<表达式>do<循环体>while后面的<表达式>为逻辑表达式,先计算表达式的结果,如果表达式为true,while语句将重复执行循环体。如果表达式结果为false,则跳出循环,执行while之后的语句。【例2-5】求1~100所有整数的累加和。vars,i:Integer;i:=1;s:=0;whilei<=100dobegins:=s+i;i:=i+1;end;2.4语句2.while语句【例2-5】求1~100所有整322.4语句3.repeat语句repeat语句的一般形式为:repeat<循环体>until<表达式>当使用repeat语句时,先执行循环体,再判断表达式,只要until后面的表达式为true,则将再执行循环体。因此,repeat语句下面的循环体至少执行一次。【例2-6】求1~100所有整数的累加和。vars,i:Integer;i:=1;s:=0;repeats:=s+i;i:=i+1;untili>100;2.4语句3.repeat语句【例2-6】求1~100所有332.4语句4.break语句功能是强行退出循环,break语句只能用在循环体内。【例2-7】利用break语句退出一个while循环。vars:String;beginwhiletruedo//条件恒为真
beginReadLn(s);//读入一字符串
ifs=''thenbreak;//不输入任何字符,则退出循环
WriteLn(s);//输出字符串
end;end;2.4语句4.break语句342.4语句5.continue语句continue语句也用在循环体中,其作用是强行结束本次循环,转入循环开始处,开始执行下一次循环操作。【例2-8】使用continue语句,求1~100所有奇数之和。vari,s:Integer;s=0;beginfori:=1to100dobeginifimod2=0thencontinue;//如果为空,跳过剩余语句,转到下一个循环
s:=s+i;end;end;2.4语句5.continue语句352.5函数和过程函数和过程是实现一定功能的语句块,是程序中的特定功能单元。可以在程序的其他地方被调用,也可以进行递归调用。函数和过程的区别在于函数有返回值,而过程没有返回值。2.5.1函数和过程的声明函数和过程在使用前必须进行声明。1.函数的声明函数的声明是在程序的type区,具体形式如下:function<函数名>([<形式参数表>]):<函数返回类型>;[<指令字>;]2.5函数和过程函数和过程是实现一定功能的语句块,是程序中362.5函数和过程函数的定义是在程序的implementation部分,具体形式如下:function<函数名>([<形式参数表>]):<函数返回类型>;[<指令字>;]var<局部变量声明>begin
<函数体><函数名>:=<返回值>//<函数名>也可以用Result系统保留字代替end;在begin与end之间是在函数调用时实现特定功能的一系列语句。函数值的返回有两种方式:将返回值直接赋给函数名。将返回值赋给Result。2.5函数和过程函数的定义是在程序的implementat372.5函数和过程【例2-9】求两个数中的最大数。functionMax(a,b:integer):integer;//两个形参为整型值a、b,函数返回值为整型varm:Integer;beginifa>bthenm:=aelsem:=b;Max:=m;//或result:=m;end;2.5函数和过程【例2-9】求两个数中的最大数。382.5函数和过程2.过程的声明过程的声明与函数类似,所不同的是使用的保留字不同,而且少了一个返回值类型;过程的声明是在程序的type区,具体形式如下:procedure<过程名>([<形式参数表>]):<过程返回类型>;过程的定义是在程序的implementation部分,具体形式如下:procedure<过程名>([<形式参数表>]);<局部变量声明>begin<过程体>end;2.5函数和过程2.过程的声明392.5函数和过程【例2-10】显示一行num个星号*。procedureShowStar(num:Integer);vari:Integer;s:String;begins:='';fori:=1tonumdos:=s+'*';ShowMessage(s);end;2.5函数和过程【例2-10】显示一行num个星号*。402.5函数和过程2.5.2重载函数和过程所谓重载,是指在同一个作用范围内给不同的函数或过程取同一个名称。重载可以方便编程,重载函数必须用指令字overload来进行说明。下面的两个函数就是重载函数:functionMax(a:Integer;b:Integer):Integer;overload;//求两个整数的最大值functionMax(a:Real;b:Real):Real;overload;//求两个实数的最大值下面两条语句就调用了不同的函数:Max(3.7,4.6);//调用的是第二个重载函数Max(3,4);//调用的是第一个重载函数2.5函数和过程2.5.2重载函数和过程412.5函数和过程2.5.3参数1.形参与实参函数或过程的声明和定义时参数列表中的参数称为形式参数,简称形参;而函数或过程调用时参数列表中的参数称为实在参数,简称实参。2.数值参数、变量参数和常量参数(1)数值参数在调用函数或过程时,数值参数在运行过程中只改变其形参的值,不改变其实参的值,即形参不会影响原来实参的值。(2)变量参数如果用户想改变传递的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字var。2.5函数和过程2.5.3参数422.5函数和过程(3)常量参数如果当过程或函数执行时要求不改变形参的值,最保险的办法是使用常量参数。在参数表的参数名称前加上保留字const可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护用户的参数,使用户在不想改变参数值时不会意外地将新的值赋给这个参数。2.5.4作用域在ObjectPascal中,根据变量的作用域,可将变量分为:全局变量和局部变量。所谓变量的作用域,是指变量的有效范围。全局变量在整个程序中都有效,其作用域为整个程序;局部变量只在声明它的函数和过程中有效,其作用域只限于该函数或过程本身。2.5函数和过程(3)常量参数432.5函数和过程例:typevarForm1:TForm1;//全局变量Form1implementation{$R*.dfm}procedureTForm1.FormCreate(Sender:TObject);varm,n:Integer;//局部变量m,nForm1:Tform1;(*局部变量Form1,与上面的全局变量同名,在过程TForm1.FormCreate中局部变量起作用。*)2.5函数和过程例:442.5函数和过程2.5.5函数和过程的调用1.函数和过程的调用(1)函数的调用函数调用的一般形式为:<函数名>([<实参表>])函数的调用往往是将返回值赋给某个变量或参与运算。例如调用例2-9,将其返回值赋给变量x的语句为:x:=Max(3,6);(2)过程的调用过程的调用的一般形式为:<过程名>([<实参表>]);其中的实参可以是常量、变量或表达式,但实参的个数和类型与形参完全匹配,即个数相同、类型一致。例如:调用例2-10的过程ShowStar的语句为:ShowStar(20);2.5函数和过程2.5.5函数和过程的调用452.5函数和过程2.函数和过程的递归调用所谓递归调用,是指函数A调用函数B,而函数B又调用函数A的情况,或是指一个函数调用自身的特殊情况。【例2-11】递归调用programProject1;($SappTypeConsole)varalpha:Integer;procedureTest2(varA:Integer):forword;(*Test2被说明为前置过程*)procedureTestl(VarA:Integer);begina:=a-1;ifa>0thenTest2(a);Writeln(a);end;procedureTest2(vara:Integer);{经前置说明的Test2的执行部分}begina:=adiv2;ifa>0thenTest1(a);{在Test2中调用已执行的过程Test1}end;begina1pha:=15;//给a1pha赋初值Test1(a1plla);(*第一次调用Test1,递归开始*)end;2.5函数和过程2.函数和过程的递归调用Test2(a);46习题1.ObjectPascal语言中有哪些常用的数据类型?变量在使用前必须先定义,如何定义各种数据类型的变量?简述ObjectPascal中标识符的命名应遵循哪些规则。ObjectPascal中提供了哪些类型运算符,在表达式中其优先级从高到低如何排列。4.注释语句有哪几种形式?5.条件语句有哪几种形式?它们在什么情况下适用。6.循环语句有哪几种形式?break语句与continue语句有何异同。7.如何声明、定义和调用函数和过程。8.什么是重载?如何进行重载函数和过程。9.什么是变量的作用域?根据变量的作用域,可将变量分为哪几类。习题47习题10.分析下列程序段的运行结果。①a:=False;b:=False;c:=True;d:=20;ifathend:=d-12elseifnotbthen
ifcthenbeginx:=10;d:=d+3;endelsex:=34;运行后,d,x的值分别是
、
。
习题10.分析下列程序段的运行结果。ifcthen48习题②s:=0;fori=3to14dos:=s+i;运行后,s的值是
。③FunctionFun(x:Integer):Integer;beginifx=0theny=0elseifx>0then
y:=x+4elsey:=x-5;end;则函数调用Fun(0)、Fun(4)、Fun(-7)的值分别是
、
、
。11.编程实现:输入两个整数,求这两个数之间的所有奇数之和。习题②s:=0;y:=x+449Delphi7程序设计与实验指导张景安赵慧勤张叶娥傅文博编著Delphi7程序设计与实验指导张景安赵慧勤50第二章面向对象的PascalDelphi的编程语言即ObjectPascal是在Pascal的基础上发展起来的,它继承了Pascal语言语法结构严谨和编译代码高效优化等优点。本章将介绍ObjectPascal的数据类型、常量、变量、运算符、语句、函数和过程等。第二章面向对象的Pascal512.1数据类型2.1.1简单数据类型简单类型包括有序类型和实型两种。1.有序类型有序类型包括整型、字符型、布尔型、枚举型和子界型。有序类型是一种线性的数据结构,每个值都有唯一的前驱(除第一个)和唯一的后继(除最后一个)。(1)整型整型的表示范围及存储格式见表2-1。2.1数据类型2.1.1简单数据类型52类型取值范围存储格式Integer-2147483648~2147483647有符号32位整数Cardinal0~4294967295无符号32位整数Shortint-128~127有符号8位整数Smallint-32768~32767有符号16位整数Longint-2147483648~2147483647有符号32位整数Int64-263~263-l有符号64位整数Byte0~255无符号8位整数Word0~65535无符号16位整数Longword0~4294967295无符号32位整数表2-1整型的取值范围和存储格式2.1数据类型类型取值范围存储格式Integer-2147483648~2532.1数据类型(2)字符型字符型的类型标识符是Char。字符型的数据只能是单个字符,不能是一串字符。例如'ABC','x=?'等都不是字符型的数据,而是字符串。(3)布尔型通常用到的布尔类型是Boolean,一个Boolean类型的变量占一个字节,它只有两种取值:true和false。定义变量i,ch,t分别为整型、字符型、布尔型。vari:Interge;ch:Char;t:Boolean;2.1数据类型(2)字符型542.1数据类型(4)枚举类型枚举类型是用一些标识符来表示一系列有序数,即由一些标识符组成的一个线性表。定义枚举类型的语法是:typetypeName=(val1,...,valn)(5)子界类型子界类型指的是某个有序类型(称为基类)的一个子集。定义子界类型的语法是:typetypeName=Low..High;2.1数据类型(4)枚举类型552.1数据类型2.实型表2-2给出了实型的表示范围和存储格式。类型范围有效位所占位数Real±2.9*10-24~1.7*1030811~-28Real48±2.9*10-39~1.7*103811~-26Single±1.510-45~3.4*10387~84Double±5.0*10-324~1.7*1030815~168Extended±3.6*10-4951~1.1*10493219~2010Comp-263+l~263-l19~208Currency-922337203685477.5808~922337203685477.580719~208表2-2实型的表示范围和存储格式2.1数据类型2.实型类型范围有效位所占位数Real±2562.1数据类型2.1.2字符串类型字符串类型是用一对单引号括起来的一系列字符。字符串类型的表示范围和存储格式见表2-3。类型最多字符字节数字符集ShortString2552~256BANSI向后兼容AnsiString2314~2GBSBCS,MBCSLongString2314~2GBUnicodeWideString2304~2GB等价于AnsiChar表2-3字符串类型的表示范围和存储格式2.1数据类型2.1.2字符串类型类型最多字符字节数字572.1数据类型2.1.3结构类型结构数据类型是一种复合数据类型,由多个数据组成。结构类型包括集合类型、数组类型、记录类型、文件类型等。1.集合类型集合类型是一组相同类型元素的组合。定义集合类型:typeName=setofBaseType2.数组数组是一些具有相同类型元素的有序组合。(1)静态数组静态数组的声明格式为:typeName=array[indexType1,...,indexTypen]ofBaseType;2.1数据类型2.1.3结构类型582.1数据类型(2)动态数组动态数组没有固定的大小或长度。当赋值或使用某些函数(如SetLength)时,动态数组在内存中重新分配。动态数组的声明格式为:typeName=arrayofBaseType;定义动态数组不需声明元素的个数。例如:typeDynamicarray=arrayofReal;vara1,a2:Dynamicarry;a1:=a2;//a1和a2指向相同的内存单元。2.1数据类型(2)动态数组592.1数据类型3.记录类型记录类型(有的语言中被称为结构)是一个不同种类元素的集合,每个元素称为字段(field)。在声明时,指定记录的名字和每个字段。声明格式为:typeRecordTypeName=recordFieldList1:type1;FieldList2:type2;…FieldListn:typen;end;2.1数据类型3.记录类型602.1数据类型4.文件类型文件类型是由相同类型的元素组成的有序集合。文件类型的声明格式为:typefileTypeName=fileoftype例:声明一个文件类型RecordList,以上面已定义的TdateRec为数据类型。typeRecordList=fileofTdateRec;varMyrecordlist:RecordList;2.1数据类型4.文件类型612.1数据类型2.1.4可变类型有时要对一些数据类型变化的数据进行操作,并且在编译期间不能确定数据的类型,这时就可以使用可变类型的数据。可变类型可以使用除记录、集合、静态数组、文件等结构类型、指针类型及长整型外的所有类型。可变类型有一个特殊的值Null,表示不明的或丢失的数据。可变类型变量的声明格式为:varv1:Variant;2.1数据类型2.1.4可变类型622.2常量与变量2.2.1标识符标识符是描述ObjectPascal程序各个部分的名称,这些部分包括标记、对象、过程、类型、单元、变量及程序。标识符的大小写无关(即它不区分大小写),并且遵循以下规则:可为任意长度,但只有前255个字符有效。标识符的第1个字符必须是字母或下划线。跟在第1个字符后面的字符必须是字母、数字或下划线。标识符中不允许出现空格。2.2常量与变量2.2.1标识符63
2.2.2常量常量是一个在程序的运行过程中具有不变值的标识符,常量的声明格式如下:Const常量名=表达式;变量不能在一个常量声明中使用,但算术和逻辑运算符可以,下面的函数可以在常量声明中使用。AbsLowRoundChrOddSizeOfHiOrdSuccHighPredSwapLengthPtrTruncLo2.2常量与变量2.2.2常量2.2常量与变量642.2常量与变量2.2.3变量变量是程序代码中代表一个内存地址的标识符,而此地址中的内容在程序执行过程中可以改变。在变量使用之前必须先声明,变量声明格式如下:var变量名表:类型名;例:vars:string;i:integer;flag:Boolean;2.2常量与变量2.2.3变量652.3表达式与运算符2.3.1表达式表达式就是变量、常量、字符串、运算符及函数按照一定规则的组合。例:'People’sRepublicOf'+'China'Gross/12Max(x,y)-Min(x,y)2.3.2运算符1.赋值运算符(:=)赋值运算符“:=”是先计算赋值运算符右边表达式的值,再将结果赋给左边的变量。2.3表达式与运算符2.3.1表达式662.3表达式与运算符2.算术运算符表2-4算术运算符运算符作用操作数类型结果类型+表示正值Integer或RealInteger或Real算术加Integer或RealInteger或Real-表示负值Integer或RealInteger或Real算术减Integer或RealInteger或Real*算术的乘运算Integer或RealInteger或Real/浮点数的除运算Integer或RealRealDiv整型数的除运算IntegerIntegerMod模运算IntegerInteger2.3表达式与运算符2.算术运算符运算符作用操作数类型结果672.3表达式与运算符3.关系运算符关系运算符是对两个类型相容且可以比较大小的数据进行比较,结果为布尔类型,见表2-5。表2-5关系运算符运算符作用结果类型=等于Bealoon<>不等于Bealoon<小于Bealoon>大于Bealoon<=小于或等于Bealoon>=大于或等于BealoonIn属于Bealoon2.3表达式与运算符3.关系运算符运算符作用结果类型=等于682.3表达式与运算符4.逻辑运算符逻辑运算符对逻辑类型的操作数进行运算,结果为布尔型,见表2-6。表2-6逻辑运算符运算符作用操作数类型结果类型not逻辑非BealoonBealoonand逻辑与BealoonBealoonor逻辑或BealoonBealoonxor逻辑异或BealoonBealoon2.3表达式与运算符4.逻辑运算符运算符作用操作数类型结果692.3表达式与运算符5.集合运算符
表2-7集合运算符运算符作用操作数类型结果类型+集合的并集集合类型集合类型-集合的差集集合类型集合类型*集合的交集集合类型集合类型<=A<=B,A是否是B的子集集合类型Bealoon>=A>=B,B是否是A的子集集合类型Bealoon=两个集合是否相等集合类型Bealoon<>两个集合是否不相等集合类型BealooninsinA,s是否属于集合A有序类型,集合类型Bealoon2.3表达式与运算符5.集合运算符运算符作用操作数类型结果702.3表达式与运算符6.运算符的优先级运算符优先级not1(最高)*,/,div,mod,and2+,-,or,xor3关系运算符4(最低)表2-8ObjectPascal各运算符的优先级2.3表达式与运算符6.运算符的优先级运算符优先级not1712.4语句2.4.1注释注释是添加在程序中用来说明代码功能的语句,它是非执行语句,对程序的执行部分不会产生任何影响,有助于提高程序的可读性。在ObjectPascal中,有三种注释标记:花括号“{}”注释:位于“{}”中的内容为注释。双斜杠“//”注释:“//”之后到本行结束的内容为注释。圆括号及星号对“(*……*)”注释:(*……*)中的内容为注释。例如以下语句都是注释:{ThefirstkindOfcomment.}//Thesecond
kindOfcomment.(*ThethirdkindOfcomment.*)2.4语句2.4.1注释722.4语句2.4.2简单语句和复合语句简单语句是ObjectPascal中最简单也最常用的语句,简单语句用分号分隔。赋值语句、函数、过程调用语句等是简单语句,例如下面的语句都是简单语句:r:=m+n;//两个值相加并赋值ShowMessage('I’mastudent.');复合语句是多个简单语句的组合,复合语句以begin表示开始,以end表示结束。例如:begini:=1;j:=i+1;s:='abc';end;2.4语句2.4.2简单语句和复合语句732.4语句2.4.3条件语句条件语句是ObjectPascal语言提供的选择结构语句,主要有如下两种:1.if语句if语句的表示形式:if<表达式>then<执行语句>[else<执行语句>]2.4语句2.4.3条件语句742.4语句【例2-1】求两个数中的最大值。ifa>bthenmax:=a//在变量a之后不能加“;”Elsemax:=b;【例2-2】符号函数。
-1(x<0)y=0(x=0)1(x>0)用if语句的嵌套实现,如下:ifx<0theny:=-1elseifx>0theny:=1elsey:=0;2.4语句【例2-1】求两个数中的最大值。用if语句的嵌套752.4语句2.case语句case语句的表示形式:case<表达式>of<选择值1>:<执行语句1>…<选择值n>:<执行语句n>[else<执行语句n+1>]end;2.4语句2.case语句762.4语句【例2-3】编写一个程序,输入一个年份,判断是否是闰年。闰年的条件是满足下面条件之一:(1)能被4整除,但不能被100整除的年份;(2)能被100整除,也能被400整除的年份。对这两个条件都不符合的年份不是闰年。程序功能:输入一个年份,显示其是否为闰年的信息。界面设计:四个组件:两个文本框Label1和Lable2,分别显示提示和结果信息;一个Edit组件Edit1,用来输入要进行判断的年份;一个Button组件Button1,用来查询结果。如图2-1所示。2.4语句【例2-3】编写一个程序,输入一个年份,判断是否772.4语句图2-1窗体界面程序代码:procedureTForm1.Button1Click(Sender:TObject);varyear:Integer;flag:Boolean;2.4语句图2-1窗体界面782.4语句beginyear:=StrtoInt(Edit1.text);//将字符串转变为整型
ifyearmod4=0thenbeginifyearmod100=0thenbeginifyearmod400=0thenflag:=trueelseflag:=false;endelse
flag:=true;endelseflag:=false;ifflagthenLabel2.Caption:='该年份是闰年'elseLabel2.Caption:='该年份不是闰年';end;2.4语句beginflag:=true;792.4语句
2.4.4循环控制语句循环语句可以使用户重复执行一条或多条语句,直到满足某个条件时为止。1.for语句for语句的一般形式为:for循环变量:=<起始值>to/downto<终止值>do<循环体>;【例2-4】求1~100所有整数的累加和。vars,i:Integer;s:=0;fori:=lto100dos:=s+i;2.4语句2.4.4循环控制语句802.4语句2.while语句while语句的一般形式为:while<表达式>do<循环体>while后面的<表达式>为逻辑表达式,先计算表达式的结果,如果表达式为true,while语句将重复执行循环体。如果表达式结果为false,则跳出循环,执行while之后的语句。【例2-5】求1~100所有整数的累加和。vars,i:Integer;i:=1;s:=0;whilei<=100dobegins:=s+i;i:=i+1;end;2.4语句2.while语句【例2-5】求1~100所有整812.4语句3.repeat语句repeat语句的一般形式为:repeat<循环体>until<表达式>当使用repeat语句时,先执行循环体,再判断表达式,只要until后面的表达式为true,则将再执行循环体。因此,repeat语句下面的循环体至少执行一次。【例2-6】求1~100所有整数的累加和。vars,i:Integer;i:=1;s:=0;repeats:=s+i;i:=i+1;untili>100;2.4语句3.repeat语句【例2-6】求1~100所有822.4语句4.break语句功能是强行退出循环,break语句只能用在循环体内。【例2-7】利用break语句退出一个while循环。vars:String;beginwhiletruedo//条件恒为真
beginReadLn(s);//读入一字符串
ifs=''thenbreak;//不输入任何字符,则退出循环
WriteLn(s);//输出字符串
end;end;2.4语句4.break语句832.4语句5.continue语句continue语句也用在循环体中,其作用是强行结束本次循环,转入循环开始处,开始执行下一次循环操作。【例2-8】使用continue语句,求1~100所有奇数之和。vari,s:Integer;s=0;beginfori:=1to100dobeginifimod2=0thencontinue;//如果为空,跳过剩余语句,转到下一个循环
s:=s+i;end;end;2.4语句5.continue语句842.5函数和过程函数和过程是实现一定功能的语句块,是程序中的特定功能单元。可以在程序的其他地方被调用,也可以进行递归调用。函数和过程的区别在于函数有返回值,而过程没有返回值。2.5.1函数和过程的声明函数和过程在使用前必须进行声明。1.函数的声明函数的声明是在程序的type区,具体形式如下:function<函数名>([<形式参数表>]):<函数返回类型>;[<指令字>;]2.5函数和过程函数和过程是实现一定功能的语句块,是程序中852.5函数和过程函数的定义是在程序的implementation部分,具体形式如下:function<函数名>([<形式参数表>]):<函数返回类型>;[<指令字>;]var<局部变量声明>begin
<函数体><函数名>:=<返回值>//<函数名>也可以用Result系统保留字代替end;在begin与end之间是在函数调用时实现特定功能的一系列语句。函数值的返回有两种方式:将返回值直接赋给函数名。将返回值赋给Result。2.5函数和过程函数的定义是在程序的implementat862.5函数和过程【例2-9】求两个数中的最大数。functionMax(a,b:integer):integer;//两个形参为整型值a、b,函数返回值为整型varm:Integer;beginifa>bthenm:=aelsem:=b;Max:=m;//或result:=m;end;2.5函数和过程【例2-9】求两个数中的最大数。872.5函数和过程2.过程的声明过程的声明与函数类似,所不同的是使用的保留字不同,而且少了一个返回值类型;过程的声明是在程序的type区,具体形式如下:procedure<过程名>([<形式参数表>]):<过程返回类型>;过程的定义是在程序的implementation部分,具体形式如下:procedure<过程名>([<形式参数表>]);<局部变量声明>begin<过程体>end;2.5函数和过程2.过程的声明882.5函数和过程【例2-10】显示一行num个星号*。procedureShowStar(num:Integer);vari:Integer;s:String;begins:='';fori:=1tonumdos:=s+'*';ShowMessage(s);end;2.5函数和过程【例2-10】显示一行num个星号*。892.5函数和过程2.5.2重载函数和过程所谓重载,是指在同一个作用范围内给不同的函数或过程取同一个名称。重载可以方便编程,重载函数必须用指令字overload来进行说明。下面的两个函数就是重载函数:functionMax(a:Integer;b:Integer):Integer;overload;//求两个整数的最大值functionMax(a:Real;b:Real):Real;overload;//求两个实数的最大值下面两条语句就调用了不同的函数:Max(3.7,4.6);//调用的是第二个重载函数Max(3,4);//调用的是第一个重载函数2.5函数和过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医用设备运输合同范本
- 叉车临时用工合同范本
- 和店面解约合同范本
- 公寓酒水配送合同范本
- 吊装车租用合同范本
- 供销商品合同范本
- 五星级酒店安保合同范例
- 厨房家电预售合同范本
- 书购货合同范本
- 发电玻璃租赁合同范本
- 2.2 生态脆弱区的综合治理 课件 【知识精研】高二地理人教版(2019)选择性必修2
- 餐厅服务人员话术培训
- 远程医疗创业计划书
- 初中生心理健康教育讲座课件
- 广东省广州市白云区2023-2024学年八年级上学期期末英语试题(答案)
- 洞库安全隐患
- 2024-2025年第一学期小学德育工作总结:点亮德育灯塔引领小学生全面成长的逐梦之旅
- 2024解析:第二章声现象-基础练(解析版)
- 整体法兰强度校核计算表(设计:zxg)
- 《供配电技术》课件第1章
- 建筑垃圾清理及运输方案
评论
0/150
提交评论