pascal语言中的语句.docx

上传人:b****7 文档编号:10865649 上传时间:2023-02-23 格式:DOCX 页数:13 大小:46.30KB
下载 相关 举报
pascal语言中的语句.docx_第1页
第1页 / 共13页
pascal语言中的语句.docx_第2页
第2页 / 共13页
pascal语言中的语句.docx_第3页
第3页 / 共13页
pascal语言中的语句.docx_第4页
第4页 / 共13页
pascal语言中的语句.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

pascal语言中的语句.docx

《pascal语言中的语句.docx》由会员分享,可在线阅读,更多相关《pascal语言中的语句.docx(13页珍藏版)》请在冰豆网上搜索。

pascal语言中的语句.docx

pascal语言中的语句

简单语句和复合语句

Pascal简单语句中不包含任何别的语句,赋值语句和过程调用即是简单语句的例子。

简单语句用分号隔开,如下所示:

X:

=Y+Z;//assignment

Randomize;//procedurecall

用begin和end将简单语句括起来即组成复合语句,复合语句用法与普通的Pascal语句相同,见下例:

begin

A:

=B;

C:

=A*2;

end;

end之前的最后一条语句末尾分号不是必需的,你可以写成:

begin

A:

=B;

C:

=A*2

end;

这两种写法都是正确的。

第一种多了一个无用(但也无害)的分号。

分号实际上是一个空语句,也就是说,是一个没有代码的语句。

有时,空语句可用在循环体或其他特殊情况中。

注意:

虽然最后一条语句末尾的分号没有用,我却总是加上它,并且建议你也这样做。

因为有时你可能需要在末尾添加语句,如果最后没有加分号,你就必须记着加上它,与其如此不如一开始就加上它。

赋值语句

在Pascal语言中赋值语句用冒号-等号操作符“:

=”,对使用其他语言的编程人员来说这是一个奇怪的符号。

在其他语言中用作赋值符号的“=”在Pascal中用作关系运算符,用于判断是否相等。

注意:

赋值和相等判断使用不同的符号,使Pascal编译器(象C编译器一样)能更快解译源代码,因为这样就不需要通过检查上下文来判断符号的意义,此外使用不同操作符也使代码更易读。

条件语句

条件语句通过条件检测,判断是否执行该条件语句中包含的语句。

条件语句可有两种基本形式:

if语句和case语句。

If语句

对if-then型语句,仅当条件满足时,语句才执行;对if-then-else型,if语句在两条语句中选择一条执行。

条件用布尔表达式建立,这里通过一个简单的Delphi例子来示范如何写条件语句。

首先,创建一个应用程序,在form上面放两个复选框(checkbox)和四个按钮(button),不要改变复选框和按钮的名字,双击按钮为其OnClick事件添加响应程序。

下面是第一个按钮事件代码中一条简单的if语句:

procedureTForm1.Button1Click(Sender:

TObject);

begin

//simpleifstatement

ifCheckBox1.Checkedthen

ShowMessage('CheckBox1ischecked')

end;

当点击button1,如果第一个复选框中有复选标记,那么这个程序将显示一条消息(见图5.1)。

我用了ShowMessage函数,因为它是Delphi中最简单的短信息显示函数。

图5.1:

例IfTest显示的信息

如果点击按钮后没有反应,表明复选框未被选中。

对于这种情况,最好能交代得更清楚些,为此在第二个按钮的代码中,我用了if-then-else语句:

procedureTForm1.Button2Click(Sender:

TObject);

begin

//if-then-elsestatement

ifCheckBox2.Checkedthen

ShowMessage('CheckBox2ischecked')

else

ShowMessage('CheckBox2isNOTchecked');

end;

要注意的是,不能在第一句之后、else关键词之前加分号,否则编译器将告知语法错误。

实际上,if-then-else语句是单纯的一条语句,因此不能在语句中间加分号。

if语句可以很复杂,句子中的条件部分可以是一系列条件(用and、or、not等布尔操作符联接起来),if语句又可以嵌套另一个if语句,见例IfTest中其它两个按钮的示范代码:

procedureTForm1.Button3Click(Sender:

TObject);

begin

//statementwithadoublecondition

ifCheckBox1.CheckedandCheckBox2.Checkedthen

ShowMessage('Bothcheckboxesarechecked')

end;

procedureTForm1.Button4Click(Sender:

TObject);

begin

//compoundifstatement

ifCheckBox1.Checkedthen

ifCheckBox2.Checkedthen

ShowMessage('CheckBox1and2arechecked')

else

ShowMessage('OnlyCheckBox1ischecked')

else

ShowMessage(

'Checkbox1isnotchecked,whocaresforCheckbox2?

')

end;

仔细阅读代码并执行程序,看看你能不能理解整个程序。

当你搞不清某种编程结构时,可以先写一个简单程序,这样可以帮你学习许多东西。

你可以再加几个复选框,增加这个简例的复杂程度,并进行各种测试。

Case语句

如果你的if语句变得非常复杂,有时可以用case语句代替它。

case语句包括用来选值的表达式、可能值序列或一个取值范围。

这些值应该是常量,并且它们必须唯一,而且应属于有序类型。

Case语句最后可以带一个else语句,当没有一个标签与选择器的值一致时,执行else语句。

下面是两个简单的例子:

caseNumberof

1:

Text:

='One';

2:

Text:

='Two';

3:

Text:

='Three';

end;

caseMyCharof

'+':

Text:

='Plussign';

'-':

Text:

='Minussign';

'*','/':

Text:

='Multiplicationordivision';

'0'..'9':

Text:

='Number';

'a'..'z':

Text:

='Lowercasecharacter';

'A'..'Z':

Text:

='Uppercasecharacter';

else

Text:

='Unknowncharacter';

end;

Pascal语言中的循环

其它编程语言中使用的循环语句,Pascal语言中都有,它们包括for、while和repeat语句。

如果你用过其他编程语言,你会发现Pascal中的循环语句没什么特别的,因此这里我只作简要的说明。

For循环

Pascal中的for循环严格地建立在计数器基础上,循环每执行一次,计数器不是增加一个值就是减小一个值。

下面是一个for语句的简例,用来将前十个数加起来:

var

K,I:

Integer;

begin

K:

=0;

forI:

=1to10do

K:

=K+I;

同样的for语句可以用正好相反的计数器来写:

var

K,I:

Integer;

begin

K:

=0;

forI:

=10downto1do

K:

=K+I;

Pascal中的for循环语句其灵活性比其他语言小(它不能指定1之外的步长),不过简单也容易理解。

如果需判断的条件比较复杂,或想自定义计数器,你可以用while语句或repeat语句,而不是for循环语句。

注意:

for循环计数器不必非是数字,它可以是任何有序类型的值,例如一个字符或一个枚举类型值。

while语句和repeat语句

while-do循环语句和repeat-until语句的不同点在于repeat循环语句的代码至少要执行一次。

从下面的简例很容易理解这一点:

while(I<=100)and(J<=100)do

begin

//useIandJtocomputesomething...

I:

=I+1;

J:

=J+1;

end;

repeat

//useIandJtocomputesomething...

I:

=I+1;

J:

=J+1;

until(I>100)or(J>100);

从上可见即使I或J的初始值大于100,repeat-until循环中的代码也仍会执行一次。

注意:

两种循环另一个关键的不同点是,repeat-until循环的条件是反向的条件,只要不满足这个条件,循环就执行;当条件满足时,循环终止。

这正好与while-do循环相反,while-do循环当条件是真值时才执行。

为此,我不得不在上面代码中用反向条件来获得相同的结果。

一个循环语句例子

为了探究循环的细节,让我们看一个Delphi简例,这个循环例子表现了固定计数器循环和随机计数器循环之间的差别。

建一个新的工程,在主窗体上放一个listbox和两个button,通过设置ObjectInspector中的name属性分别命名button为BtnFor和BtnWhile。

你还可以把Caption属性中的Btn去掉,或甚至加上&,让跟在&后面的字母成为快捷键。

下面是该窗体文本描述:

objectForm1:

TForm1

Caption='Loops'

objectListBox1:

TListBox...

objectBtnFor:

TButton

Caption='&For'

OnClick=BtnForClick

end

objectBtnWhile:

TButton

Caption='&While'

OnClick=BtnWhileClick

end

end

图5.2:

单击For按钮后显示的结果

现在,我们分别给两个button添加OnClick事件代码。

第一个button用一个简单的for循环来显示一列数字,结果如图5.2。

这个循环向listbox中的Items属性添加一系列字符串。

在执行循环之前,需要清除listbox中的内容。

程序如下:

procedureTForm1.BtnForClick(Sender:

TObject);

var

I:

Integer;

begin

ListBox1.Items.Clear;

forI:

=1to20do

Listbox1.Items.Add('String'+IntToStr(I));

end;

第二个button的事件代码稍微复杂点。

本例中让while循环基于一个随机增长的计数器。

为实现它,我调用了Randomize过程,用它来重置随机数发生器,还调用了Random函数,其取值范围为100,即函数返回0至99之间的随机数,随机数序列控制while循环的执行次数。

procedureTForm1.BtnWhileClick(Sender:

TObject);

var

I:

Integer;

begin

ListBox1.Items.Clear;

Randomize;

I:

=0;

whileI<1000do

begin

I:

=I+Random(100);

Listbox1.Items.Add('RandomNumber:

'+IntToStr(I));

end;

end;

每次点击While按钮,出现的数字都不同,因为这些数字取决于随机数发生器。

图5.3显示了两次点击的结果,可看到不仅每次产生的数字不同,而且数据项数也不同。

也就是说,这个while循环执行的次数是随机的。

图5.3:

按While按钮后显示的结果

注意:

用Break和Continue系统过程可以改变循环执行的标准流程。

Break中断循环;Continue直接跳至循环测试句,或使计数器增加一个步长,然后继续循环(除非条件为空或计数器达到最大值)。

还有两个系统过程Exit和Halt,让你立即从函数或过程中返回,或者终止程序。

With语句

我要讲的最后一种Pascal语句是With语句,With语句是Pascal编程语言独有的语句,不过最近JavaScript和VisualBasic也添加了这种语句,它在Delphi程序设计中很有用。

With语句是一种用于简化代码的语句。

如你要访问一个记录类型变量(或一个对象),用With语句就不必每次重复变量的名字。

例如对于以下的记录类型代码:

type

Date=record

Year:

Integer;

Month:

Byte;

Day:

Byte;

end;

var

BirthDay:

Date;

begin

BirthDay.Year:

=1997;

BirthDay.Month:

=2;

BirthDay.Day:

=14;

可以用with语句改进后半部分代码,如下:

begin

withBirthDaydo

begin

Year:

=1995;

Month:

=2;

Day:

=14;

end;

在Delphi程序中,这种方法能用于访问控件和类变量。

现在通过with语句访问列表框的条目,我们重写上面循环例子的最后部分:

procedureTForm1.WhileButtonClick(Sender:

TObject);

var

I:

Integer;

begin

withListBox1.Itemsdo

begin

Clear;//shortcut

Randomize;

I:

=0;

whileI<1000do

begin

I:

=I+Random(100);

//shortcut:

Add('RandomNumber:

'+IntToStr(I));

end;

end;

end;

当你使用控件或类时,with语句通常能简化你的代码,尤其对嵌套域。

例如,你要改变窗体画笔的宽度和颜色,你可以写代码如下:

Form1.Canvas.Pen.Width:

=2;

Form1.Canvas.Pen.Color:

=clRed;

但如果用With语句代码会更简单:

withForm1.Canvas.Pendo

begin

Width:

=2;

Color:

=clRed;

end;

当编写的代码很复杂时,with语句会很有用,也可省去一些临时变量。

但是这样做也有缺点,因为这样将使代码的可读性变差,特别对有相似或相同属性的对象。

更严重的是,使用with语句可能会在代码中融入微妙的逻辑错误,甚至连编译器都难以发现。

例如:

withButton1do

begin

Width:

=200;

Caption:

='NewCaption';

Color:

=clRed;

end;

这段代码改变了按钮的Caption和Width属性,但也改变了窗体的Color属性,而不是按钮的颜色!

其原因是TButton控件没有Color属性,又由于执行的代码是针对窗体对象的(我们正在写窗体的方法),所以窗体对象即成为默认的访问对象。

如果这样写:

Button1.Width:

=200;

Button1.Caption:

='NewCaption';

Button1.Color:

=clRed;//error!

编译器会给出一个错误。

通常,由于with语句在当前的块中定义了新的标识符,省略了原有的标识符,可能引起在同一块内错误地访问另一个标识符(就象上面的这段代码)。

即使存在种种缺陷,我还是建议你习惯于使用with语句,因为with语句确实是非常便利,并且有时也会使代码更容易读懂。

然而,你应该避免使用多个with语句,如:

withListBox1,Button1do...

这样会使后面的代码非常难读,因为,对该块中定义的每个属性,你都要根据相应的属性以及控件的次序,才能推出所访问的控件。

注意:

说到可读性,要知道Pascal没有endif或endcase语句。

如果if语句有一个begin-end块,那么end标志语句结束;另外,case语句也总是以一个end结束。

所有这些end语句,常常是一个接一个,使代码难以理解,只有通过缩排跟踪,才能追出一个end所对应的语句。

解决这个问题的一个通用办法,也是使代码更可读的办法,是在end后面加注释,如下例:

if...then

...

end;//if

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

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1