版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 选择结构选择结构 w第一节第一节 IF语句语句w第二节第二节 IF语句的嵌套语句的嵌套w第三节第三节 情况语句(情况语句(CASE语句)语句)第一节第一节 IF语句语句 PASCAL中的布尔(逻辑)类型中的布尔(逻辑)类型 在前面,我们学习了整型(integer)与实型(real)。其中integer型数据取值范围为 -32768到32767之间所有整数。而real型数据取值范围为其绝对值在10-38到1038之间的所有实数。它们都是数值型的(即值都为数)。布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即“真”与“假”。 布尔常量布尔常量 在Pascal语言中“真
2、”用true表示,“假”用False表示。所以布尔类型只有TRUE与FALSE两个常量。 布尔变量(布尔变量(BOOLEAN) 如果我们将某些变量说明成布尔型,那么这些变量就是布尔变量,它们只能用于存放布尔值(true或false)。 例如:VAR A,B:BOOLEAN; 布尔类型是顺序类型布尔类型是顺序类型 由于这种类型只有两个常量,Pascal语言中规定true的序号为1,false的序号为0。若某种类型的常量是有限的,那么这种类型的常量通常都有一个序号,我们称这种类型为顺序类型。如前面我们学过的整型(integer),以及后面要学到的字符型(char)都是顺序类型。 布尔类型的输入与输
3、出布尔类型的输入与输出 var a,b : boolean;begin a := true; b := false; writeln(a, ,b);end. a)输出运行结果:TRUE FALSE b) 输出 布尔类型变量不能直接用读语句输入!布尔类型变量不能直接用读语句输入! 布尔类型变量不能通过读语句给它们提供值。事实上,我们可以通过间接方式对布尔变量进行值的输入。例如,以下程序是错误的: var a,b: boolean;beginreadln(a,b); writeln(a,b);end./ 错误语句,布尔型变量不能读入错误语句,布尔型变量不能读入 关系表达式与布尔表达式关系表达式与布
4、尔表达式 什么是关系表达式?什么是关系表达式? 表3-1关系运算符大于大于等于小于小于等于等于不等于= 用小括号、=、=、=、将两个算术表达式连接起来的式子就称为关系表达式(比较式)。 如:3+78,x+y10,2*78,x+y10,2*76是错的,故它的值为FALSE。45=32是对的,故该表达式的值为true。 关系表达式用于表示一个命题。如:“为偶数”可表示为: mod 2=0。“为正数”可表示为:n0。布尔运算及布尔表达式布尔运算及布尔表达式 为了表示更复杂的命题,Pascal还引入三种逻辑运算符:not、and、or。它们分别相当于数学上的“非”、“且”和“或”的意义。 这三个运算符
5、的运算对象为布尔量,其中not为单目运算,只有一个运算对象,and与or为双目运算,有两个运算对象。它们的运算真值表如下: abNot aa and ba or ba xor bfalsefalsetruefalsefalsefalsefalsetruetruefalsetruetruetruefalsefalsefalsetruetruetruetruefalsetruetruefalse 多个关系表达式用布尔运算符连接起来的式子就称为布尔表达式,布尔表达式的值也为布尔值。在一个表达式里出现两个或两个以上的运算符, 则必须规定它们的运算次序。pascal规定: 表达式中相同优先级的运算符,按
6、从左到右顺序计算; 表达式中不同优先级的运算符,按从高到低顺序计算; 括号优先级最高,从内到外逐层降低; 对于一个复杂的表达式可能同时包含算术运算、关系运算和逻辑运算以及函数运算。运算的优先顺序为:括号函数not*、/、div、mod、and+、or、xor关系运算。例例3.1 若a=true,b=false,x=7,y=12,m=3,n=35,求下列布尔表达式的值。 a and not (mn) and (x10 then Price:=Price*0.75; /若超过10,则价格打7.5折 Total:=Num*Price; Writeln(Total=,Total:0:2); /保留二位
7、小数 Readln; End.y=例例3.4 函数y如下0(x0)2x(0=x10)2x + 1(10=x50)x/2 + 50 (50=x)编写程序,当输入x后输出y的值。【分析分析】 根据变量的取值范围,各有不同的计算公式,这就是一个分段函数。这里编程的关键就是判断用户所输入的值在什么范围内,从而采用什么公式,下面程序用了四个并列的if语句。 程序如下:程序如下: Program ex3_4;Var x,y : real;begin readln(x); if x=0) and (x=10) and (x=50 then y : =x/2+50; writeln(y : 0 : 4); /
8、保留4位小数end.运行结果:输入:-3 输出:y=0.0000输入:5 输出:y=10.0000输入:121 输出:y=110.5000例例3.5输入一个年号,判断它是否是闰年。 判断闰年的算法是:如果此年号能被400整除, 或者它能被4整除而不能被100整除,则它是闰年输出“yes”。否则,它是平年,输出“no”。程序如下:【分析分析】Program ex3_5;Var year : integer;begin readln(year); if (year mod 400=0 ) or (year mod 4=0)and(year mod 1000) then writeln(yes) e
9、lse writeln(no);end.例例3.6 从键盘上读入三个数,按由大到小的顺序把它们打印出来。 这里我们用逐步细化的方法来解此题。先画出“顶层设计”,这个问题分成三个步骤。s1:将a和b比较,将较小的放在b中,较大的放在a中。s2:将a和c比较,将较小的放在c中,较大的放在a中(此时a为最大值)。s3:将b和c比较,将较小的放在c中,较大的放在b中(此时b为次大的数,c为最小数)。【分析分析】程序如下程序如下:Program ex3_6;Var a,b,c,t : integer;begin readln(a,b,c); if ab then /把较大数给a begin t : =a
10、; a : =b; b : =t; /借助第三个变量,交换二个数 end; if ac then /把较大数给a begin t : =a; a : =c; c : =t; end; if b ,b, ,c); /三个if语句后,a,b,c已从大到小有序end.运行结果:输入:3 8 2 输出:8 3 2【上机练习上机练习3.1】w1、假设邮局规定寄邮件时若每件重量在1公斤以内(含1公斤),按1.5元计算邮费,如果超过1公斤时,其超出部分每公斤加收0.8元。请编程序计算邮件收费。w2、输入三个正整数,若能用这三个数作为边长组成三角形,就计算并输出该三角形的面积,否则输出Cant。(组成三角形的
11、条件为:任意两边之和大于第三边)w3、输入一个三位数的整数,将数字位置重新排列,组成一个尽可大的三位数。例如:输入213,重新排列可得到尽可能大的三位数是321。w4、输入一个整数,打印出它是奇数还是偶数。w5、某服装公司为了推销产品,采取这样的批发销售方案:凡订购超过100 套的,每套定价为50元,否则每套价格为80元。编程由键盘输入订购套数,输出应付款的金额数。w6、从键盘读入一个数,判断它的正负。是正数,则输出“+”,是负数,则输出“-”。w7、判断两个数a,b,输出较大数的平方值。w8、某市的士费起步价8元,可以行使3公里。3公里以后,按每公里1.6元计算,输入的士的公里数,请你计算顾
12、客需付费多少元?第二节第二节 IF语句的嵌套语句的嵌套 前面我们学习了IF语句有两种格式,在格式中,条件语句中的语句1或语句2原则上说可以是任何语句,当然也可以是条件语句。当语句1或语句2仍是条件语句时,称为条件语句嵌套。形成嵌套的重要目的是为解决较为复杂的、多种条件出现的问题。 嵌套情况可以分为两种:一是语句1中包含If语句,二是语句2中包含If语句。下面分别来讨论这两种情况下怎么使用条件语句。If语句的嵌套在语句的嵌套在then子句中子句中它的一般形式: If布尔表达式1then If布尔表达式2then 语句21 else 语句22 else 语句12 这是嵌套一个条件语句的情况,其实每
13、条语句还可以再嵌套条件语句,以此类推,形成多层嵌套。由于else后的子句是可省的,而在嵌套时else是与它最近的那个尚未与其他else配对的If . then相匹配。所以内层的else子句不能省,否则将造成逻辑错误,解决的办法就是写一个空语句或者采用复合语句,即放入begin、end中,这样if与else间的配对就很明确了。另外,请同学们在书写程序时,采用缩进式,以增强程序的可读性,要慢慢养成这种风格。 例例3.7 计算下列函数 【分析分析】根据输入的x值,先分成x0与x0两种情况,然后对于情况x0,再区分x是小于0,还是等于0。程序如下:program ex3_7;var x:real; y
14、:integer; begin wrtie(Input x:); readln(x); If x0then y:=1 /x0时,y的值为1 else if x=0then y:=0 /x=0时,y的值为0 else y:=-1; /x=0与x=0,再区分x是大于0,还是等于0,这种结构是在then子句中嵌套if语句。当然程序也可以写成如下形式:program ex;Var x:real; y:integer;begin wrtie(Input x:);readln(x); if x=0then if x0then y:=1 else y:=0 else y=-1; writeln(x=,x:6
15、:2,y=,y);end.例例3.8输入三角形的三边,判断它是否直角三角形,若是则输出“yes”,否则输出“no”,若根本形成不了三角形则输出“not a triangle”。【分析分析】 首先判断用户输入的数据是否能够构成三角形,然后再判断它是不是直角三角形。 Program ex3_8;Var a,b,c : integer;begin readln(a,b,c); if (a+bc) and (b+ca) and (c+ab) then if (a*a+b*b=c*c) or (b*b*+c*c=a*a) or (c*c+a*a=b*b) then writeln(yes) else w
16、riteln(no) else writeln(not a triangle.)end.【上机练习上机练习3.2】w1输入某学生成绩,根据成绩的好坏输出相应评语。如果成绩在90分以上,输出评语:优秀(outstanding)。如果成绩在60分到90分之间,输出评语:良好(satisfactory)。如果成绩不足60分,输出评语:不及格(unsatisfactory)。w2输入三角形的三边,判断它是否是直角三角形。 w3给一个不多于三位的正整数,求出它是几位数,并分别打印出各位上的数字。w4对一批货物征收税金。价格在1万元以上的货物征税5%,在5000元以上,1万元以下的货物征税3%,在1000
17、元以上,5000元以下的货物征税2%,1000元以下的货物免税。编写一程序,读入货物价格,计算并输出税金。w5输入三角形的三个边,判断它是何类型的三角形(等边DB?等腰DY?一般YB?)。w6输入三个数,按由大到小顺序打印出来。w7将字母A、B、C 、D或a、b、c、d对应输出1、2、3、4,其余的字符输出5。w8输入三个数a,b,c,打印出最大者第三节第三节 情况语句(情况语句(CASE语句)语句) 上面我们知道可以用嵌套的if语句实现多分支的选择结构。但是如果分支越来越多时,用嵌套的if语句实现多分支就显得繁杂。当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以用case语句实现
18、。它的选择过程,很象一个多路开关,即由case语句的选择表达式的值,决定切换至哪一语句去工作。因此在分支结构程序设计中,它是一种强有力的手段。在实现多路径分支控制时,用case对某些问题的处理和设计,比用if语句写程序具有更简洁、清晰之感。 情况语句的一般形式:情况语句的一般形式: case of:语句1;:语句2;::语句n; else 语句n+1;end; 其中case、of、end是Pascal的保留字, 表达式的值必须是顺序类型,它可以是整型、布尔型及以后学习的字符型、枚举型和子界型。情况标号表是一串用逗号隔开的与表达式类型一致的常量序列。语句可以是任何语句,包括复合语句和空语句。ca
19、se语句的执行过程语句的执行过程 先计算表达式(称为情况表达式)的值,如果它的值等于某一个常量(称为情况常量,也称情况标号),则执行该情况常量后面的语句,在执行完语句后,跳到case语句的末尾end处。说明说明 情况表达式必须是顺序类型的;情况常量是情况表达式可能具有的值,因而应与情况表达式具有相同的类型;情况常量出现的次序可以是任意的;同一情况常量不能在同一个case语句中出现两次或两次以上;每个分语句前可以有一个或若干个用逗号隔开的情况常量;如果情况表达式的值不落在情况常量的范围内,则认为本case语句无效,执行case语句的下一个语句。Free pascal中增加了一个“否则”的情况,即
20、增加一个else子句,但也是可省的。每个常量后面只能是一个语句或一个复合语句,以分号结束。例例3.10 判断2006年,每个月份的天数。【分析分析】 程序分为:输入月份,计算该月的天 数,输出天数。程序如下:Program ex3_10;Var month,days : integer;begin readln(month); case month of1,3,5,7,8,10,12 : days : =31;4,6,9,11 : days : =30;2 : days : =28;else days : =0; end; if days0 then writeln(days);end.运行结
21、果:输入:10输出:31例例3.11 期未来临了,班长小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元钱的
22、笔少买1支,换成一支6元笔即可;若买完x div 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。 从以上对买笔方案的调整,可以看出笔的数目都是x div 4,因此该方案的确为最优方案。程序如下:程序如下:Program ex3_11;Var a,b,c : integer; /a,b,c分别表示在买笔方案中 ,6元、5元和4元钱笔的数目x,y : integer; /x,y分别表示剩余班费和 买完最多的4元笔后剩的钱begin readln(x); /输入x c : =x div 4;/4元笔最多买的数目 y : =x mod 4;/求买完c支4元笔后剩余的钱数y case y of0 : 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, ,b,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年深圳单招药学专业基础题必刷含答案省卷命题风格
- 2026年四川单招医卫大类考前预测卷含答案
- 2026年山东单招技能拔尖人才免试资格专项练习题含答案
- 2026年上海单招动物医学专业技能模拟卷含答案含疾病诊断
- 2026年福建单招现代农业技术专业职业适应性题库含答案
- 2026年青海单招技能拔尖人才免试资格专项练习题含答案
- 2026年贵州单招学前教育类面试模拟题及应答技巧含结构化问答
- 2026年深圳单招职业适应性测试机考经典题含答案
- 2026年广东单招工业机器人专业高分突破密卷含答案
- 2026年山西单招职业适应性测试机考经典题含答案
- 大一化学期末考试试题及答案
- 2025张家港市辅警考试试卷真题
- 部编版小学三年级语文寒假衔接讲义第4讲:句子复习 (学生版)
- 道路清扫保洁重点路段分析及解决措施
- 民主建国会会史课件
- 鹦鹉热护理措施
- 员工劳务合同书
- 人体形态学(山东联盟)智慧树知到期末考试答案章节答案2024年青岛滨海学院
- 《办公用房租赁合同》范本标准版可打印
- 人机环管安全管理措施
- 大庆一中、六十九中初四上学期期末质量检测物理试题
评论
0/150
提交评论