【C语言步行梯】分支语句if...else、switch详谈

在这里插入图片描述

🎯每日努力一点点,技术进步看得见
🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片+代码片段+网络相关题目的方式编写,欢迎订阅~~

文章目录

  • 什么是语句?
  • 引入分支语句(选择结构)
  • if语句
  • switch语句


什么是语句?

C语言由;(分号)隔开的就是一条语句,举个例子↓↓↓

printf("这是一行语句");
int a = 10;//这也是一个语句
;//虽然只有一个分号,但这也是语句,这种语句称为空语句

引入分支语句(选择结构)

生活中,我们有很多需要选择的情况。例如:你想喝品牌的可乐?百事还是可口可乐?为了满足选择需求,C语言就有了分支(选择)结构。
在这里插入图片描述

if语句

在我们坐公交车的时候,如果我们刷的是学生卡,此时卡机就会叫一声“学生卡~”。C语言该怎么实现这样的情景呢?
在这里插入图片描述
那我们就得先来认识一下单分支语句了,它的结构是这样的↓↓↓

if()//括号内填判断条件
{//执行语句
}

以上面学生卡的例子来说,如果是学生卡则在频幕上打印“学生卡”,代码实现如下

if(isStudentCard)
{printf("学生卡~");
}

除了这种分支(选择)的场景,还有这么个场景:我去银行取钱,我的余额是100块,如果我取100,则会取钱成功;如果我取10000,则会取钱失败。
在这里插入图片描述
于是我们就有了双分支语句结构↓↓↓

if()//括号内填写判断条件
{//满足条件则执行这里
}
else
{//不满足条件则执行这里
}

上面的取钱场景可以转化为下面这个代码↓↓↓

//rest表示余额
//money表示要取的钱
if(money <= rest)
{//ATM吐钱
}
else
{//显示余额不足
}

关于if语句,还有最后这一种场景:我们考试的时候100-90分是优秀,89-70分是良好,69-60分是及格,小于60分是不及格。此时需要更多的分支,C语言就引入了多分支语句。它的格式如下↓↓↓

if()//这里填写条件1
{//满足条件1执行这里
}
else if()//这里填写条件2
{//满足条件2执行这里
}
else if()//这里填写条件3
{//满足条件3执行这里
}
else
{//上述条件都不满足,执行这里
}

对于上面按分数划分等级的场景,我们可以写出如下代码↓↓↓

if(score >= 90 && score <= 100)
{printf("优秀\n");
}
else if(score >= 70 && score < 90)
{printf("良好\n");
}
else if(score >= 60 && score < 70)
{printf("及格\n");
}
else
{printf("不及格\n");
}

下面给出一些小tips:

★ps:if…else if…else多分支语句中,可以有多个else if。

★ps:在填写括号中的条件表达式时,如果表达式的值非0,则表示真;如果表达式的值为0,则表示假。

★ps:if、else if、else的后面最多只能接1条语句,如果要接多条语句,需要使用大括号{}将所有语句括起来。

★ps:if…else…的匹配满足就近原则。例如下方代码,else与离它最近的if语句匹配,即与age>=60所在的if语句匹配,形成分支结构。

if(age >= 18)if( age >= 60)printf("长者")
elseprintf("我和age>=60的if语句匹配");

在这里插入图片描述
经过上面的学习,我们拿几道题来练练手,Let’s Go!【读者先自己写写,我们再一起对照对照】

练习1:编写程序判断一个数是否为奇数

#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);if(num % 2 == 1){printf("是奇数\n");}else{printf("不是奇数\n");}return 0;
}

练习2:Jammingpro想喝蜜雪冰城,Jammingpro输入他带的钱的数量,你帮他判断一下他能不能买得起5块钱的柠檬水

#include <stdio.h>int main()
{int money = 0;scanf("%d", &money);if(money >= 5){printf("能买得起\n");}else{printf("买不起\n");}return 0;
}

switch语句

如果我们输入1表示星期一,输入2表示星期二,以此类推。如果使用if…else if…else的语句结构一定能够实现,但实现代码实在是太繁杂了。C语言中的switch语句就派上用场了,我们来看看它怎么判断星期↓↓↓

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");break;
}

其中switch后面的括号中可以填表达式,它将会和case子句后的整型、常量或者表达式进行匹配,如果匹配成功,则会执行对应case子句后面的代码;如果都无法匹配,则会执行default子句后面的代码。

★ps:上面case语句后面的break不可以省略。以day=6为例,它将和case 6相匹配,并打印"星期六",在遇到break语句时,将跳出整个switch语句。假如case 6子句下面没有break,则在打印完“星期六”之后,将会向后继续执行打印“星期日”的操作,直到遇到下一个break语句。

借助switch语句中,如果没有遇到break就会继续向后执行的特点,我们可以实现如下代码。这个代码中,day的数值表示星期,当输入1到5时,则会打印“工作日”;输入6到7,则会打印“休息日”;输入其他内容,则会打印“输入有误”。

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");break;
}

★ps:default子句可以放在整个switch语句中的任意位置,不一定要放在最后面。

在这里插入图片描述
学完switch语句,那就我们来看一段代码,看看它的执行结果应该是什么【读者先想出结果,再一起对照一下】

int main()
{int n = 1;int m = 2;switch(n){case 1:printf("Jammingpro ");case 2:switch(m){case 1:printf("ccc ");case 2:printf("is ");break;case 3:printf("strong!\n");break;default:printf("nice\n");break;}default:printf("handsome!\n");break;}return 0;
}

揭晓答案的时刻:“Jammingpro is handsome”。
解析:外层的switch语句中,n和case 1自己相匹配,打印完“Jammingpro ”后,由于其后面没有break语句,将继续执行case 2中的内容。case 2中嵌套了switch语句,m和case 2自己想匹配,于是打印了”is “,因为内层case 2子句后面有break语句,将会跳出内层switch语句。外层switch的case 2后面没有break语句,它将继续执行default子句中的内容,打印出”handsome\n“。
在这里插入图片描述

🚩这篇文章结束了~~
如果文章中出现了错误,欢迎私信或留言。(๑•̀ㅂ•́)و✧
有任何疑问请评论或私信哦~~o( ̄▽ ̄)ブ

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

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

相关文章

GO: 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version[rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …

美区 Apple ID 注册订阅保姆级教程

前言 Apple Store 中好些软件国区账号无法下载&#xff0c;去购买别人注册的美区账号又存在一定风险&#xff0c;时不时就是密码错误导致钱白白浪费了&#xff0c;所以这里就出一期教程&#xff0c;自己来注册美区的 Apple ID&#xff0c;成功率100% 参考文章&#xff1a;美区 …

Mysql数据库-基本表操作

1.表操作 创建表&#xff1a;CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c;如果没有指定字符集&#xff…

VP牛客小白月赛88(A---F)(收获很多)

感觉难度梯度有点大&#xff0c;前4个都十分基础&#xff0c;E和F比较的难&#xff0c;直接看题&#xff08;按照个人的收获从大到小排&#xff09; 可以用启发式合并但是太菜了还不会&#xff08;等以后来填坑&#xff09;&#xff0c;这里用map并查集的思想来十分巧妙地化解。…

LabelImg:一个简单易用的图像标注工具

目录 LabelImg是什么&#xff1f; 如何使用LabelImg进行图像标注&#xff1f; LabelImg的优势和应用场景 在哪里下载它 随着人工智能技术的不断发展&#xff0c;机器学习和深度学习在图像识别、目标检测等领域中得到了广泛的应用。而要训练一个有效的模型&#xff0c;通常需…

Apache服务的搭建与配置

一、apache安装 systemctl stop firewalldsystemctl disable firewalldsetenforce 0yum -y install httpdsystemctl start httpdnetstat -ntlp | grep 80 二、认识主配置文件 # vim /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" #定义工作目…

复制表

目录 复制表 将部门 30 的所有员工信息保存在 emp30 表中 将复杂查询结果创建为表 只将 emp 表的结构复制为 empnull 表 从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 复制表 严格来说&#xff0c;复制表不是复制操作&am…

Intel® Extension for PyTorch*详细安装教程

最近在研究Intel的pytorch的加速拓展Intel Extension for PyTorch*,但是发现官网的文档全是英文的&#xff0c;不太好找安装教程。所以特此分享Intel Extension for PyTorch*的详细安装教程。 文章目录 一、安装所需系统要求1.1 硬件需求1.2 软件需求 二、准备2.1 安装驱动程序…

Kafka 面试题及答案整理,最新面试题

Kafka中的Producer API是如何工作的&#xff1f; Kafka中的Producer API允许应用程序发布一流的数据到一个或多个Kafka主题。它的工作原理包括&#xff1a; 1、创建Producer实例&#xff1a; 通过配置Producer的各种属性&#xff08;如服务器地址、序列化方式等&#xff09;来…

Spring Boot整合MyBatis Plus配置多数据源

Spring Boot 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9278145.html Spring Cloud 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9287932.html GitHub&#xff1a;https://github.com/dkbnull/SpringBootDemo Gitee&#xff1a;https://gitee.com/…

[Angular 基础] - 表单:模板驱动表单

[Angular 基础] - 表单&#xff1a;模板驱动表单 之前的笔记&#xff1a; [Angular 基础] - routing 路由(上) [Angular 基础] - routing 路由(下) [Angular 基础] - Observable Angular 内置两种表单的支持&#xff0c;这篇写的就是第一种&#xff0c;即模板驱动表单 (Tem…

vue学习笔记22-组件传递多种数据类型props效验

组件传递多种数据类型 通过props传递数据&#xff0c;不仅可以传递字符串类型的数据&#xff0c;还可以是其他类型&#xff0c;例如&#xff1a;数字、对象、数组等&#xff0c;但实际上任何类型的值都可以作为props的值被传递&#xff08;即组件与组件之间的传递是没有限制的…