i信息学奥赛

加入QQ群:1025629106,或关注微信公众号:i信息学奥赛,获取更多学习资源。

导航

case语句

Posted on 2016-12-13 13:02  shnoip  阅读(1774)  评论(0编辑  收藏  举报

case语句是多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择结构。例如,学生成绩分类(90分以上为A,……);人口统计分类(按年龄分为老、中、青、少、幼)等。当然这些都可以用if语句的嵌套形式来实现,但如果分支较多,则嵌套的if语句层数太多,程序冗长而降低了可读性,也给修改带来了极大的困难。Pascal语言提供了case语句可直接处理多分支选择,case语句由一个选择表达式和众多可选择的操作序列组成,运行时根据表达式的求值结果,在众多的分支中选取一个分支执行。

case语句的一般形式如下:
case 表达式 of
  常数表1: 语句1;
  常数表2: 语句2;
  常数表3: 语句3;
  …            …
  常数表n: 语句n;
  else     语句n+1;
end;

说明:
1、case的英文意义有“情况”、“情形”之意,我们可能这样理解case语句:当表达式的值与常数表中某一值相匹配,则执行其后面的相应语句;如果常数表中没有与表达式相匹配的常数,则执行else后面的相应语句。
2、else可以省略,此时若无与表达式的值相匹配的常数表时程序将向下运行并跳出case语句。
3、保留字end与保留字case成对出现,这个end表示case语句的结束。
4、表达式的类型通常是整形与字符型,也可以是枚举型和子界型
5、常数表是一个或一组常量,其类型与表达式类型一致,常数表行的次序是任意的,不一定要按从小到大或从大到小的次序排列,通常表可能性大的常数表列于前面,以加快程序运行的速度。

例1:输入一个个位数字,输出这个数字的英文拼法
var
  n:byte;
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;
end.

例2:输入二个实数及运算符,输出它们的和、差、积、商
var
  a,b,w:real;
  op:char;
begin
  write('Input a,b: ');
  readln(a,b);
  write('Input operator: ');
  readln(op);
  case op of
    '+': w:=a+b;
    '-': w:=a-b;
    '*': w:=a*b;
    '/': w:=a/b;
  end;
  writeln(w:0:2);
end.

例3:根据学生的成绩给予相应的分数等级,对应关系如下:
90-100 A;80-89 B;60-79 C;60分以下 D
var
  s:byte;
  ch:char;
begin
  write('Input the score: ');
  readln(s);
  case s div 10 of
    10,9: ch:='A';
       8: ch:='B';
     7,6: ch:='C';
     else ch:='D';
  end;
  writeln(s,'-->',ch);
end.

 

作业:

1、zerojudge:a053、d460、a244

2、输入年、月,输出该月的天数。(使用case语句)
3、某商店打折促销,原价200元以下(含200元)的商品打九五折;200元以上到2000元(含2000元)的商品打九折;2000元以上的商品打八八折。输出商品原价,输出打折后的价格。
4、某旅游景点门票价格为每人5元,但团体可以优惠。人数超过20则优惠10%;人数超过40则优惠15%;人数超过80则优惠20%;人数超过120则优惠30%。输入团体人数,输出总的门票价格。