除了用嵌套if语句外,C++中还提供switch语句,又称为“开关语句”,用来实现多分支(多选一)。

switch语句的功能是:根据给定条件从多个分支语句序列中选择一个作为执行入口。

基本格式

switch语句的基本格式如下:
    switch (表达式) {
        case 常量表达式1:《语句序列1》《break;》   //《》中的内容可省
        ……
        case 常量表达式n:《语句序列n》《break;》   //同上,下同
        《default:语句序列》
    }
其中:

  • 表达式——称为“条件表达式”,用作判断条件,取值为整型、字符型、布尔型或枚举型。
  • 常量表达式——由常量构成,取值类型与条件表达式相同。
  • 语句序列——可以是一个语句也可以是一组语句。

执行流程

switch语句的执行流程如下:
(1) 求条件表达式的值,并在常量表达式中找到与之相等的分支作为执行入口;
(2) 顺序执行该分支的语句序列,直到遇到break语句或开关语句的关括号“}”为止;
(3) 当条件表达式的值与所有常量表达式的值均不相等时,若有default分支,则执行其语句序列,否则跳出switch语句,执行后续语句。

重要提示

  • 各个分支(包括default)出现的次序可以任意,通常将default放在最后。
  • 每个常量表达式的取值必须各不相同,否则将引起歧义。
  • 允许多个常量表达式对应同一个语句序列。因为:每一个case分支都只作为开关语句的执行入口,执行完该分支后,若无break语句,还将接着执行其后的所有分支中的语句序列。例如:
        char score;
        cin>>score;
        switch (score) {
            case ′A′: case ′a′:                      //score='A'和score='a' 时,
                cout<<″excellent″; break;    //执行同一语句序列;
            case ′B′: case ′b′:                     //score='B'和score='b' 时,
                cout<<″good″; break;          //执行同一语句序列;
            default: cout<<″fair″;
        }
  • 由上可见:break语句可选。若无break语句,则会出现多个常量表达式共用同一语句序列的情况!利用这一点可以精简程序,但往往容易产生歧义甚至错误结果!因此,为保证逻辑的正确实现,通常每个case 分支都与break语句联用。
  • switch语句的可读性在形式上比嵌套if语句好,但受其条件表达式的取值类型所限,不是所有多选一的问题都可由开关语句完成。不过在有些情况下,可以经过处理使得条件表达式取值符合数据类型的要求,从而用开关语句实现。

应用举例

【例2.9】运输公司对所运货物实行分段计费。设运输里程为s,计费情况如下:设每公里每吨基本运费为p,货物重量为w,折扣为d,总运费f的计算公式为:f=p*w*s*(1-d)。设计程序,当输入p、w和s后,计算运费f。

s<250 不打折扣
250<=s<500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000<=s<3000 10%折扣
3000<=s 15%折扣

#include <iostream>
using namespace std;
int main(){
    int c,s;
    double p,w,d,f;
    cout<<"输入运输单价p,重量w和里程s:"<<endl;
    cin>>p>>w>>s;
    f=0;
    c=s/250;
   switch(c){
      default:d=0.15;f+=p*w*(s-3000)*(1-d);s=3000;
      case 8: case 9: case 10: case 11: d=0.1;f+=p*w*(s-2000)*(1-d);s=2000;
      case 4: case 5: case 6:  case 7: d=0.08;f+=p*w*(s-1000)*(1-d);s=1000;
      case 2: case 3: d=0.05;f+=p*w*(s-500)*(1-d);s=500;
      case 1: d=0.02;f+=p*w*(s-250)*(1-d);s=250;
      case 0: d=0;f+=p*w*s*(1-d);
   }
   cout<<"运输单价:"<<p<<'/t'<<"重量:"<<w<<'/t'<<"里程:"<<s<<endl;
   cout<<"折扣后运费:"<<f<<endl;
   return 0;
}

【例2.10】设计一个计算器程序,实现加、减、乘、除运算。
#include <iostream>
using namespace std;
int main(){
    float num1,num2;
    char op;
   cout<<"输入操作数1,运算符,操作数2:"<<endl;
   cin>>num1>>op>>num2;
   switch(op){
      case '+':  cout<<num1<<op<<num2<<"="<<num1+num2<<endl; break;
      case '-':  cout<<num1<<op<<num2<<"="<<num1-num2<<endl; break;
      case '*':  cout<<num1<<op<<num2<<"="<<num1*num2<<endl; break;
      case '/':  cout<<num1<<op<<num2<<"="<<num1/num2<<endl; break;
      default :  cout<<op<<"是无效运算符!";
   }
   return 0;
}

C++ switch语句详解相关推荐

  1. 教妹学Java(十四):switch 语句详解

    大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.本篇文章通过我和三妹对话的形式来谈一谈"switch 语句". 教妹学 Java,没见过这么有趣的标题吧?&q ...

  2. java中if结构用图表示_Java语法基础之选择结构的if语句、switch语句详解

    [前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...

  3. java switch是什么意思_java switch语句详解

    switch 语句的格式: switch ( 整型或字符型变量 ) { case 变量可能值1 : 分支一; break; case 变量可能值2 : 分支二; break; case 变量可能值3 ...

  4. Java语言Switch语句详解(一)

    Switch语句概述 1.switch语句称为情况选择语句,又称为开关语句. 2.switch是分支语句的一种,用于对多种情况进行不同处理的语句. 3.JDK1.7 之前的switch语句限定对整形数 ...

  5. java switch finally_java switch语句详解

    switch 语句的格式: switch ( 整型或字符型变量 ) { case 变量可能值1 : 分支一; break; case 变量可能值2 : 分支二; break; case 变量可能值3 ...

  6. C语言/C++【switch语句详解(用法、规则、流程图、实例)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.switch语句[C语言] 1.2.C语言中 switch语句的语法 1.3.switch语句遵循规则 1.3.switch ...

  7. C++switch语句详解

    内容引入 讲解先举例,先来看一个例子: #include<iostream> using namespace std; int main(){int num=6;if(num==1){co ...

  8. 【Java技巧 第2章】Java中的switch语句详解

    文章目录 一.switch条件语句介绍 二.switch条件语句格式 1.格式 2.例子 3.扩展 三.更多了解

  9. 单片机c语言常用的语句有几条,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...

最新文章

  1. NIPS论文排行榜出炉,南大周志华5篇论文入选
  2. 【转】Spring 的下载、安装和使用
  3. 用户NT AUTHORITYNETWORK SERVICE登录失败解决方法
  4. sht20温湿度传感器原理图_温湿度传感器在孵化行业怎么应用
  5. linux --常用命令
  6. Spring事件机制Event源码解析(未完待续)
  7. Java会话技术之 —— cookie与session
  8. Python、Java、C#、Perl 创始人聚首,编程语言要变天?
  9. .NET基础拾遗(6)ADO.NET与数据库开发基础
  10. Java中的变量分类_Java十四天零基础入门-Java变量的作用域
  11. 【小记】-007--前端SEO优化
  12. win10原版操作系统安装过程【超详细】
  13. TCP与UDP的区别
  14. 超简单的HIDPI设置
  15. 别看 DNS 污染闹得欢,现在我用 CoreDNS 将它拉清单
  16. gt、lt、ge、le、eq、ne的含义
  17. 欢迎加新浪微博: weibo.com/zhengkarl
  18. 解决WordPress文章页面无法显示的问题
  19. Quartus II 13.1安装时出现的问题
  20. 国外免费电子书资源下载

热门文章

  1. 2005/3.12/snow
  2. 绿地五里桥 设计原型_美的置业集团设计研究院副院长梁林一行考察绿地五里桥项目并莅临宾孚公司调研...
  3. 使用代码实现网站文章发布后自动提交到百度的方法
  4. 淘宝数据包转ECSHOP数据包的操作步骤
  5. 今奥无人机举证_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度
  6. PHP第6周函数上机练习:实战输出2022年日历(含直播视频)
  7. 软阈值(Soft Thresholding)函数
  8. 如何在保护用户隐私的同时实现精准广告投放?
  9. Learn Beautiful Soup(3)——使用Beautiful Soup进行查找
  10. 突然无法连接虚拟机:ifconfig中没有ens33