Delphi4 程序流程控制

@[TOC]

第四章 程序流程控制

4.1条件语句

if <条件表达式> then 
   <语句1>
else
   <语句2>;

以及

if <条件1> then
   <语句1>
else if <条件2> then
   <语句2>
...
else if <条件N> then
   <语句N>
else
   <其他语句>;

4.2选择语句

Case 选择表达式 of
   常量1:语句1;
   ...
   常量N:语句N;
else
   ...
end;

注:和条件语句一样,else及其后的语句可以省略;

举例

program EchoStar;
{$APPTYPE CONSOLE}
uses
   SysUtils;
var
   N:integer;
begin
   write('input a number between 1 and 4:');
   read(n);
   case N of
      1:writeln('*');
      2:begin
           writeln('**');
           readln;
        end;
      3:writeln('***');
      4:writeln('****');
   else
      writeln('invalid input');
   end;
   readln;
end.

4.3循环语句

while循环
program SumInt;
{$APPTYPE CONSOLE}
uses
   SysUtils;
var
   n,i:1..100;
   Sum:integer;
begin
   write('input a num between 1 and 100');
   read(n);
   sum:=0;
   I:=1;
   while i <=n do
   begin
      sum:=sum+i;
      i:=i+1;
   end;
   writeln(inttostr(sum));
   readln;
end.

注:

while的条件表达式省略时,循环永不停止,这样的循环称之为空循环;

repeat循环

while循环第一次先判断再执行

repeat循环第一次先执行再判断

举例

begin
   write('input a num between 1 and 100:');
   read(n);
   sum:=1;
   i:=1;
   repeat
      i:=i+1;
      sum:=sum+i;//这两句顺序不可调换
   until i=n;
   writeln(inttostr(sum));
   read(i);
end.

注意到sum的初始值变为1,因为是计算1+…+n,i=1

for循环
program ForSample
{$APPTYPE CONSOLE}
uses
   SysUtils;
var
   I,n:integer;
begin
   write('input n:');
   read(n);
   for i:=1 to n do
      writeln('delphi2010');
   writeln('i is '+inttostr(i));
   read(n);
end.

或者

   for j:=n downto 1 do
      writeln('like a baby');
   writeln('j is '+inttostr(j));
   read(n);

i为n+1,j为0

for…in语句

举例

program ForSample;
{$APPTYPE CONSOLE}
uses
   SysUtils;
Var
   myset:set of AnsiChar;
   ch:AnsiChar;
begin
   myset:=['D','B','C','A'];
   for ch in myset do
      write(ch);
   readln;
end.

除了集合,

还可以遍历数组,一维二维多维,静态动态都行,遍历时按照由小到大遍历;

遍历字符串,按照前后顺序从第一个字符开始遍历;

类、接口、记录,这三个实现遍历功能比较复杂, 一般很少使用。

Continue和break

continue跳出当前循环继续下一个次循环,break停止循环继续循环语句后面的代码

举例

program BreakExample
{$APPTYPE CONSOLE}
uses
   SysUtils;
var
   ch:char;
   str:string;
begin
   str:='ABCDEFGHIJKLMN';
   for ch in str do
   begin
      if ch='H' then
          break;
       writeln(ch);
    end;
    readln;
 end.

4.4程序中止例程

程序中止分为两种:

退出当前语句不退出程序;

退出程序;

中止方法:

Exit,Halt,Terminate

Exit

exit退出当前语句不退出程序;

procedure M1;
begin
   exit;
   writeln('M1');
end;

begin
   writeln('Start Program');
   M1;
   writeln('Ending Program');
   readln;
end.

运行结果

Start Program
Ending Program
Halt

Halt会引发一个异常中断并通过这个中断直接退出整个程序;

uses
   SysUtils,Dialogs;
procedure M1;
begin
   Halt;
end;

procedure M2;
begin
   writeln('M2');
   M1;
end;

begin
   ShowMessage('Starting Program');
   M2;
   ShowMessage('Ending Program');
end.
Terminate

Delphi的窗体程序中含有一个全局程序对象,其中的Terminate方法可以在窗体程序的任何地方使程序正常中断并退出;

举例

procedure TForm1.ButtonClick(Sender:TObject);
begin
   Application.Terminate;
   showmessage('');
end;