选择结构程序设计
http://www.mydrs.org 9/14/2001 大榕树
概述
通常,计算机按在程序中书写的顺序执行语句。如果一个程序只由赋值语句和输入输出过程组成,那么它们只能顺序地执行一次,而且必然执行一次。但一个程序仅有这类顺序执行的语句显然是不够的,经常需要的是根据某个变量或表达式的值作出判定,以决定执行哪些语句和跳过哪些语句不执行。我们称这种程序结构为选择结构。为了实现选择结构程序设计,在PASCAL中引入了IF语句和CASE语句。它们能从两个或多个语句中按一定的条件有选择的执行其中的一个。
IF语句 CASE 语句
IF语句:
IF语句提供了根据不同条件选择不同通路的能力。简单IF语句可从两路语句中选择其一执行,从而实现 双向分支。IF语句的一般形式为: IF 布尔表达式 THEN 语句1 ELSE 语句2; 其执行过程为:若布尔表达式的值为TRUE,执行跟在THEN后面的语句1;反之,则执行ELSE后面的语句2。其流程图如下:
IF语句的另一种常见形式为: IF 布尔表达式 THEN 语句; 其执行过程为:若布尔表达式的值为TRUE,执行跟在THEN后面的语句;反之,则执行一个空语句,即 什么也不做。其流程图如下:
注意 <1>在if-then-else结构中,位于else前的语句其最后不能有分号。否则编译器将认为这是if-then结构,下面再遇到else就会指示出错误信息。 <2>在if语句中,跟在then或else后的语句可能不止一个,这时要用到复合语句。
下面我们看看复合语句的概念:
复合语句:复合语句是一个以BEGIN开始,以END结束的语句。在BEGIN和END之间可以包括若干个语句,每个语句之间以分号隔开。一般形式为: BEGIN 语句1; 语句2; ...... 语句N; END; 注意:PASCAL把复合语句视作一个语句。复合语句可用在PASCAL允许使用普通语句的任何地方。下面让我们看几个例子:
例一:读入三个整数,找出并输出其中最大数。 program exec1(input,output); var n1,n2,n3,max:real; begin read(n1,n2,n3); if n1>n2 then max:=n1 else max:=n2; if n3>max then max:=n3; writeln('the largest number is ',max:8) end.
例二:给出三角形的三个边长A,B,C,求三角形面积. program exec2(input,output); var a,b,c,s,area:real; begin readln(a,b,c); if (a+b>c)and(b+c>a)and(c+a>b) then begin s:=(a+b+c)/2; area:=sqrt(s*(s-a)*(s-b)*(s-c)); writeln('area=',area:6:2); end else begin writeln(a:6:2,b:6:2,c:6:2); writeln('input data error'); end; end.
IF语句的嵌套:
在一个IF语句中可以又出现另一个IF语句,这称为IF语句的嵌套。例如下面形式: IF 条件1 THEN 语句1 ELSE IF 条件2 THEN 语句2 ELSE 语句3; 注意: <1>除了上面的形式外,还有许多其他形式。如then后面是一个if语句. <2>pascal规定:为了避免二义性,else总与离它最近的前面的那个尚未匹配的if--then相匹配.
例三:计算Y=2*X 当X<0时 =X/2 当X>0时 =0 当X=0时 program exec3(input,output); var x,y:real; begin readln(x); if x>0 then y:=x/2 else if x<0 then y:=2*x else y:=0; writeln('y=',y); end.
case语句:
IF语句只能从两种方案中选择其中之一,而CASE语句能从多种可能中选择其中之一,因此其又称"情况语句"。它以清晰简洁的形式实现多路分支情况。 CASE语句的一般形式是:
CASE 表达式 OF 常量表1:语句1; 常量表2:语句2; ...... ...... 常量表n:语句n; END;
某一个常量,则执行该常量后面的语句。在执行完该语句后,流程跳到CASE语句的末尾END处。 注意: <1>表达式可以是整型,字符型,布尔型,但不能是实型. <2>所有情况常量应互不相同,并且每个只允许出现一次,并且应与表达式具有相同类型. <3>表达式所有可能的值必须在情况常量之内,即若没有一个情况常量等于表达式的值是错误的. <4>每个语句的前面可附以一个或多个常量,用逗号分开, 语句可以是复合语句.
下面看几个例子:
例一:输入年、月,输出该月有几天。
program exec(input,output); var year,month,days:integer; begin read(year,month); case month of 1,3,5,7,8,10,12:days:=31; 4,6,9,11:days:=30; 2:if (year mod 4=0) and(year mod 100<>0)or(year mod 400=0) then days:=29 else days:=28; end; writeln(year,month,days); end.
例二:若已知X在1到5之间,按下公式计算Y Y=3*X+10 当1<=X<2 =2*COS(X) 当2<=X<3 =sin(X)/3 当3<=X<5
program exec2(input,output); var x,y:real; begin read(x); case trunc(x) of 1: y:=3*x+10; 2: y:=2*cos(x); 3,4: y:=sin(x)/3; end; writeln('y=',y); end.
|