第六课 CASE语句、判断结构的应用 第三节 case语句 case 选择表达式 of 常量表1: 语句1; 常量表2: 语句2; …… 常量表n: 语句n end case语句格式2: case 选择表达式 of 常量表1: 语句1; 常量表2: 语句2; …… 常量表n: 语句n; else 语句n+1 end 选择表达式的值只能是序数类型,即为整数、字符、布尔以及用户自定义的枚举和子界类型。 case语句执行与表达式值相匹配的case常数所指向的那条语句。如果没有相匹配的值,则执行else部分或什么也不做。在case语句中,else前面的语句末尾有分号,与if-then-else语句中分号的用法不同。
第六课 CASE语句、判断结构的应用 例4-6 输出一位数字的英文拼法。 1,2,3,4,5,6,7,8,9 例4-6 输出一位数字的英文拼法。 1,2,3,4,5,6,7,8,9 one,two,three,four,five,six,seven,eight,nine
第六课 CASE语句、判断结构的应用 例4-6 输出一位数字的英文拼法。 program example4_6; 例4-6 输出一位数字的英文拼法。 program example4_6; Var n: integer; Begin write('Input the number: '); readln(n); case n of 0: writeln(’Zero’); 1: writeln(’One’); 2: writeln(’Two’); 3: writeln(’Three’); 4: writeln(’Four’); 5: writeln(’Five’); 6: writeln(’Six’); 7: writeln(’Seven’); 8: writeln(’Eight’); 9: writeln(’Nine’) end {case} end.
第六课 CASE语句、判断结构的应用 例4-7 输入两个实数a,b,并输入一个运算符, 求两个实数的和、差、积、商。 a,b + - * /
第六课 CASE语句、判断结构的应用 例4-7 求两个实数的和、差、积、商。 var a,b,w : real; 例4-7 求两个实数的和、差、积、商。 var a,b,w : real; operator : char; begin write(’Enter two operands: ’); readln(a,b); write(’Enter operator: ’); readln(operator); case operator of ’+’ : w:=a+b; ’-’ : w:=a-b; ’*’ : w:=a*b; ’/’ : w:=a/b end; writeln(w) end. 例4-7 求两个实数的和、差、积、商。 a,b + - * /
第六课 CASE语句、判断结构的应用
第六课 CASE语句、判断结构的应用 例4-8 根据学生的成绩给予对应的等第,对应的关系如下表所示。 成绩 等第 90~100 A Var s : integer; ch : char; Begin write(‘Input the score : '); readln(s); if (s>=0) and (s<=100) then begin case s div 10 of 10,9 : ch := 'A'; 8 : ch := 'B'; 7,6 : ch := 'C'; else ch := 'D' end;{case} writeln(s, '--', ch) end else writeln('The score is elegal'); end. 例4-8 根据学生的成绩给予对应的等第,对应的关系如下表所示。 成绩 等第 90~100 A 80~89 B 60~79 C 60以下 D
第六课 CASE语句、判断结构的应用 例4-9 计算运输费用,距离愈远,折扣越大。输入每公里吨运价,货物重量及运输距离,求出实际运费。折扣如下表所示。 运输距离s 折扣 s<250(公里) 0% 250≤s<500 2% 500≤s<1000 8% 1000≤s<2000 10% 2000≤s 15% 设每公里吨运价为p,重量为w,距离为s,折扣为d,运费为f,则f为p*w*s*(1-d)。本例的case语句中使用了子界形式4..7来代替4,5,6,7。
第六课 CASE语句、判断结构的应用 var p,w,d,s,f : real; c : integer; begin write(‘Input price : '); readln(p); write(‘Input weight : '); readln(w); write(‘Input distance : '); readln(s); if s >= 2000 then c := 8 else c := trunc(s/250); case c of 0 : d := 0; 1 : d := 0.02; 2,3 : d := 0.08; 4..7 : d := 0.1; 8 : d := 0.15; end;{case} f := p*w*s*(1-d); writeln('freight = ', f:15: 4) end. 例4-9 计算运输费用,距离愈远,折扣越大。输入每公里吨运价,货物重量及运输距离,求出实际运费。折扣如下表所示。 运输距离s 折扣 s<250(公里) 0% 250≤s<500 2% 500≤s<1000 8% 1000≤s<2000 10% 2000≤s 15% 设每公里吨运价为p,重量为w,距离为s,折扣为d,运费为f,则f为p*w*s*(1-d)。本例的case语句中使用了子界形式4..7来代替4,5,6,7。
第六课 CASE语句、判断结构的应用 第四节 选择结构的应用 本节通过四个应用实例来说明用if语句和case语句进行选择结构程序设计的方法。 第四节 选择结构的应用 本节通过四个应用实例来说明用if语句和case语句进行选择结构程序设计的方法。 例4-10 读入两个整数到变量a和b中,如果a>b,就交换变量a和b的值。 分析 为了实现两个变量的值的交换,需要3条赋值语句。这3条赋值语句在本例中需要使用复合语句的形式来实现。 var a,b,t : integer; begin write(‘Input a,b : ‘); readln(a,b); if a > b then begin t := a; a := b; b := t; end; writeln(a:8,b:8); readln; end.
第六课 CASE语句、判断结构的应用 例4-11 读入三个整数,按由小到大的顺序输出。 分析 例4-11 读入三个整数,按由小到大的顺序输出。 分析 使用多次比较和交换的方法来排序。设3个需要排序的整数放入变量a,b和c中,比较和交换的步骤如下表所示。经过3次比较和交换,变量a,b,c按由小到大的顺序排列。当对多于3个数进行排序时,也可以使用解决本题的思路。 步骤 比较 交换 结果 1 当a>b时 a与b a≤b 以上条件不满足 --- 2 当a>c时 a与c a≤c 3 当b>c时 b与c b≤c
第六课 CASE语句、判断结构的应用 var a,b,c,t : integer; begin readln(a,b,c); if a > b then begin t := a; a := b; b := t; end; if a > c then begin t := a; a := c; c := t; if b > c then begin t := b; b := c; c := t; writeln(a:8,b:8,c:8); readln; end.
第六课 CASE语句、判断结构的应用 例4-12 判断字符ch是标识字符(字母或下划线)、数字符还是专用字符。 分析 本题用case语句来区分三种情况。用’A’..’Z’,’a’..’z’,’_’作为判断ch是标识字符的条件,用’0’..’9’作为判断ch是数字的条件,不是以上两种情况,则为特殊字符。
第六课 CASE语句、判断结构的应用 例4-12 判断字符ch是标识字符(字母或下划线)、数字符还是专用字符。 分析 本题用case语句来区分三种情况。用’A’..’Z’,’a’..’z’,’_’作为判断ch是标识字符的条件,用’0’..’9’作为判断ch是数字的条件,不是以上两种情况,则为特殊字符。 var ch : char; begin write(’Enter a character: ’); readln(ch); case ch of ’A’..’Z’,’a’..’z’,’_’ : writeln(ch,’ is an identifier character.’); ’0’..’9’ : writeln(ch,’ is a decimal digit.’); else writeln(ch, ’ is a special character.’); end; readln; end.
第六课 CASE语句、判断结构的应用 例4-13 输入两个正整数a,b。b最大不超过三位数,a不超过二位数。使a在左,b在右,拼接成一个新的数c。例如a=7,b=25,则c为725。若a=22,b=987,则c为22987。 分析 当b为一位数时, c=a*10+b 当b为二位数时, c=a*100+b 当b为三位数时, c=a*1000+b 因此,求c的公式可以归纳为c=a*k+b,其中,k的值由b的位数决定,可以是10,100或1000。本题用case语句来区分b的位数,根据b的位数,给b赋10、100或1000等不同的值。
第六课 CASE语句、判断结构的应用 var a,b,c,k:longint; begin write('Input a and b: '); readln(a,b); case b of 1..9: k:=10; 10..99: k:=100; 100..999: k:=1000 end; c := a*k+b; writeln(c); readln; end. 例4-13 输入两个正整数a,b。b最大不超过三位数,a不超过二位数。使a在左,b在右,拼接成一个新的数c。例如a=7,b=25,则c为725。若a=22,b=987,则c为22987。 分析 当b为一位数时, c=a*10+b 当b为二位数时, c=a*100+b 当b为三位数时, c=a*1000+b 因此,求c的公式可以归纳为c=a*k+b,其中,k的值由b的位数决定,可以是10,100或1000。本题用case语句来区分b的位数,根据b的位数,给b赋10、100或1000等不同的值。
第六课 习题 4.三条直线段的长度是整数。用这三条直线段是否能构成一个三角形;若能则确定是否能构成直角三角形。输出结果为以下三种情况之一:Can form a triangle(能构成三角形)、Can form a right triangle(能构成直角三角形)和Can not form a triangle(不能构成三角形)。 5.在练习题4的基础上,编写能判断构成三角形、直角三角形、等腰三角形、等边三角形、等腰直角三角形的程序。 6.填空,将以下if语句改写成case语句。 if s<60 then m:=1 else if s<70 then m:=2 else if s<80 then m:=3 else if s<90 then m:=4 else s<=100 then m:=5; 改为 case 【 填空1 】 of 【 填空2 】: m:=1; 【 填空3 】: m:=2; 【 填空4 】: m:=3; 【 填空5 】: m:=4; 【 填空6 】: m:=5 end;
第六课 习题 7.从键盘输入一个0至6的整数,用英文输出对应是星期几。 (0-Sunday,1-Monday,2-Tuesday,3-Wednesday,4-Thursday,5-Friday,6-Saturday) 8.幼儿园只收2至6岁的小孩。2~3岁入小班,4岁入中班,5~6岁入大班。输入年龄,求出入什么班。 9.某旅游景点门票价格为每人5元,但团体可以优惠。人数超过20则优惠10%;人数超过40则优惠15%;人数超过80则优惠20%;人数超过120则优惠30%。输入团体人数,求出总的门票价格。 10.输入年、月、日,计算该天是星期几?