应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的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. BZOJ1880: [Sdoi2009]Elaxia的路线

    题意:求最短路最长公共距离. 考虑每一条边,如果满足dis(s1,u)+len+dis(v,t1)==dis(s1,t1) && dis(s2,u)+len+dis(v,t2)==di ...

  2. UOJ Test Round 1

    第一题: 题目大意: 给出N个字符串,字符串的前面部分都是字母且都是一样的,后面部分是数字,按照后面的数字排序.N<=10000 解题过程: 1.第一题是真良心,一开始的做法是把后面的数字分离出 ...

  3. Linux 编写c++程序之openssl

    在使用openssl 库前,需检测是否安装openssl , shell 窗口输入:openssl version  , 在openssl 安装完成之后, 可通过vi 编写测试代码 . 本例中附上加密 ...

  4. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  5. ios网络学习------6 json格式数据的请求处理

    ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...

  6. 关于NS2安装的若干问题

    之前就知道这个软件安装起来很恶心,因为毕竟是10年前的软件,可没想到真的好恶心...花了整整一天才装上. 我安装的版本是ns-allinone-2.28,系统版本是ubuntu14.04 其实大部分出 ...

  7. tensorflow2

    # step1 加载包import tensorflow as tf import numpy as np # step2 输入:随机产生数据 # Create 100 phony x, y data ...

  8. ThreadPoolExecutor机制探索-我们到底能走多远系列(41)

    我们到底能走多远系列(41) 扯淡: 这一年过的不匆忙,也颇多感受,成长的路上难免弯路,这个世界上没人关心你有没有变强,只有自己时刻提醒自己,不要忘记最初出发的原因. 其实这个世界上比我们聪明的人无数 ...

  9. 启动运行下载gradle速度太慢,手动添加

    启动运行下载gradle速度太慢,并且容易卡死(感谢群友ˋ狠ㄨ得意提供支持)---国内网络访问地址 我们经常运行项目的时候会需要进行下载gradle,不过由于网络或者和谐的问题经常下载需要花很长时间或 ...

  10. 利用scale9sprite制作动态聊天背景

    先上效果图 首先创建Scale9Sprite然后设置设置一个比较重要的属性 auto pScale9bg = ui::Scale9Sprite::create(); pScale9bg->set ...