三、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:
        // 代码块 1
        break;
    case constant2:
        // 代码块 2
        break;
    ...
    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 块。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux创建pyspark虚拟环境

一、创建虚拟环境 conda create -n test python3.6.6 二、注意添加镜像 vi /root/.condarc channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- http://mirrors.ustc.edu.cn/anaconda/pkgs/ma…

jmeter使用心得(一)

jmeter作为接口测试的常用工具之一,在我们的测试中经常会用到,往期的文章中,我们也分享过jmeter的各种功能和用法,基本覆盖了方方面面,可以满足各种接口测试的需求。但实际测试中我们也会发现,jmeter这么强…

测试管理-缺陷管理工具安装

前言: 项目生命周期里面,开发软件后,需要进行正规的测试,测试除了需要编写测试用例和写测试总结外,还需要进行bug的闭环控制,方便追踪。之前用过惠普的QC系统,这个是收费的,专业做缺…

【网络】网络层IP地址和IP数据报的格式

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…

图像分割 分水岭法 watershed

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割 分水岭法 watershed(C#)-CSDN博客 Watershed算法是一种图像处理算…

区域HIS系统源码,二级医院、专科医院his系统源码,经扩展后能够应用于医联体/医共体

二级医院、专科医院his系统源码,java语言开发 基于云计算技术的B/S架构的HIS系统,为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。 系统利用云计算平台的技术优…

宏集PC Runtime软件助推食品行业生产线数字化革新

一、前言 近年来,中国食品行业发展迅速且灵活多变,在当前经济下行的情形下,食品行业正面临着日益激烈的竞争,导致企业利润下降。 为了保持企业市场竞争力,国内某top10食品企业采用宏集SCADA解决方案—PC Runtime软件…

【linux】日志管理和分析

一、概述 在Linux系统的管理和运维中,日志文件起到至关重要的作用。它们记录了系统运行过程中的各种事件,包括系统故障、性能数据和安全事件。 二、 日志的作用和分类 日志的作用 日志文件记载了系统的生命线,利用它们可以: 1…

Linux操作系统基础(08):Linux的用户权限

1. 用户权限是什么 在Linux中,用户权限是指用户对文件、目录或者系统资源的访问权限,用户权限决定了用户可以执行哪些操作,比如读取、写入、执行等等,用户权限与文件权限紧密不可分。 用户权限可以分为三种: 读取权限…

青蛙目标检测数据集VOC格式600张

青蛙,一种两栖动物,以其独特的形态和习性,成为了大自然中的一道亮丽风景。 青蛙的外观非常特别,绿色的皮肤上布满了大小不一的斑点,既有助于它们在草丛中隐身,又能够有效地迷惑天敌。头部扁平,…

珠海盈致浅析MES生产管理系统的优点

MES系统是用于管理和控制制造过程的信息化系统.它具有许多优点: 1. 生产过程可视化:MES系统提供实时的生产过程监控和数据收集,使管理人员能够清晰地了解生产线上的各个环节,包括设备状态、生产进度、质量指标等.这使得管理人员能够作出准确的决策并快速响应变化. 2…

实现文本 内容展开 / 收起

<template><el-table :data"tableData" style"width: 100%" height"250"><el-table-columnfixedprop"date"label"日期"width"150"></el-table-column><el-table-columnprop"name…

聚丙烯腈,到预测期结束时将达到36亿美元的市场规模

聚丙烯腈 (PAN) 是一种合成聚合物&#xff0c;广泛用于各种应用&#xff0c;包括纺织品、碳纤维生产和水处理。近年来&#xff0c;受航空航天、汽车和建筑行业对碳纤维增强复合材料需求不断增长的推动&#xff0c;全球 PAN 市场稳步增长。 全球 PAN 市场预计从 2020 年到 2025 …

HttpClient库与代理IP在爬虫程序中的应用

目录 前言 一、HttpClient库的基本使用方法 二、代理IP的使用方法 三、代理IP池的使用方法 四、总结 前言 在编写爬虫程序时&#xff0c;我们经常会使用HttpClient库来发送HTTP请求&#xff0c;获取网页内容。然而&#xff0c;有些网站可能会对频繁的请求进行限制&#x…

CMake入门教程【核心篇】包含目录(include_directories)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本专栏容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 基本用法2. 添加单个…

【SpringBoot开发】之商城项目案例(订单及订单项生成)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

鸿蒙系列--装饰器

一、基础UI组件结构 每个UI组件需要定义为Component struct对象&#xff0c;其内部必须包含一个且只能包含一个build(){}函数&#xff0c;用于绘制UI&#xff1b;struct之内、build()函数之外的地方用于存放数据。 二、基本UI装饰器 Entry 装饰struct&#xff0c;页面的入口…

系列十、Spring Cloud Gateway

一、Spring Cloud Gateway 1.1、概述 Spring Cloud全家桶中有个很重要的组件就是网关&#xff0c;在1.x版本中采用的是Zuul网关&#xff0c;但是在2.x版本中&#xff0c;由于Zuul的升级一直跳票&#xff0c;Spring Cloud最后自己研发了一个网关替代Zuul&#xff0c;即&#xf…

2020年认证杯SPSSPRO杯数学建模B题(第二阶段)分布式无线广播全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 B题 分布式无线广播 原题再现&#xff1a; 以广播的方式来进行无线网通信&#xff0c;必须解决发送互相冲突的问题。无线网的许多基础通信协议都使用了令牌的方法来解决这个问题&#xff0c;在同一个时间段内&#xff0c;只有唯一一个拿到令牌…

Unity 2022 版本 寻路 NavMesh

官方教程地址 https://docs.unity3d.com/Packages/com.unity.ai.navigation1.1/manual/index.html 首先装包 先给地图 和 阻挡 设置为静态 然后给地上行走的地方 添加组件 可以直接bake 然后会显示蓝色的可行走路径 player 添加插件 然后给角色添加脚本 using System.Co…