版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2面向对象的Pascal语言
Delphi的编程基础语言是面向对象的Pascal语言,即ObjectPascal。Object
Pascal不仅数据类型丰富、支持结构化程序设计和面向对象程序设计,而且具有代码稳
定、可读性好、编译速度快等优点,是最受程序员欢迎的程序语言之一。
本章讲述ObjectPascal语言的使用,主要内容包括ObjectPascal语言编程的基本
概念、数据类型、运算符、控制语句、过程与函数、类和对象及异常处理等。
2.1ObjectPascal概述
1.标识符
标识符(Identifiers)是以字母或下划线开头、后跟字母、数字或下划线所组成
的串,其作用是标识常量、变量、类型、属性、对象、过程、函数、程序、单元、
库和组件库等。
2.保留字
以下是ObjectPascal的保留字:
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,
END,FILE,FOR,FUNTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,
OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,
TO,TYPE,UNTIL,VAR,WHILE,WITH,EXPORTS,SHR,STRING,ASM,
OBJECT,UNIT,CONSTRUCTOR,IMPLEMENTATION,DESTRUCTOR,USES,
INHERITED,INLINE,INTERFACE,LIBRARY,XOR,SHL
2.1ObjectPascal概述
3.注释
方便用),读程序而附加的解释说明语句。ObjectPascal支持三种类型的注释.
(1)大括号注释:“{”与"『的成对使用表示它们之间的内容为注释部分.
(2)带髻学的小括号注释:”「与"*)”的成对使用表示它们之间的内容为注释部分。
(3)双斜杠注释“//”:表示所在行的该符号之后的内容为注释。
4.常量和变量
1)常量
•一般常量
如123,-10,-10.56,"abcH,TRUE等都是一般常量。
•符号常量
z例如,在一个计堇运费的程序中,单位价格标准(假设为0.20元/公斤.公里)可
管会使用多次,一旦标准调整,将要在程序中对这多处进行修改,这样不仅工作量大、
餐率低、而且容易漏掉。在应用程序开发中,通常定义一个符号常量来表示这些反复、
徒由宿相同量来解力上述问题。ObjectPascal中,用const关键字来声明常量。一
2.1ObjectPascal既述
■‘、语法:
const常量名=表达式;
例如:
const
pi=3.14;
m=20;
st='Iamastudent.';
n=m+10;
说明:
(1)常量在说明时就被赋予了一个值,在程序执行过程中是不可改变的。
(2)等号的右边只能出现一般常量、已声明的常量或者常量表达式。
2)变量
系统根据变量的数据类型为每一个变量分配一定的内存空间,用户可以通过变量
名对内存单元进行读或写。ObjectPascal+,用var关键字声明变量。
」语法:
var变量名表:类型名;
2.1ObjectPascal概述
不说明:
(1)类型名是ObjectPascal中任何有效的数据类型。
(2)变量名表中的变量与变量之间用逗号分隔开,变量与类型名之间用冒号分隔。
例如:
varI,J:Integer;〃定义两个整型变量I和J
(3)当有几个连续的变量声明语句时,可以不必在每个声明语句前都用保留字var,
只需在最开始处使用var,例如:
var
x,y:real;//定义两个实型变量x和y
kJ:integer;//定义两个整型变量k和j
flag:Boolean;//定义一个逻辑型变量flag
2.2数据类型
2.2.1简单数据类型
1.有序数据类型
有序数据类型分为整数类型、字符类型、布尔类型、枚举类型和子界类型。
1)整数类型
整数类型是由正号或负号、数字组成的数据,数据中不包含小数。表2.1所列出
了它包括的各种类型。
表2.1对象Pascal语言中的整数类型
整数类型数值范围格式
integer-2147483648..2147483647signed32-bit
Cardinal0..4294967295unsigned32-bit
Shortint-128..127signed8-bit
Smallint-32768..32767signed16-bit
Longmt-2147483648..2147483647signed32-bit
Int64-2A63..2A63-1signed64-bit
Byte0..255unsigned8-bit
Word0..65535unsigned16-bit
Longword0..4294967295unsigned32-bit
2.2数据类型
2)字符类型
字符类型只存储一个字符,利用关键字Char来表示。除了Char数据类型外,Dephi
还提供了Char的扩展类型,它们是AnsiChar和WideChar两种类型。AnsiChar类型的数
据具有一个字节,与扩展的ANSI字符集对应,ANSI字符集是扩展的ASCII字符集,每
个字符占一个字节。WideChar类型的数据为双字节,与Unicode字符集对应。Unicode
字符集的前256个字符与ANSI字符集的相同。通用的字符类型为Char,与AnsiChar类
型相同。表2.2是字符数据类型的列表。
表2.2字符数据类型
字符类型占用字节数存储内容
AnsiChar1存储一个Ansi字符
存储一个Unicode字
WideChar2
符
Char1同AnsiChar
通过函数chr可以将一个整数转换成对应的字符。例如:赋值语句Letter:=chr(97)功
能是将ASCH码值为97的字符“a”赋给字符变量Letter。
2.2数据类型
3)布尔类型
布尔类型(Boolean)是只能表示真或假的一种数据类型,包括以下四种类别:
Boolean>ByteBooKWordBool和LongBool。布尔类型是最常用的数据类型之一。
4)枚举类型
枚举类型定义中的每个值都对应一个整数值的序号,每个枚举项所对应的整数值
由其在定义表中的位置决定,类型定义表中从左向右的第一个数据对应的整数值为0,
其余向右依次增加1。
语法(枚举类型定义和枚举类型变量声明):
type
枚举类型标识符=(枚举常量标识符列表);
var
枚举类型变量表:枚举类型标识符;
例如:
typeday=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
{以上是枚举类型定义}
vartoday:day;〃枚举变量声明
上面例子中的枚举常量Sunday、Monday>Tuesday>Wednesday>Thursday>Friday
和Saturday对应的整数值分别为0、1、2、3、4、5和6。一
有时也可以把类型定义和变量声明合二为一,例如:
varcolorl,color2:(Red,Blue,Green,Black)
2.2数据类型
*说明:
(1)枚举元素对应的值并不是一成不变的,若必要,可在定义类型时改变元素
对应的值。例如:
typeday=(Sunday=7,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
此时,Monday对应的值是1,Tuesday对应的值是2…,Sunday对应的值是7。
(2)同一个枚举项不能出现在多个枚举类型中。例如:
typeMonth1=(Jan,Feb,Mar,Api,May,Jun);
Month2=(Jun,Jul,Feb);
这两个类型Monthl,Month2中都包含Jun这个元素,这是不允许的。
(3)枚举类型是有序数据类型,对其运算可以使用Ord、Pred、Succ及关系运算
O
5)子界类型
子界类型(subrange)为某个有序类型的子集,其内部的元素可以是整型、布尔
型、字符型或者枚举型。
.?语法(子界类型定义):
type子界类型标识符=子界常量下限..子界常量上限;
舸如:下面的声明语句定义了一个枚举类型day和两个子界类型dayl、number0
2.2数据类型
type
day=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);
day1=Sun..Wed
number=O..1OO;
使用子界类型,需注意以下几点:
(1)子界类型的上界和下界必须是同一类型,并且是有序类型,如整型、
布尔型、字符型或枚举型等,不能是实数类型或其它无序类型。
(2)子界类型的上界和下界不仅可以是常数,也可以是能够计算出具体值
的常数表达式。例如:
constn=10;
m=20;
typenumber=3*n..5*(m+n)
(3)子界类型的下限的序数值不能超过其上限值。
2.2数据类型
2.实数类型
预定义了七种不同的实数类型,它们分别是Real、Real48>Single>Double、
Extended>Comp和Currency,所能表示数的范围、有效位数和所占字节如表2.3所示。
表2.3实数类型
类型名范围字节数有效数字
Real5.0*10-324〜1.7*10308815-16
Real482.9*10-39〜1.7*1038611-12
Single1.5*10-45〜7.4*103847〜8
Double5.0*10-324〜1.7*10308815-16
Extende
7.4*10-4932〜1.1*1049321019-20
d
Comp-263+1-263-1819-20
CuiTenc
922337203685475.5808〜922337203685475.819-20
y5807
2.2数据类型
Real可以包含11到12位有效小数部分,不是处理器中浮点部件固有的数据类型,
每个操作都需要转换,这样就导致速度较慢,所以只有在和以前BorlandPascal兼容
的情况下才使用,否贝I」应使用Double或Single。Cueerncy类型是一种浮点型,拥有4
个小数位的精度,占8个字节。在存储较大数时,使用Cueerncy类型将具有较高的精
度。
乂3.日期和时间
Delphi使用实数类型来控制日期和时间信息。为了更精确,Delphi还定义了一种
特殊的TdateTime数据类型,它属于浮点类型。该类型必须有足够的宽度,在一个变
量里存储年、月、日、小时、分和秒,一直到毫秒这些信息。日期以从12/30/1899
(带负号的值指示1899以前的日期)开始的日期数字形式存储在TdateTime值的整数
部分,时间存储在小数部分。TdateTime不是系统预先定义的类型,可在系统单元中
定义后使用,定义形式如下:
typeTDateTime=typeDouble;
2.2数据类型
2.2.2字符串类型
字符串类型包括ShortString、AnsiString和WideString三种类型,如表2.4所示。
ShortString类型中的每个元素都是AnsiChar类型,不以NULL作为结束标记;AnsiString
类型也是基于AnsiChar类型,可被动态分配存储空间,字符个数几乎不受限制,以NULL
作为结束标记;WideString与AnsiString类似,只是所包含的字符是WideCha「类型字符。
习惯上使用的String默认为AnsiString类型。
表2.4字符串类型
类型最大长度所需内存存储的字符
ShortString255字符2~256bytesAnsiChar
AnsiString231个字符4bytes-2GBAnsiChar
WideString23。个字符4bytes-2GBWideChar
说明一个字符串型的变量,应指明该字符串的大小。例如:
typeStringl:string[20];
varMyString:Stringl;
变量MyString被说明成为最多可以包含20个字符。字符串的缺省大小为255。给字
符串赋值可以直接使用单引号括起的字符串,例如:MyString:='tony';
2.2数据类型
2.2.3可变类型
这些数据的数据类型可以在运行期间进行改变,但是它们比固定类型的
数据占用更多的空间和更多的操作时间。另外,可变类型不能包含记录型、
集合类型、静态数组、文件类型、类、指针类型以及长整型等数据类型。
.,语法(可变类型变量声明):
var变量名表:Variant;
2.2.4类型相容和强制转换
1.类型相容
类型相容的数据之间可以进行关系运算。类型相容是赋值相容的前提,也是进行
数据运算的前提。在ObjectPascal中,两种数据类型只有满足下列条件之一时才是相
容的:
(1)两种类型的数据一致。
(2)两种类型的数据都是实型。
(3)两种类型的数据都是整型。
(4)一种数据的类型是另一种数据类型的子界。
(5)两种数据类型都是另外一种宿主类型的子界。
(6)两种数据类型都是另外一种相容基类型的集合类型。
2.2数据类型
(7)两种数据类型都是紧凑字符串类型,并且具有相同的元素个数。
(8)一种数据类型是字符串类型,另一种数据类型是字符串类型、紧凑字符串类型
或字符类型,或者一种数据类型是9har类型,另一种数据类型是形式为array[0..n]of
Char的字符数组。
(9)一种类型是Pointer类型,另一种数据类型是指向任意一种数据类型的指针类型,
或者两种数据类型都是基类型相同的指针类型。
(10)两种数据类型都是类数据类型或者类引用类型,并且一种数据类型继承了另
外一种类型。
(11)两种数据类型都是结果类型相同、参数个数相同、参数类型一致的过程类型。
(12)一种数据类型是可变数据类型,另外一种数据类型是整型、实型、字符串类
型或布尔类型。
2.变量强制类型转换
为了能通过编译检查,经常需要把一个变量的类型转换为另一种类型。
.?语法(强制类型转换):
类型标识符(变量名);
例如,有以下程序段:
varstrkchar;str2:byte;
begin
strl:-a';
str2:=strl;
end
2.3运算符
2.3.1赋值运算符
语法(赋值语句):
变量:=表达式;
其中;“:二”称4赋值号。赋值语句的功能是先计算赋值运算符右边表达式的值,
然后再把结果赋给左边的变量。例如:
x:=10;
y:=2*x+l;
str1,
赋值号’两边数据的数据类型要求是赋值相容的。若类型T1的值与类型T2的值满足
下列条件之一,则它们是赋值相容的:
(1)TI和T2是相同的数据类型,且都不是文件类型或包含文件类型的自定义类型。
(2)TI和T2是相容的有序类型,类型T2的值在T1的取值范围内。
(3)T1和T2都是实型,类型T2的值在T1的取值范围内。
(4)T1是实型,T2是整型。
(5)T1和T2都是字符串类型,或者T1是字符串类型,T2是字符类型。
(6)T1和T2是相容的集合类型,并且T2是T1的子集。
(7)T1和T2是相容的指针类型。
(8)T1是类类型,T2是T1的继承类类型,或者T1是类引用类型,T2是T1的继承类
引用类型。
2.3运算符
2.3.2算术运算符
如表2.5所示。
在进行“+”、运算中,只要有一个运算分量为real类型,则结果就为
real类型,只有两个运算分量都为integer类型时,结果才为integer类型。例如:
varn,m,r:integer;
x,y,z:real;
begin
n:=10;m:=3;x:=2.5;y:=1.5;
r:=nmodm;〃将n除以m所
得的余数赋给r
z:=n+x;y:=n/x;
end
则上述程序段执行后r的值为1,z的值为12.5,y的值为4.0。
2.3运算符
表2.5算术运算符
运算符作用操作数类型结果类型
+表小正:数integer或realinteger或real
—表下负数integer或realinteger•或real
+两个数相加integer或realinteger,real
—两个数相减integer或realinteger,real
*两个数相乘integer或realinteger,real
/两个浮点数相除integer或realreal
div两个整型数相除integerinteger
mod整除取余数integerinteger
2.3运算符
2.3.3关系运算符
关系运算符可以对两个普通数据类型、类、对象、接口类型或字符串类型的数据
进行比较,结果数据类型为布尔类型。ObjectPascal的关系运算符包括“二”、“<>"、
“<=,,、“>=”、">,,、“V”和“m”,它们的操作对象、结果数据类型如表2.6所示。
表2.6关系运算符
操作符操作结果数据类型
=X=Y,若X等于Y则结果为True,否则为FalseBoolean
<>X<>Y,若X不等于Y则结果为True,否则为FalseBoolean
>=X>=Y,若X大于等于Y则结果为True,否则为FalseBoolean
<=X<=Y,若X小于等于Y则结果为True,否则为FalseBoolean
>X>Y,若X大于Y则结果为True,否则为FalseBoolean
<X<Y,若X小于Y则结果为True,否则为FalseBoolean
InXinY,若X属于Y则结果为True,否则为FalseBoolean
2.3运算符
2.3.4逻辑运算符
逻辑运算符对逻辑类型的操作数进行运算,数据结果为逻辑型,如表2.7所示。
表2.7逻辑运算符
运算符作用操作数类型结果类型
Not逻辑非BooleanBoolean
And逻辑与BooleanBoolean
Or逻辑或BooleanBoolean
Xor逻辑异或BooleanBoolean
其中Not是一元运算符,And、Or和Xor是二元运算符,运算分量均为布尔型数据。
例如:设A和B是两个逻辑变量,A和B进行逻辑操作的情况如表28所示。
表2.8逻辑运算的真值表
ABNotAAandBAorBAXorB
FalseFalseFalseFalseFalse
True
FalseTrueFalseTrueTrue
TrueFalseFalseTrueTrue
False
TrueTrueTrueTrueFalse
2.3运算符
2.3.5集合运算符
集合运算符主要对两个集合进行操作,判断两个集合之间的关系,假设A和B是两
个相容集合,s是一个普通类型数据,则A和B进行操作的情况如表2.9所示。
例如,有以下说明和集合的运算:
typeNumbers".100;
Nnmset=setofNumbers;
varSet1,Set2,Set3,Set4,Set5:Numset;
begin
Set1:=[1,2,6,8];
Set2:=[2,3,6,7];
Set4:=[1,2];
Set5:=[2,3];
Set3:=set1+set2;
end;
上述程序段执行后,$913的值为[1,2,3,6,7,8];若改为Set3:=Set1-Set2则Set3值为
[1,8];若5戌3:=56u*$312则$83值为[2,6];条件表达式Set1=Set2的值为False,而
Set1〈>Set2的值为True,Set4V二Set1的殖为True,Set4〈二Set2的值为False,1in
Set1的值为True。
2.3运算符
表2.9集合运算规则表
运算符运算规则操作数类型结果类型
+A+B,求A和B的并集setset
-A-B,求A和B的差集setset
*A*B,求A和B的交集setset
A<=B,若A中的每个元素都是B中的元素,结果为
<=setBoolean
True,否则为False
A>=B,若B中的每个元素都是A中的元素,结果为
>=setBoolean
True,否则为False
A=B,若A和B中的元素完全相同,结果为True,否则
=setBoolean
为False
A<>B,若A和B中的元素不完全相同,结果为True,
<>setBoolean
否则为False
insinB,若s属于B则结果为True,否则为False有序,setBoolean
2-3运算符
2.3.6位运算符
位运算符能操作一个变量的各二进制位。最常用的按位运算符能把一个数左移或右
移,或对两个数按位执行与、取反、或和异或等运算。位运算符对整型的数据进行按位
操作,所得结果也为整型数据,如表2.10所示。
表2.10位运算符
运算符作用
not按位取反
and按位与
Or按位或
xor按位异或
shl按位左移
shr按位右移
2-3运算符
例如,x,y是整型,x的值是12(二进制表示为1100),y的值是8(二进制表示为
1000),x和y对应的位运算结果如表2.11所示。
表2.11位运算示例
XYnotxXandyxoryXxoryXshl2Xshr1
1000
1100B001IB1000B1100B0100B0000B0110B
B
2.3.7其他运算符
字符串连接运算符+(或&),作用是将两个字符串联接在一起。当两个字符串都是短
字符串时,进行连接若结果字符串长度超过255个字符,则只有前255个字符有效。
此外还有用于指针类型数据运算的运算符+、-、3=和。等。
2.3运算符
2.3.8运算符的优先级
通常在一个表达式中可能含有多种运算符,在求解的过程中必须清楚对表达
式中的各部分是按什么样的顺序来进行运算的,即必须考虑各操作符的优先关系。
表2.12列出了ObjectPascal各运算符的优先级。
表达式在求值时,遵循以下原则:
•两个操作符之间的操作数总是先参加高优先级的运算。
•在优先级相等的情况下,操作数按从左到右的顺序参加运算。
•在有括号的情况下应先计算括号内的运算。
表2.12ObjectPascal各运算符的优先级
运算符优先级分类
@,not1(最高)一元运算符
*,/,div,nld,and,shl,shr,as2乘除运算符
+,-,or,xor3加减运算符
in,is4(最低)关系运算符
2.4语句
2.4.1声明语句
声明语句主要实现对标号、常量、数据类型、变量、过程、函数、过程和函数
等进行声明。声明语句的使用在2.2节中已经多次使用过,在此作一总结。
1.标号声明
标号总是和一些控制转移语句一起使用,它可以是一个0〜9999的整数,也可以
是一个标识符。
.,语法(标号声明):
labellabell[,labe12[,label3[,
label10,20,label1;〃1。和20是常数标号,labell是一个标识符。
2.常量声明
语法(常量声明):
const常量名=表达式;
声明常量时,=右边可以使用预定义函数,如Abs、Addr>ArcTan>Chr>Cos>
Exp>Frac^Hi>High>Int^Length、Ln>Lo>Low、Odd>Ord、Pred>Round、
Sin>SizeOf>Sqr>Sqrt>Succ>Swap和Trunc等。
2.4语句
3.类型声明
.?语法(类型声明):
type类型名=类型定义;
例如,typeDefType=Array[1..100]ofreal;〃声明一个具有100元素的实数数组
4.变量声明
4〃语法(变量声明):
vai变量名表:类型;
例如:varX,Y:Integer;
关于“过程和函数的声明”可参阅2.5“过程与函数”一节。
注意:
声明语句的使用在程序中的次序是固定的,应该按照标号、常量、类型、变量
、过程和函数的顺序来声明。
2.4语句
2.4.2简单语句
常见的简单语句有赋值语句、过程和函数调用语句和got。语句三种。
1.赋值语句
赋值语句是形式最简单,使用最频繁的语句。其语法及要点请见231。
以下是一些赋值语句的例子:
Flag:=(I>=1)and(I<100);//将逻辑表达式的结果赋值为一个变量
Hue1:=[Blue,Red.Green];〃将一个集合赋给一个变量
I:=Sqr(J)-1*K;〃将一个表达式的结果赋值为一个变量
Shortint(MyChar):=122;//给类型转换后的变量赋值
Array1[l]:='A';//给数组的一个元素赋值
Labell.captioni请输入姓名';〃给对象的属性赋值
2.goto语句
从结构化程序设计的角度来考虑,尽量不要使用goto语句。
J语法:
goto标号;
在使用goto语句之前,要首先声明出现在goto语句中的标号,并且声明语句一定与
goto语句语句处于同一个程序块中。另外,不能用goto语句从一个过程跳转到另一个过
程中。过多地使用goto语句,会使得程序在运行过程中频繁跳来跳去,使整个程序变得
混乱无序,建议在编程时,尽量少使用got。语句。
2.4语句
2.4.3条件控制语句
在ObjectPascal中,条件语句有两种:if语句和case语句。
if加句%在编程时经常用到的语句之一,它首先判断条件表达式是否成立,根
据条件表达式成立与否来决定某些语句是否要执行。
1)if…then…else语句
语法:
if(条件表达式)then
语句1
[else
语句2
]
语法格式中的口,表示其中的内容为可选项。该if语句的执行过程为:首先判断
条件表达式的真假,如果为真,则执行then后面的语句1;如果为假,则执行else后
面的语句2,如图2.1(a)所示。若省略else子句,当条件表达式的值为假,则跳过
条件语句而去执行条件语句后的语句,如图2.1(b)所示。
2.4语句
Then和else后面的语句可以是简单语句,也可是由begin和end定界的复合语句。
(a)(b)
图2.1if语句执行流程图
例如:
ifa>bthen
max:=a
else
max:=b;
2.4语句
2)if语句的嵌套
若在if语句的then或else部分中又出现了if语句,就形成了if语句的嵌套。格式如下:
if(条件表达式)then
begin
语句1
if(条件表达式)then
语句2
else
语句3
end
else
语句4
在if语句嵌套中,if...then…else语句的复合形式最为常用,它用于处理程序中两
路以上分支的情况。该形式是将许多条件语句嵌套起来使用,使程序有多条分支。
语法(if…then…else语句的复合形式):
if(条件表达式1)then
2.4语句
语句1
elseif(条件表达式2)then
语句2
else
语句n
其中法语句1~语句n既可以是简单语句,又可以是复合语句。
如果所有条件表达式的值都为假,则执行else后面的语句。
例如以下程序段实现的功能是:如果J不等于0,则执行begin和end之间的语句;
否则如果count等于last,则给Done赋真值,如果count不等于Last,则退出,即最后
的else是与ifCount=Lastthen相匹配的else。
ifJ<>0then
begin
Result:=l/J;
Count:=Count+1;
end
elseifCount=Lastthen
Done:=True
else
Exit;
2.4语句
【例2.1】计算下列函数:
'1(x>0)
y5=o(x=o)
、-1(x<0)
函数分成三种情况,即x<0、x=0和x>0时执行不同的语句块。
方法1:用if嵌套结构来设计,将x>0的判断嵌套在x<>0的分支结构中:
y:=-i;
ifx<>0then
begin
ifx>0then
y:=l;
end
else
y:=°;
方法2:用if嵌姿结构来设计,将x>0和x=0的判断嵌套在x>=0的分支结构中:
ifx>=0then
begin
ifx>0then
y:=l
else
y:=0;
2.4语句
end
else
y:=-1;
方法3:用if...then...else语句的复合语句来设计:
ifx>0then
y:=1
elseifx=0then
y:=0
else
y:=-1;
【例2.2】写一程序,判断所输入年份是否是闰年。闰年的条件是:
(1)能被4整除,但不能被100整除的年份是闰年;
(2)能被100整除,又能被400整除的年份是闰年。对这两个条件都不符合的
年份不是闰年。
程序功能:输入一年份,显示其是否为闰年的信息。
2.4语句
界面设计:由四个组件组成,两个文本框labell(用来显示提示)和Iabel2(用来显
示结果信息),一个Edit组件Editl(用来输入要进行判断的年份)和一个Button组件
Button10如图2.2所示。
图2.2界面设计图2.3运行结果
2.4语句
程序代码:
procedureTForm1.Button1Click(Sender:TObject);
varyeaninteger;
flag:boolean;
begin
year:=strtoint(edit1.text);
ifyearmod4=0then
begin
ifyearmod100=0then
begin
ifyearmod400=0then
flag:=true//year同时能被100和400整除
else
flag:=false;〃year能被4和100整除,但不能被400整除
end
else
flag:=true;〃year能被4整除,但不能被100整除
end
2.4语句
else
flag:=false;//year不能被4整除
ifflagthen
Iabel2.Caption:='该年是闰年,
else
Iabel2.Caption:二'该年不是闰年,
end;
运行程序,在editl内输入要判断的年份,按“结果”按钮则输出结果信息。如图
2.3所示。
本例也可以用一个逻辑表达式包含所有的闰年条件,将上述程序中判断是否是闰
年的if语句用下面的if语句代替:
if((yearmod4=0)and(yearmod100<>0))or(yearmod400=0)then
flag:=true
else
flag:=false;
2.Case语句
case语句对一个结果的多个分支进行判断,可以用来在多个可能的情况中选择一
个条件,而不再需要用大量嵌套的if…elseif...elseif结构。
2.4语句
・'>语法(case语句):
case表达式of
值表1:语句1;
值表2:语句2;
值表n:语句n;
[else
语句n+1;
]
end;
case开始语句中的表达式的值必须是有序类型,并且各值表中的数据类型必须与
表达式值的类型一致,且每个值只能出现一次,不允许重复出现。若值表中有多个值,
则各值之间逗号分隔开来。例如:
caseIof
1..5:Caption:='Low';
6..9:Caption:='High';
0,10..99:Caption:="Outofrange';
else
Caption:=
end;
2.4语句
【例2.3】编程为某运输公司计算运费。
运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
s<250km没有折扣
250<s<5002%折扣
500<s<10005%折扣
1000<s<20008%折扣
2000<s<300010%折扣
3000<s15%折扣
设每公里每吨货物的基本运费为p(price的缩写),货物重为w(weight的缩
写),距离为s,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公
式为:
f=p*w*s*(1-d)
2.4语句
程序功能:输入要运输的货物重量、运输距离和每公里每吨货物的基本运费,单
击“计算”按钮,输出用户应支付的运费。
图2.4界面设计图2.5运行结果
界面设计:界面由八个组件组成,其中四个Label组件(Labell、Label2和Label3
用来显示提示,resultstr用来显示运费结果),三个Edit组件(txtweight用来输入货物
重量,txtdistence用来输入运输距离,txtprice用来输入每公里每吨货物的基本运费)
和——个Button组件btnok,如图2.4所示。
2.4语句
程序代码:
procedureTForml.btnokClick(Sender:TObject);
varp,w,d,f:real;s:integer;
begin
w:=strtofloat(txtweight.Text);//货物重量赋给w
s:=strtoint(txtdistence.Text);//运输距离赋给s
p:=strtofloat(txtprice.Text);〃基本费用赋给p
casesof
0..249:d:=0;
250..499:d:=0.02;
500..999:d:=0.05;
1000..1999:d:=0.08;
2000..2999:d:=0.1;
else
d:=0.15;
end;
f:=p*w*s*(1-d);
resultstr.Caption:二'运费为'+floattostr⑴;
end;
运行程序:按F9,输入货物重量、运输距离和基本运费,单击“计算”按钮,结
果如图2.5所示。
2.4语句
2.4.4循环语句
常用的循环语句有for...do语句、while…do语句和repeat…until语句等3种,下
面逐一加以介绍。
1.for…do语句
语法(for…do语句):
for循环变量:=初值to|downto终值do
循环体;
for...do语句是最常用的循环语句。有两种形式,分别使用关键字to和downto。
这两种形式的差别有两处:
(1)循环终止条件,前者是循环变量大于终值,而后者则是循环变量小于终
值;
(2)每执行一次循环体后,前者将循环变量加1,而后者减1。
使用to的for...do语句执行流程如图2.6所示,使用downto的形式其执行流
程与之相似,读者可自行分析。
例如:fori:=1to10doData[i]:=i;〃为Data数组的10个元素分别赋值
1,2...10o
’再如,以下程序段求10的阶乘:
fac:=1;
fori:=10downto2do
fac:=fac*i;〃计算10!
2.4语句
for循环适合用在事先知道循环次数的情况。使用for语句时应注意以下儿点:
(1)循环变量的声明必须在包含该循环的最内层程序块中进行。
(2)循环变量的初值、终值可以是能计算出具体值的表达式(包括常量、变量)。
(3)循环变量必须是有序类型,且与初值、终值属于同一数据类型。
(4)循环体可以是简单语句,也可以是由begin和end界定的复合语句。
(5)在循环体中不允许用任何语句改变循环变量的值。
(6)For循环结束后,循环变量的值会自动变成不确定值,不能再使用它。
图2.6for...do语句执行流程
2.4语句
2.while…do语句
while循环结构用在先判断条件表达式是否为真,然后重复执行某一段代码的情况
下。while的条件是在循环体执行前进行判断的,即“先判断,后执行”。
语法(while…do语句):
while条件表达式do
循环体;
while…do语句的执行流程如图2.7所示。
图2.7while…do语句执行流程
2.4语句
例如:whileData[i]<>Xdoi:=i+1;〃在Data数组中查找X。
再如,下列程序段求自然数1700的和:
vari,sum:integer;
i:=0;sum:=0;
whilei<=100do
begin
sum:=sum+i;
i:=i+1;
end;
3.repeat…until语句
repeat...until在条件表达式为真前反复执行给定的代码。它与while的区别在于
循环体至少要执行一遍,因为条件测试在循环的结尾。
语法(repeat...until语句):
repeat
循环体;
until条件表达式
2.4语句
repeat...until的执行流程如图2.8所示。
例如,以下程序段的功能是直到输入一个。到9之间的数才结束数据输入循环。
repeat
Write('Enteravalue(0..9):');
Readln(i);
until(i>=0)and(i<=9);
2.4语句
以下举例说明使用循环来解决实际问题。
【例2.4】利用公式亍E-;+;-《..公式求的近似值,直到某一项的绝对值小于
10-6为止。
分析:本问题属于累加和问题,反复执行的操作是加(减)法,解决的基本思路是:
设置累加单元存放和值,利用各项规律的变化求出每个累加项,注意为累加项设置初
始值。以下是程序:
vars:integer;〃$为累加项
n,t,pi:real;〃1为当前项
begin
_t:=l;pi:=0;n:=1.0;s:=l;
while(abs(t)>0.000001)do〃计算精度
begin
pi:=pi+t;〃执行累加
n:=n+2;〃各项分母
s:=-s;//用于改变相邻两项的符号
t:=s/n;//计算下一个项
end;
pi:=pi*4;〃求得的pi就是我近似值
end;
2.4语句
【例2.5】求Fibonacci数列前20项。这个数列有如下特点:第1、2两项都为1。从第
3项开始,每项都是其前两项之和。即:
F1=1(n=1)
F2=1(n=2)
Fn=Fn-1+Fn-2(n>3)
界面设计:界面由一个ListBox组件(ListBoxFei用来显示级数)和一个Button组件
(BtnShow组成),如图2.9所示。程序功能是单击“输出级数”按钮,将Fibonacc嗷
列前20项添加到列表ListBoxFei中显示出来。
图2.9界面设计图2.10运行结果
2.4语句
程序代码如下:
procedureTForml.BtnShow(Sender:TObject);
vari,f1,f2:integer;
begin
f1:=1;f2:=1;
fori:=1to10do
begin
ListBoxFei.items.add(inttostr(f1));〃将f1添加到列表中
ListBoxFei.items.add(inttostr(f2));〃将f2添加到列表中
f1:=f1+f2;
f2:=f2+f1;
end
end;
运行程序:单击“输出级数”按钮,Fibonacci数列前20项显示在ListBoxI中。如图2.10所示,
2.4语句
2.4.5其他语句
1brea/&J
'break'句用于在循环语句的循环体中强行退出循环,跳到循环语句后面的
语句继续执行。例如:
varS:string;
begin
whileTruedo
begin
ReadLn(S);//读入一字符串
ifS="thenBreak;〃不输入任何字符,则退出循环
WriteLn(S);〃输出字符串
end;
end;
end;
执行该程序段时,当输入一个空串时结束while循环。
2.4语句
2.continue语句
continue语句和break语句类似,用于循环语句的循环体中强行结束本次循环,开
始执行本循环的下一次循环操作。
例如,以下程序段的功能是单击窗体上的BtnShow,将100~200之间的不能被3整
除的数添加到列表框ListlBoxNum中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度工程验收检测合同2篇
- 个人挖掘机租赁合同简单版
- 民宿承包经营合同1
- 2024年度智能手机制造合作框架合同
- 劳务外包合同 印花税 2篇
- 手房买卖合同补充协议
- 空调维保协议范本 完整版范文
- 2024版工程地质勘探安全规范合同
- 《工程造价习题》课件
- 难忘的第一次课件
- 对讲机交接管理流程
- 孵化器(大学科技园)绩效考核评价体系
- 遍净农药多菌灵原药msds
- 铁路线路工更换尖轨作业指导书
- 北师大六年级数学上册第一单元《圆的周长》作业设计
- 五年级上册语文课件- 《23.鸟的天堂》 部编版 (共16张PPT)
- GB∕T 37661-2019 船用广播系统通用规范
- 危险废物管理培训课件
- 服装投标技术方案全
- 中国石油天然气集团公司物资采购管理办法
- 填埋库区平整土石工程施工设计方案
评论
0/150
提交评论