应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的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. ASP.NET中使用代码来进行备份和还原数据库

    ASP.NET中使用代码来进行备份和还原数据库  SQL代码: 1 2 3 4 5 -- 备份数据库 backup database db_CSManage to disk='c:\backup.ba ...

  2. bzoj 3171: [Tjoi2013]循环格

    #include<cstdio> #include<iostream> #include<cstring> #define M 10000 #define inf ...

  3. CSS样式选择器优先级

    CSS样式选择器分为4个等级,a.b.c.d,可以以这四种等级为依据确定CSS选择器的优先级. 1.如果样式是行内样式(通过Style=””定义),那么a=12.b为ID选择器的总数3.c为Class ...

  4. <Java中的继承和组合之间的联系和区别>

    //Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...

  5. Objective-C学习笔记-第一天(1)

    .h头文件,用于声明一些公开的属性.方法.头文件一般不会放太多的东西,没必要暴露太多接口,私有和封装. .m主文件,用于实现.h文件中的方法,以及一些其它的方法. -(返回值)方法名参数1名称:(参数 ...

  6. poj3159 差分约束 spfa

    //Accepted 2692 KB 1282 ms //差分约束 -->最短路 //TLE到死,加了输入挂,手写queue #include <cstdio> #include & ...

  7. Java String字符串补0或空格

    package cn.com.songjy; import java.text.NumberFormat; //Java 中给数字左边补0 public class NumberFormatTest  ...

  8. BFC学习笔记

    BFC:块级格式化上下文 占用某一块的空间位置,主要用于清除内部浮动(防止因浮动脱离文档流引起的布局错乱),margin值的嵌套(之前写过一篇关于margin-top嵌套的解决方法),三列布局(占用空 ...

  9. leetcode36. Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  10. Linux常用命令大全(share)

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...