三、C语言中的分支与循环—switch语句(4)分支结构 完

本章分支结构的学习内容如下:

三、C语言中的分支与循环—if语句 (1)

三、C语言中的分支与循环—关系操作符 (2)

三、C语言中的分支与循环—条件操作符 与逻辑操作符(3)

三、C语言中的分支与循环—switch语句(4)分支结构 完


本章循环结构的学习内容如下:

三、C语言中的分支与循环—while循环 (5)

三、C语言中的分支与循环—for循环 (6)

三、C语言中的分支与循环—do-while循环 (7)

三、C语言中的分支与循环—break和continue语句(8)循环结构 完  


1. switch基本语法

 在C语言中,switch 语句是一种多分支选择结构,用于基于不同的条件执行不同的代码块。

switch (expression) {case constant1:// 代码块 1break;case constant2:// 代码块 2break;...default:// 默认代码块
}

1)switch (expression)

这是 `switch` 语句的开始,其中 `expression` 是一个返回整数类型值的表达式(通常是 `int` 或 `char` 类型)。

2)case constantX:   

这些是不同的情况标签。`constantX` 必须是一个整型常量表达式,用于与 `switch` 中的 `expression` 进行比较。如果 `expression` 的值与 `case` 标签的值匹配,则执行该 `case` 语句下的代码块。

3)  break; 

`break` 语句用于结束当前 `case` 的执行,并跳出整个 `switch` 结构。如果没有 `break`,程序会继续执行下一个 `case` 的代码(即使条件不匹配),这被称为“穿透”(fall-through)。

4)  default:   

这是可选的,默认情况下的代码块。如果 `expression` 的值与任何 `case` 标签都不匹配,将执行 `default` 下的代码。`default` 情况不需要 `break` 语句,因为它本身就是 `switch` 语句的最后一部分。

5)  代码练习1 

int main()
{int num = 3;switch (num) {case 1:printf("Number is 1\n");break;case 2:printf("Number is 2\n");break;case 3:printf("Number is 3\n");break;default:printf("Number is not 1, 2, or 3\n");}return 0;
}

- `case` 标签的值必须是唯一的。
- `switch` 语句中的 `expression` 必须是整数类型,如 `int`、`char`。
- 不要忘记在每个 `case` 之后使用 `break`,除非你有意想要实现穿透行为。



6)代码练习2,与if-else结构的区别

 练习:输⼊任意⼀个整数值,计算除3之后的余数

if-else

//练习:输⼊任意⼀个整数值,计算除3之后的余数
int main()
{int num = 0;scanf("%d", &num);if (num % 3 == 0)printf("%d整除3,余数为0\n", num);else if (num % 3 == 1)printf("%d整除3,余数为1\n", num);else if (num % 3 == 2)printf("%d整除3,余数为2\n", num);return 0;
}

switch

特别注意

1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
int main()
{int num = 0;scanf("%d", &num);switch (num % 3) {case 0 :printf("%d整除3,余数为0\n", num);break;case 1 :printf("%d整除3,余数为1\n", num);break;case 2 :printf("%d整除3,余数为2\n", num);break;}return 0;
}

7) `switch` 语句中的 `expression` 必须是整数类型,如 `int`、`char`。具体示例

字符是以ASCII码形式存储的,ASCII码是整数,所以字符属于整型家族

case后面必须是整型常量表达式,比如case 1:     case 1+3:      case'm':  等等,不能是case m:。

2. break 语句与穿透行为

switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。

1) 需要利用 'break' 实现分支功能的情况示例1

如果我们没有在上面练习题的代码写上break语句,看看结果如何
我们可以看到没有 `break`,程序会继续执行下一个 `case` 的代码(即使条件不匹配),这种现象被称为“穿透”。

2) 需要利用 'break' 实现分支功能的情况示例2

//练习输⼊⼀个1~7的数字,打印对应的星期几

int main()
{int day = 0;scanf("%d", &day);switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期日\n");break;default:printf("输入出错\n");}return 0;
}

3)刻意的穿透行为

如果需求发生变化,变为:

1. 输⼊1-5,输出的是“工作日”;

2. 输⼊6-7,输出“休息日”

int main()
{int day = 0;scanf("%d", &day);switch (day) {case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入出错\n");}return 0;
}

3.switch语句中的default

在使用 switch 语句的时候,我们经常可能遇到⼀种情况,比如  switch 后的表达式中的值无法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入 default 子句。
在上面的代码中,我们已经了解到了default:的用法,比如当我们输入了除了1-7以外的数,我们可以打印显示输入出错。

4.switch语句中的case和default的顺序问题

顺序不影响功能:case和 default 的顺序不会影响 switch 语句的功能。无论它们出现的顺序如何,只要满足匹配条件的 case 就会被执行。如果没有任何 case 匹配,且存在 default 标签,则执行 default 块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/230031.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb之Mybatis的基础操作的详细解析

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除 …

1.3 day3 IO进程线程

使用标准IO进行文件拷贝 #include <myhead.h> int main(int argc, const char *argv[]) {if(argc!3)//外部传参{printf("input error\n");}//定义两个文件指针FILE *fpNULL;FILE *cfpNULL;if((fpfopen(argv[1],"r"))NULL){perror("fopen error…

学习Vue单文件组件总结

今天主要学习了组件实例对象的一个重要内置关系和单文件组件。先说一下实例对象的内置关系&#xff0c;在这里要对JS中的原型链有一定的基础&#xff0c;Vue构造函数的prototype原型指向的是Vue的原型对象&#xff0c;new出来的Vue实例对__proto__同样指向的是Vue的原型对象&am…

条款16:成对使用 new 和 delete 时要采用相同形式

下面程序的行为是未定义的。至少&#xff0c;stringArray指向的100个string对象中有99个不太可能被正确地析构。 被delete的指针指向单个对象还是一个对象数组&#xff1f;内存数组通常包括数组的大小&#xff0c;delete可以知道需要调用多少个析构函数。 使用delete时使用了方…

案例088:基于微信小程序的校车购票平台设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Hexo 部署 Github Pages, Github Actions自动部署

想整个静态的博客部署在github pages 历经两天的折磨终于是摸索成功了&#xff0c;官网的文档太简陋了&#xff0c;很多东西没说清楚。 欢迎大家访问我的博客&#xff01; CanyueThis is Canyues blog.https://mobeicanyue.github.io/ 最终实现的效果&#xff0c;一个项目仓库…

三菱plc的点动控制循环(小灯闪烁,单控气缸循环)

以为前一段时间小编做了一个气缸定时循环的程序&#xff0c;根据程序有不足之处&#xff0c;所以小编写下这篇文章&#xff0c;将网络上的plc小灯控制进行总结&#xff01;如果对你有帮助&#xff0c;不要忘了点赞收藏&#xff01;如果有更加好的梯形图&#xff0c;欢迎评论&am…

【Bootstrap学习 day7】

Bootstrap按钮 按钮样式 使用.btn相关类实现 <button type"button" class"btn">基本按钮</button> <button type"button" class"btn btn-primary">主要按钮</button> <button type"button" cl…

Linux学习记录——삼십삼 http协议

文章目录 1、URL2、http协议的宏观构成3、详细理解http协议1、http请求2、http响应1、有效载荷格式2、有效载荷长度3、客户端要访问的资源类型4、修改响应写法5、处理不同的请求6、跳转 3、请求方法&#xff08;GET/POST&#xff09;4、HTTP状态码&#xff08;实现3和4开头的&a…

案例072:基于微信小程序的会议发布与预约系统的设计与开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Python 箱线图的绘制(Matplotlib篇-13)

Python 箱线图的绘制(Matplotlib篇-13)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

【解决|三方工具】导入 XChart 后提示丢失关于 TMPPro 工具引用

开发平台&#xff1a;Unity 2021 版本 插件版本&#xff1a;XChart 3.0&#xff1a;官方文档 - https://github.com/XCharts-Team/XCharts   问题描述 导入 XChart 插件至 Unity 中出现 目录&#xff1a;Component、Theme 等提示丢失 TMPPro&#xff08;TextMeshPro 工具&…

面向对象编程(高级)

面向对象编程&#xff08;高级&#xff09; 1、类变量和类方法 &#xff08;1&#xff09; 概念 类变量&#xff0c;也称为静态变量&#xff0c;是指在类级别声明的变量。它们与特定类相关联&#xff0c;而不是与类的实例&#xff08;对象&#xff09;相关联。每个类变量只有…

vue3中pinia的使用及持久化(详细解释)

解释一下pinia&#xff1a; Pinia是一个基于Vue3的状态管理库&#xff0c;它提供了类似Vuex的功能&#xff0c;但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中&#xff0c;并且将store的行为和数据暴露为可响应的API&#xff0c;从而实现数据&#…

LVGL 在framebuffer设备上的移植

LVGL 在framebuffer设备上的移植 ItemDescDate2023-12-31Authorhongxi.zhuplatformNXP I.MX6ULLLCDSPI TFTLCD NV3030B 文章目录 LVGL 在framebuffer设备上的移植一、LVGL源码获取二、源码修改适配三、编译&运行补充 一、LVGL源码获取 新建lvgl_imx6ull文件夹&#xff0c…

Upload-lab(pass1~2)

Pass-1-js检查 这里检验 因为是前端js校验,所以只用绕过js前端校验 用burp抓包修改文件类型 写一个简易版本的php Pass-2-只验证Content-type 仅仅判断content-type类型 因此上传shell.php抓包修改content-type为图片类型&#xff1a;image/jpeg、image/png、image/gif

Shell脚本学习笔记

1. 写在前面 工作中&#xff0c;需要用到写一些shell脚本去完成一些简单的重复性工作&#xff0c; 于是就想系统的学习下shell脚本的相关知识&#xff0c; 本篇文章是学习shell脚本整理的学习笔记&#xff0c;内容参考主要来自C语言中文网&#xff0c; 学习过程中&#xff0c;…

IPA打包过程中的Invalid Bundle Structure错误如果解决

在iOS应用程序开发中&#xff0c;打包和发布应用程序是一个必要的步骤。有的时候在打包的过程中可能会遇到一些错误&#xff0c;其中一个比较常见的错误是"Invalid Bundle Structure"。这个错误通常意味着应用程序的文件结构不正确&#xff0c;而导致的无法成功打包应…

java仓库管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web仓库管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

macos下php 5.6 7.0 7.4 8.0 8.3 8.4全版本PHP开发环境安装方法

在macos中如果使用brew 官方默认的core tap 只可以安装官方最新的稳定版PHP, 如果想要安装 php 5.6 或者 php 8.4版本的PHP就需要使用第三方的tap , 这里分享一个比较全面的brew tap shivammathur/php 这个tap里面包含了从php5.6到最新版php8.4的所有可用最新版本PHP, 而且是同…