应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,甚至凌乱。为方便实现多情况选择,C++提供了一种switch开关语句。
 
一、语句格式
switch (表达式) {
  case 常量表达式1:
    语句序列1;
    break;
  case 常量表达式2:
    语句序列2;
    break;
  …
  case 常量表达式n:
    语句序列n;
    break;
  default:
    语句序列n+1;
}
 
语句的执行过程:
1、计算出switch后面圆括号内表达式的值,假定为 M,若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值;
2、依次计算出每个case后常量表达式的值,假定它们为M1,M2…,同样,若它们的值不是整型,则自动转换为整型;
3、让 M 依次同 M1,M2…进行比较,一旦遇到 M 与某个值相等,则就从对应标号的语句开始执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。
 
注意:
1、语句中可以使用一次或多次case标号,但只能使用一次default标号;default后面的语句末尾可以不必写break,或者省略整个default部分。
2、每个case或default后,可以包含多条语句,不需要使用“{”和“}”括起来。
3、多个case标号也允许使用在同一个语句序列的前面。
 
二、格式举例
1、
switch (a) {
  case 1: x++;break;
  case 2: y++;break;
  case 3: z++;break;
  default: cout<<"error";
}
2、
switch (ch) {
  case 'a':
  case 'A':
    d1=(x+y)/2;
    d2=x*y-2;
    break;
  case 'b':
  case 'B':
    d1=(a+b)/2;
    d2=a*b-2;
    break;
  default:
    cout<<"input error!";
}
 
例1:根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。
#include<iostream>
using namespace std;
int main()
{
  int d;
  cin>>d;
  switch(d)
  {
    case 1: cout<<"Mon"<<endl;break;
    case 2: cout<<"Tue"<<endl;break;
    case 3: cout<<"Wed"<<endl;break;
    case 4: cout<<"Thu"<<endl;break;
    case 5: cout<<"Fri"<<endl;break;
    case 6: cout<<"Sat"<<endl;break;
    case 7: cout<<"Sun"<<endl;break;
    default: cout<<"input error!"<<endl;
  }
  return 0;
}
 
例2:判断2016年每个月份的天数。
#include<iostream>
using namespace std;
int main()
{
  int m,d;
  cin>>m;
  switch(m)
  {
    case 2: d=29;break;
    case 4:
    case 6:
    case 9:
    case 11:d=30;break;
    default: d=31;
  }
  cout<<d<<endl;
  return 0;
}
 
例3:期末来临了,班长小Q决定将剩余班费x元钱(x>7)用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价分别为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请你编一程序,帮小Q制订出一种买笔的方案。
 
分析:要买尽量多的笔,即都买4元的笔肯定可以买最多支笔,因此最多可以买的笔为x/4支。由于要把钱用完,帮我们可以按以下方法将钱用完:若买完x/4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成1支5元的笔即可;若买完x/4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成1支6元的笔即可;若买完x/4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成1支5元钱的笔和1支6元钱的笔即可。
#include<iostream>
using namespace std;
int main()
{
  int a,b,c,x,y;
  cin>>x;
  c=x/4;
  y=x%4;
  switch(y)
  {
    case 0: a=0;b=0;break;
    case 1: a=0;b=1;c--;break;
    case 2: a=1;b=0;c--;break;
    case 3: a=1;b=1;c-=2;
  }
  cout<<a<<' '<<b<<' '<<c<<endl;
  return 0;
}
 
 
作业:
1、zerojudge:a053、d460、a244
 
2、输入年、月,输出该月的天数。(使用switch语句)
3、某商店打折促销,原价200元以下(含200元)的商品打九五折;200元以上到2000元(含2000元)的商品打九折;2000元以上的商品打八八折。输出商品原价,输出打折后的价格。
4、某旅游景点门票价格为每人5元,但团体可以优惠。人数超过20则优惠10%;人数超过40则优惠15%;人数超过80则优惠20%;人数超过120则优惠30%。输入团体人数,输出总的门票价格。

switch语句的更多相关文章

  1. switch语句的妙用

    switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...

  2. 106运用SWITCH语句打印星期几的单词

    package com.chongrui.test;/*运用SWITCH语句打印星期几的单词 * */ public class TypeConvertion { public static void ...

  3. 通过goto语句学习if...else、switch语句并简单优化

    goto语句在C语言中实现的就是无条件跳转,第二章一上来就介绍goto语句就是要通过goto语句来更加清楚直观的了解控制结构. 我理解的goto语句其实跟switch语句有相似之处,都是进行跳转.不同 ...

  4. Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)

    ---------------------if语句介绍--------------------------------------------------- class IfDemo { public ...

  5. Switch语句的case穿透

    Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...

  6. ECMA中的switch语句

    switch借鉴自其他语言,但也有自己的特色. 1.可以在switch语句中使用任何数据类型(数值.字符串.对象等),很多其他语言中只能使用数值. 2.每个case的值不一定是常量,可以是变量或者表达 ...

  7. switch语句下的变量声明和定义

    switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...

  8. 透过IL看C#:switch语句(转)

    透过IL看C# switch语句(上) 摘要: switch语句是 C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.本文介绍了当向 switch语句中传入不同类型的参数时,编译器为其生 ...

  9. java switch语句注意的事项

    1.switch语句使用的变量只能是byte.char.short.string数据类型. 2.case后面gender数据必须是一个常量. 3.switch的停止条件: switch语句一旦比配上了 ...

随机推荐

  1. QML的一些基础的区分

    什么时候用Item什么时候用Rectangle? 什么时候用Row什么时候用RowLayout? 这2个问题经常会让人迷糊. 什么时候用Item,就是你要做一个组件,这个组件是一个复合的组件,组件有部 ...

  2. 使用OpenFileDialog会更改默认程序目录

    这个问题可能只有在特定的程序中会发现:当我们在程序中使用相对路径时是依赖于当前目录的.所以在使用类似代码: XElement rootNode = XElement.Load(@"zips/ ...

  3. 自定义控件之 TextBox

    //textbox typevar boxType = { WaterMarkBox: 0, ValidateBox: 1, SearchBox: 2}var textBoxObj = functio ...

  4. hdu 4642 Fliping game

    http://acm.hdu.edu.cn/showproblem.php?pid=4642 对于给定的矩阵 操作步数的奇偶性是确定的 奇数步Alice赢 否则Bob赢 从左上角向右下角遍历遇到1就进 ...

  5. python leetcode 日记--231. Power of Two

    题目: Given an integer, write a function to determine if it is a power of two. class Solution(object): ...

  6. Ubuntu gmake: command not found

    由于ubuntu上取消了gmake(GUNmake)的而全部使用make代替.所以此问题的解决方式是有两种: 1.makefile中 gmake用make代替: 2.创建一个make的gmake连接: ...

  7. java 泛型详解

    public class Base<T>{    Class classType=T.class;    public Base(){     //想在这里 得到T的类对象 赋值给 cla ...

  8. phpdesigner 的配置

    PHPDesigner 1.语言点击“view->language->”选择2.配置localhost点击“工具->配置->调试->本地”local服务器路径写自己的工作 ...

  9. mysql linux终端登陆

    mysql -uroot -hlocalhost -psorry 设置远程登录 用户名及密码 GRANT ALL PRIVILEGES ON *.* TO root@"%" IDE ...

  10. webmin-1.810 安装

    Installing the tar.gz file Before downloading Webmin, you must already have Perl 5 installed on your ...