C语言——switch 语句的基本格式是什么?

一、问题

C语⾔中有两个构成选择结构的语句,即构成双分⽀的让if..else 语句和构成多分⽀的 switch..case 语句,switch 语句的基本格式是什么?

二、解答

cpp 复制代码
switch (表达式)
{
case 常量表达式 1:
    语句1;
    break;

case 常量表达式 n:
    语句n;
    break;

default:
    语句 n + 1;
}

switch 后的表达式是任意类型的表达式,case 后的常量表达式只能是整型或字符型。 它的执⾏过程是:

先求 switch 后的"表达式"的值。然后在后⾯的多个 case 中查找此值,如果找到相等的,则执⾏下⾯的对应语句,直到遇到⼀个 break 为⽌。如果没有 break 的话,将会执⾏到下⼀个 case下的语句。如果 switch 表达式的计算结果与所有 case 均不相等,则执⾏ default 后的语句。default 也可以没有,即都不相等什么也不执⾏。

cpp 复制代码
脚下留神:
    在 switch 语句中,当找到与 swith 表达式相等的 case 时,执⾏ case 下的语句。
case 下的所有语句都执⾏完成后,如果⼀直没有 break,那么程序将会执⾏到下⼀个 case,
⽽不管它的值是否与 switch 表达式相等,即多个 case 之间不具有天然的互斥性。要想使程
序执⾏完⼀个 case后的语句,⽽不进⼊下⼀个 case,必须使⽤ break 语向,使程序退出 
switch 结构。这样,后⾯的 case 也就不执⾏了。

看以下程序的执⾏结果:

cpp 复制代码
#include <stdio.h>
int main()
{
    int a, b;
    a = 4;
    switch (a % 2)
    {
    case 0:
        b = 10;
    case 1:
        b = 20;
    }
}

以上程序执⾏的结果是20。 4%2 结果是0,应该显示 10 才对呀,怎么会是20呢?原因就在于赋值语句 b=10 执⾏之后,因为没有 break 语句,那就再向下执⾏,进⼊ case 1,再执⾏ b=20,因此最后的结果显示为 20。要想让它能够显示 10,需要在 b=10 的后⾯,case 1 的前⾯加上⼀⾏"break;"(包括分号;),这样就可以得出10了。

三、总结

switch 语句不具备互斥功能,给写程序添加了⼀个⿇烦,即再多写⼀个 break,但它也为多个 case 共⽤⼀组执⾏语句提供了条件。

相关推荐
你住过的屋檐6 分钟前
【Java】虚拟线程详解
java·开发语言
霍理迪7 分钟前
JS—事件高级
开发语言·javascript·ecmascript
范特西.i10 分钟前
QT聊天项目(8)
开发语言·qt
烟花落o11 分钟前
栈和队列的知识点及代码
开发语言·数据结构·笔记·栈和队列·编程学习
crescent_悦17 分钟前
C++:Have Fun with Numbers
开发语言·c++
mjhcsp20 分钟前
C++轮廓线 DP:从原理到实战的深度解析
开发语言·c++·动态规划
Z9fish22 分钟前
sse哈工大C语言编程练习23
c语言·数据结构·算法
额,不知道写啥。33 分钟前
P5354 [Ynoi Easy Round 2017] 由乃的 OJ
java·开发语言·算法
代码无bug抓狂人34 分钟前
C语言之单词方阵——深搜(很好的深搜例题)
c语言·开发语言·算法·深度优先
青桔柠薯片37 分钟前
Linux软件编程:线程和进程间通信
linux·开发语言·线程·进程