C语言条件语句中switch语句的一些用法

news2024/12/24 22:18:19

目录

  • 1. switch语句
    • 写一个简单的switch语句
  • 2. if语句和else语句的对比
    • 判断3的倍数情况
  • 3. switch语句中break详解
  • 4. switch语句的一项小练习
  • 5. switch语句中的default
  • 6. switch语句中的顺序问题

1. switch语句

C语言除了if...else...作为条件语句外,还提供了switch语句。

switch语句其实是一种特殊的if...else...结构语句,用于判断条件有多个结果的情况,它把多重的else if换成了更简易,可读性更好地结构;

swith(expression)
{
	case value1: statement;
	case value2: statement;
	default:statament;
}

根据表达式expression的值,执行相应的case分支,若所有的case分支不符合,则执行default分支。

注意

  • switch()里面的expression表达式必须是整型表达式
  • case后的值,必须是整型常量表达式

写一个简单的switch语句

在我们了解了switch语句的基本用法后,我们可以试着写一个简单的switch程序了

#include<stdio.h>
int main()
{
	int a = 0;
	printf("请输入一个数a(0<=a<=3):");
	scanf("%d", &a);
	switch (a)
	{
	case 0: printf("你输入的数是0\n");
	case 1: printf("你输入的数是1\n");
	case 2: printf("你输入的数是2\n");
	case 3: printf("你输入的数是3\n");
	}
	return 0;
}

如果,我们输入1,大家猜一猜结果是啥?

一些人肯定看了就说,输入的 a 符合 case 1 的分支,肯定输出“你输的数是1”,结果真的是这样吗?

我们来看一下

在这里插入图片描述
咦?为什么后面的三个全部输出了?

其实,符合case分支只是从这个分支进入,后面的分支也是可以执行的。

所以,如果我们要完成单一分支的执行,要在每个分支后面加上break

改正后的代码

#include<stdio.h>
int main()
{
	int a = 0;
	printf("请输入一个数a(0<=a<=3):");
	scanf("%d", &a);
	switch (a)
	{
	case 0: printf("你输入的数是0\n");
		break;
	case 1: printf("你输入的数是1\n");
		break;
	case 2: printf("你输入的数是2\n");
		break;
	case 3: printf("你输入的数是3\n");
		break;
	}
	return 0;
}

输出结果

在这里插入图片描述
注意:

  • 每个case和后边的数字之间必须有空格
  • 每一个case语句中的代码执行完成后,需要加上break,才能跳出一个switch语句

2. if语句和else语句的对比

判断3的倍数情况

if语句判断

#include<srio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 3 == 0)
	{
		printf("是3的倍数");
	}
	else if (a % 3 == 1)
	{
		printf("余数为1");
	}
	else
	{
		printf("余数为2")}
	return 0;
}

switch语句判断

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a%3)
	{
	case 0: printf("是3的倍数");
		break;
	case 1: printf("余数为1");
		break;
	case 2: printf("余数为2");
		break;
	}
	return 0;
}

输出结果
在这里插入图片描述从两种代码的对比中我们可以看出,对于多种结果选择的条件语句,switch控制的更加简介,可读性更好!

3. switch语句中break详解

以上面代码去掉break,我们看看结果

在这里插入图片描述

很显然,后面的所有语句都执行了。

其实原因,就是switch语句也是有分支效果的,只有在每个分之后面加上break才能跳出这个分支语句;意思就是说,如果一个分支语句后面没有break,那么语句会继续往下执行,有可能执行其他case控制的语句中的代码,知道遇到break语句或者switch语句结束,就比如上面程序执行了,case0 , case1 , case2 中的代码。

所以,在case语句后面加上break语句是非常重要的,这样就能起到真正的分支效果;

但是,并不是所有的case语句后面都需要加上break语句这就需要具体问题具体分析了;

4. switch语句的一项小练习

写以个switch语句,输入1 ~ 5,输出工作日,输入6 ~ 7,输出休息日;

#include<stdio.h>
int main()
{
	int day = 0;
	printf("请输入星期天数:\n");
	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;
	}
	return 0;
}

在这里插入图片描述
通过这个练习,有两点需要注意一下:

  1. 多个case控制一条相同的语句,可以省略只留下一个被控制的语句
  2. 我们应该根据实际情况,决定在代码中是否使用break, 在哪里使用break,才能更好的满足需求;

5. switch语句中的default

在使用switch语句的时候,我们经常遇到这样的情况,就是在switch后面的表达式无法匹配到任何一种case分支语句的时候,这个时候要么就不要处理,要么就使用default语句;

swith(expression)
{
	case value1: statement;
	case value2: statement;
	default:statament;
}

简单来说,就是switch中的expression表达式既不等于value1,又不等于value2,这时候就要执行default分支;

比如我们将上面的工作日代码,换一种方法输入,我们不输入1~7的数,而是输入一个大于7的数。

输出结果
在这里插入图片描述
我们可以发现,这时候输出为空;

所以,我们也可以加上default语句处理这一问题;

#include<stdio.h>
int main()
{
	int day = 0;
	printf("请输入星期天数:\n");
	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("输入错误!");
	}
	return 0;
}

输出结果
在这里插入图片描述

6. switch语句中的顺序问题

switch语句中case字句和default字句有要求顺序吗?default语句必须放在最后面吗?

答案其实并不是这样的,在switch语句中,case语句和default语句是没有顺序要求的,只要满足实际要求就可以!

不过我们通常把default语句放在最后。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java(十)——接口

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

数据库表的行列转换(行转列,列转行)

目录 前言 行转列 创建测试表 score1 插入测试数据 需求与通用SQL写法 列转行 创建测试表 score2 插入测试数据 需求与通用SQL写法 前言 在工作中&#xff0c;多多少少都会遇到一些数据展示的需求&#xff0c;开发一个接口&#xff0c;从数据库中查询数据返回页面展示…

Thinkphp仿华为商城源码/红色风格电脑手机数码商城系统网站源码

Thinkphp仿华为商城&#xff0c;主要实现了商品首页展示、用户意见、商品分类列表、商品搜索、商品详细展示、购物车、订单生成、在线付款、以及个人中心完善个人资料、用户修改收货地址、余额查询、消费查询、订单管理、商品评价、热销商品和最近商品浏览&#xff1b; 后台是…

Langchain核心模块与实战[8]:RAG检索增强生成[loader机制、文本切割方法、长文本信息处理技巧]

Langchain核心模块与实战[8]:RAG(Retrieval Augmented Generation,检索增强生成) RAG(Retrieval-Augmented Generation)技术是一种结合检索和生成功能的自然语言处理(NLP)技术。该技术通过从大型外部数据库中检索与输入问题相关的信息,来辅助生成模型回答问题。其核心…

面试重点---快速排序

快排单趟 快速排序是我们面试中的重点&#xff0c;这个知识点也很抽象&#xff0c;需要我们很好的掌握&#xff0c;而且快速排序的代码也是非常重要&#xff0c;需要我们懂了还不行&#xff0c;必须要手撕代码&#xff0c;学的透彻。 在研究快速排序之前&#xff0c;我们首先…

使用 Arduino 实现 PID 控制器

使用 Arduino 实现 PID 控制器 PID controller implementation using Arduino (microcontrollerslab.com) In this article, you will learn how to design PID controller using Arduino. PID controller can implemented using both analog and digital electronics. But in…

Java 基础 and 进阶面试知识点(超详细)

一个 Java 文件中是否可以存在多个类&#xff08;修饰类除外&#xff09;&#xff1f; 一个 Java 文件中是可以存在多个类的&#xff0c;但是一个 Java 文件中只能存在一个 public 所修饰的类&#xff0c;而且这个 Java 文件的文件名还必须和 public 所修饰类的类名保持一致&a…

斯坦福UE4 C++课学习补充 14:UMG-优化血量条

文章目录 一、优化执行效率二、简单脉冲动画 一、优化执行效率 绑定事件需要每一帧检查绑定对象是否有变化&#xff0c;势必造成CPU资源的浪费&#xff0c;因此优化执行效率的思路是&#xff1a;UI组件不再自行每帧查询血量&#xff0c;而是让血量自己在发生变化的同时通知UI进…

软件全过程建设资料,交付资料,方案等

在软件开发过程中&#xff0c;文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程&#xff0c;还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用&#xff0c;以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档编写…

【机器学习】深入理解损失函数(Loss Functions)

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解损失函数(Loss Functions)什么是损失函数?常见损失函数类型1. 均方误差…

[译] 深入浅出Rust基金会

本篇是对 RustConf 2023中的Rust Foundation: Demystified这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 大家好,我是Sage Griffin,我的代词是they/them。我今天来这里是要谈谈Rust基金会。 要了解基金会实际做什么,我们需要理解美国国内税收…

微软第四季度财报预览:增长动力追踪

微软公司即将在2024年7月30日&#xff08;周二&#xff09;美国市场收盘后发布第四季度财务结果。 微软的收益 - 预期如何 美股券商开户通道 市场预计&#xff0c;微软即将到来的2024年第四季度的收入将年增长14.5%&#xff0c;达到644亿美元&#xff0c;高于2023年第四季度…

【Leetcode】二十、记忆化搜索:零钱兑换

文章目录 1、记忆化搜索2、leetcode509&#xff1a;斐波那契数列3、leetcode322&#xff1a;零钱兑换 1、记忆化搜索 也叫备忘录&#xff0c;即把已经计算过的结果存下来&#xff0c;下次再遇到&#xff0c;就直接取&#xff0c;不用重新计算。目的是以减少重复计算。 以前面提…

【.NET 6 实战--孢子记账--从单体到微服务】--开发环境设置

在这一小节&#xff0c;我们将设置开发环境。 一、安装SDK 咱们的项目使用的是 .NET6&#xff0c;开发前我们需要从官网上下载.NET6 SDK&#xff08;点击下载&#xff09;&#xff0c;这里要注意的是我们需要下载.NET6 SDK&#xff0c;而不是 .NET6 Runtiem 。SDK 包含 Runti…

2021真题-架构师案例(四)

问题1&#xff08;16分&#xff09; 针对该系统功能&#xff0c;赵工建议解释器架构风格&#xff0c;李工建议管道过滤架构风格&#xff0c;王工则建议饮食调用&#xff0c;该系统从灵活性和可扩展性考虑&#xff0c;应采用哪种&#xff1f; 解析&#xff1a; 管道-过滤器&am…

这些有用的免费网站和工具,很多人却都不知道

在信息爆炸的今天&#xff0c;很多用户都不知道有哪些免费好用的网站和工具&#xff0c;今天小编就来和大家分享几款免费又好用的网站或工具&#xff0c;以便大家提升工作效率。 滴答清单&#xff1a;高效时间管理 滴答清单是一款广受欢迎的时间管理工具&#xff0c;它可以帮…

【C++】面向对象的软件设计原则

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

字符串变换 482、6、68

482. 密钥格式化&#xff08;简单&#xff09;&#xff08;20mins&#xff09; 给定一个许可密钥字符串 s&#xff0c;仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n 1 组。你也会得到一个整数 k 。 我们想要重新格式化字符串 s&#xff0c;使每一组包含 k 个字…

AndroidStudio 开发环境搭建

文章目录 AndroidStudio 开发环境搭建JDK 下载与安装&#xff0c;配置环境变量JDK1.8 下载安装配置环境变量新建JAVA_HOME编辑Path 下载AndroidStudio最新版本历史版本先安装JDK&#xff0c;后启动AS以管理员身份运行打开解决双击打不开的问题Error:你的主机中的软件中止了一个…

Golang | Leetcode Golang题解之第299题猜数字游戏

题目&#xff1a; 题解&#xff1a; func getHint(secret, guess string) string {bulls : 0var cntS, cntG [10]intfor i : range secret {if secret[i] guess[i] {bulls} else {cntS[secret[i]-0]cntG[guess[i]-0]}}cows : 0for i : 0; i < 10; i {cows min(cntS[i], c…