选择结构语句
选择结构语句
在程序设计中我们是通过选择结构语句来实现程序的逻辑判断功能。
在本讲中我们将回顾选择结构的各种语法格式以及该结构在我们程序设计中的重要应用;
选择结构具体分成三种
1)简单的if …then….else结构;
2)复杂的if …then….else嵌套结构;
3) case 语句的使用;
这三种结构各有特点,我们将根据具体的条件使用这三种分支结构,建议大家涉及到比较复杂的分支结构的时候使用“流程图”,方便我们的思路更加清晰; 分支结构的示意图
分支结构的特点是:根据给定的条件判断在两条甚至更多的可能路径中选择一条,两条路径分别做不同的处理,即如果条件成立那么执行A 语句,不成立则执行B 语句。
1、格式
Ⅰ、IF <布尔表达式>THEN 语句;
Ⅱ、IF <布尔表达式>THEN 语句1 ELSE 语句2;
(注意Ⅱ型IF 语句中语句1后无“;”号 语句可能是符合语句) 知识点回顾:符合语句
在if 语句中,跟在then 或else 后的语句可能不止一个,这时要用到复合语句。
下面我们看看复合语句的概念:
复合语句:复合语句是一个以BEGIN 开始,以END 结束的语句。在BEGIN 和END 之间可以包括若干个语句,每个语句之间以分号隔开。一般形式为: BEGIN
语句1;
语句2;
......
语句N ;
END ;
注意:PASCAL 把复合语句视作一个语句。复合语句可用在PASCAL 允许使用普通语句的任何地方。下面让我们看几个例子:
范例一
1.输入三角形的三个边,判断它是何类型的三角形(等边三角形?等腰三角形?一般三角形?)。
分析:
首先我们应该判断三条边是否组成一个三角形, 然后通过分析我们需要根据不同的情况将三角形分成三种形式所以我们需要使用多重分支结构,鉴于条理性的需要我们先画了流程图,确定无误后再写程序。
参考程序
Program sjx(input,output);
Var a,b,c:real;
Begin
If (a+b>c) and (b+a>c) and (c+a>b) then//判断是不是一个三角形
if (a=b) or (b=c) or (c=a) then //判断是不是一个等腰三角形
if (a=b) and (a=c) then writeln(„deng bian sjx‟) //是否等边
else writeln(„deng yao sjx‟)
else writeln(„yi ban sjx‟) //一般三角形
else writeln(„you input is error‟);
End.
思考题一
一.输入两个正整数a ,b 。b 最大不超过三位数,a 不大于31。使a 在左,b 在右,拼接成一个新的数c 。例如:a =2,b =16,则c =216;若a =18,b =476,则c =18476。
提示:求c 的公式为:
c =a ×K +b
其中:
参考程序流程图
范例二
期未来临了,班长小Q 决定将剩余班费X 元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q 想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q 制订出一种买笔的方案。
分析:对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x div 4支。由于小q 要把钱用完,故我们可以按以下方法将钱用完:
若买完x div 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x div 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;若买完x div 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。
从以上对买笔方案的调整,可以看出笔的数目都是x div 4,因此该方案的确为最优方案。
由于我们可以根据 x mod 4 的情况分成0,1,2,3四种情况, 用IF…THEN…ELSE语句嵌套比较麻烦, 所有我们想到用case 语句来实现…
知识点的回顾:case语句的使用
当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以用case 语句实现。它的选择过程,很象一个多路开关,即由case 语句的选择表达式的值,决定切换至哪一语句去工作。因此在分支结构程序设计中,它是一种强有力的手段。
(二) 、情况语句的一般形式:
case of
:语句1;
:语句2;
:
:语句n
end;
其中case 、of 、end 是Pascal 的保留字, 表达式的值必须是顺序类型, 分析:应为涉及到四种情况所以我们使用CASE 语句来实现该程序; 参考程序如下:
program pen;
var a,b,c:integer;{a,b,c分别表示在买笔方案中,6元、5元和4元钱笔的数目}
x,y:integer;{x,y 分别表示剩余班费和买完最多的4元笔后剩的钱} begin
write('x=');
readln(x){输入x}
c:=x div 4;{4元笔最多买的数目}
y:=x mod 4;{求买完c 支4元笔后剩余的钱数y }
case y of
0 : begin a:=0;b:=0; end;
1 : begin a:=0;b:=1;c:=c-1; end;
2 : begin a:=1;b:=0; c:=c-1;end;
3 : begin a:=1;b:=1; c:=c-2;end;
end;
writeln('a=',a,'b=',b,'c=',c);
end.