应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的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. Qt之WebKit学习之绘图

    void Serial::on_pushButton_clicked() { //scroll(4,0); flag_btn = true; // this->update(); //绘图绘在窗 ...

  2. C# winform程序如何打包64位安装程序

    故事背景: 原来在客户电脑上工作的很正常的程序,在客户将其操作系统从32位换为64位之后,出现了不能正常使用的问题. --------------------------- 解决办法: 1:将解决方案 ...

  3. mysql 日期类型比较

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间       日期格式                 日期范围 ------------ ------ ...

  4. 黑马程序员——【Java基础】——网络编程

    ---------- android培训.java培训.期待与您交流! ---------- 一.网络模型概述 网络模型示意图: 说明: (1)数据的传输:在用户端,应用层的数据,经过层层封包,最后到 ...

  5. IOS 在控制器间跳转实现过渡动画

    已经掌握了CALayer下的CATransition动画在同一个控制器下实现,但是在不同控制器间跳转又该如何实现呢? MyViewController *myVC = [[MyViewControll ...

  6. 修改FastColoredTextBox控件完成选择

    //判断是否是中文        public bool IsChina(char c)        { bool BoolValue = false;            if (Convert ...

  7. source insight 相对路径

    source insight项目 在移动到另外一个地方时,会因为之前是绝对路径而导致,项目中的文件都不可用,需要重新把这些文件添加一遍. 这是个令人讨厌的事情. 解决办法为创建项目时设定为绝对路径.方 ...

  8. poj 3463 最短路与次短路的方案数求解

    Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8968   Accepted: 3139 Descr ...

  9. MXNet设计笔记之:深度学习的编程模式比较

    市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到 ...

  10. 【 D3.js 入门系列 --- 5 】 如何添加坐标轴

    第3节中做了一个图标,但没有为它添加一个相应的坐标轴,这样不知道每一个柱形到底有多长.这一节做一个坐标轴. D3中的坐标轴都是以 svg 图的形式出现的,这也是为什么在第3节中要使用 svg 的方法做 ...