第二章 选择结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章选择结构
程序的三种基本结构是:顺序结构,选择结构,循环结构。顺序结构固然简单,按照程序中语句的书写顺序执行,但大多数情况是,语句执行的顺序要根据某些表达式的值选择哪些语句执行哪些语句不执行,这种结构称为选择结构。Pascal语言中,实现选择结构的语句有if语句(条件语句)和case语句(情况语句)。本章主要介绍这两种语句在选择结构中的使用方法。
第一节 if语句
一、if语句的两种格式
if语句又称如果语句,它有两种格式:
格式一:
if 条件表达式then 语句;
格式二:
if 条件表达式 then 语句1 else 语句2;
功能:
(1)格式一if语句的执行过程是:若条件表达式的值为TRUE,则执行then后面的语句;当条件表达式的值为FALSE时不执行then后面的语句,而是去执行if语句下面的语句。
(2)格式二if语句的执行过程是:若条件表达式的值为TRUE,则执行then后面的语句1;当条件表达式的值为FALSE时,执行else后面的语句2。
特别注意:格式二中else前面的语句1最后不能有分号,因为分号是两个语句之间的分隔符,而else并非语句,如果在该处添了分号,则在编译的时候就会认为if 语句到此结束,而把else当做另一句的开头,输出错误信息。
二、复合语句
在程序中,一般把一条语句称为简单语句。
在if语句中,跟在then或else后面的语句可能不止一个,这时就要用到复合语句。
复合语句是一个以begin开始,以end结束的语句。在begin和end之间包含若干个简单语句。复合语句的一般形式如下:
begin
语句1;
语句2;
……
语句n;
end;
在复合语句中,begin与end起到括号的作用。在if语句中,如果跟在then或else 后面的语句是多个简单语句,则必须把它们写成复合语句。
一个复合语句从外部看,作用相当于一个语句。
三、if语句应用举例
例2-1 求三角形面积。
【问题描述】
输入三角形的三边a,b,c(边长不超过100),求三角形的面积。
【输入】正整数a,b,c。
【输出】三角形的面积,小数点后保留2位有效数字。
【样例输入】3 4 5
【样例输出】6.00
问题分析:
例1-8中,输入是保证三边a,b,c能构成三角形的情况,如果没有这个条件说明,则需要判断a,b,c是否能构成三角形,即是否满足任意两边之和大于第三边。
参考程序:
var
a,b,c:integer;
p,s:real;
begin
readln(a,b,c);
if (a+b>c)and(a+c>b)and(b+c>a) then
begin
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
writeln(s:0:2);
end
else writeln('error!');
end.
注意:程序中then后面的是复合语句;else前面的end后面不能加分号。
例2-2 奇偶判断。
【问题描述】
输入一个正整数n,判断它的奇偶性(偶数输出“yes”,奇数输出“no”)。
【输入】正整数n(n<100 000)。
【输出】偶数输出“yes”,奇数输出“no”。
【样例输入】121
【样例输出】no
问题分析:
一个整数n,如果能被2整除则是偶数,否则为奇数。
参考程序1:
var n:integer;
begin
readln(n);
if n mod 2 = 0 then writeln('yes');
if n mod 2 <> 0 then writeln('no');
end.
参考程序2:
var n:integer;
begin
readln(n);
if n mod 2 = 0 then writeln('yes') else writeln('no');
end.
例2-3 判断闰年。
【问题描述】
已知某一年份,判断该年份是否为闰年(是则输出“yes ”,否则输出“no ”)。
【输入】某一年份。
【输出】根据判断结果输出yes 或者no 。
问题解析:
判断闰年的条件:
(1)年份能被4整除,但不能被100整除;
(2)年份能被400整除。
上述两个条件中,只要有一个条件满足,则确定该年为闰年。由此得出判断闰年的布尔表达式:((年份 mod 4=0)and(年份 mod 100<>0))or(年份 mod 400=0)。
参考程序:
var
y :integer ; begin
readln(y); //读入年份
if((y mod 4=0)and(y mod 100<>0))or(y mod 400=0) //闰年判断
then writeln('yes')
else writeln('no');
end.
例2-4 分段函数。
【问题描述】
计算下列函数,输入x ,输出y 的值(精确到小数点后两位小数)。
⎪⎩⎪⎨⎧>+=-<+=)
0(6)0(1
)0(102x x x x x y 【输入】x
【输出】y
【样例输入】9
【样例输出】9.00
问题分析:
根据变量的取值范围,各有不同的计算公式,这是一个分段函数。该函数本身具有选择结构的特点。
参考程序1:
var
x:real;
begin
readln(x);
if x<0 then writeln(2*x+10:0:2);
if x=0 then writeln(-1);