当前位置: 首页 > news >正文

switch语句和while循环

switch语句和while循环

  • switch语句
    • break的用法
    • default的用法
    • switch语句中的case和default的顺序问题
  • while语句
    • while语句的执行流程
    • while语句的具体例子

switch语句

switch 语句是⼀种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重
的 else if 改成更易用、可读性更好的形式。
我们可以这样理解:if语句适用于判断条件较少的情况,因为if语句如果判断条件情况太多,我们就可能会用到if语句嵌套,或者用的else if太多。
具体的情况大概会这样:

  if(条件1if(条件2{if(条件3}``
//或者
if(条件1{××××××;}else if(条件2{××××××;}else if(条件3{××××××;}else if(条件4{××××××;}......
else(条件){××××××;}

显然这样就太复杂了,因此为了简便,我们可以用switch语句。
而switch语句的具体用法如下:

switch (表达式) {
case 整形常量: 语句case 整形常量: 语句default: 语句
}

上面代码中,根据表达式为不同的值,执行相应的 case 分支。如果找不到对应的值,
就执行 default 分支。
特别注意:
switch 后的表达式必须是整型表达式
case 后的值,必须是整形常量表达式
我们举个例子:
输入任意⼀个整数值,计算除3之后的余数
使用switch语句

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

上述的代码中,我们要注意的点有:

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

break的用法

前面的代码中我们应该大致了解到了switch语句的用法,那如果我们去掉case语句中的break,会出现什么情况呢?

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

当我们输入7时,运行结果如图:
在这里插入图片描述
我们发现,7除以3本来余数是1,但是我们发现程序运行的结果多了⼀行“余数是2”的打印。
这是为什么呢?
原因是 switch 语句也是分支效果的,只有在 switch 语句中使用 break 才能在跳出 switch 语
句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面的代码就执行了 case2 中的语句。
所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
下面有几个例子:

练习:
输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天
#include <stdio.h>
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;}return 0;
}
如果需求发⽣变化,变为:
1. 输⼊1-5,输出的是“⼯作⽇”;
2. 输⼊6-7,输出“休息⽇
#include <stdio.h>
int main()
{int day = 0;scanf("%d", &day);switch (day){case 1case 2:case 3:case 4:case 5:printf("⼯作⽇\n");break;case 6:case 7:printf("休息⽇\n");break;}return 0;
}

上面的例子中,我们发现应该根据实际的情况,来在代码中觉得是否使用 break ,或者在哪里使用break ,才能正确完成实际的需求。

default的用法

在使用 switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值无法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入default 子句。

switch (表达式) {case 整形常量1: 语句case 整形常量2: 语句default:语句
}

switch 后边的 表达式 的结果不是整形常量1 ,也不是整形常量2 的时候,就会执行default 语句。
也就是说default语句是处case语句以外的结果
就比如:前面做的打印星期的练习,如果 day 的输入不是1~7的值,如果我们要提示:输入错误,则可以这样完成代码:

#include <stdio.h>
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");break;}return 0;
}

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

在 switch 语句中 case 子句和 default 子句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。不过我们通常是把 default 子句放在最后处理的
我们也可以理解为:switch表达式的结果为5时就是从case 5开始,因此无论我们把case5与其他case语句以及default语句交换顺序时,都是从case5开始。

while语句

C语言提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句非常相似。
我们将if语句以及while语句进行对比:

if(表达式)语句;while(表达式)语句;//如果循环体想包含更多的语句,可以加上⼤括号

具体代码如下:

//代码1
#include <stdio.h>
int main()
{if (1)printf("快关注点赞\n"); //if后边条件满⾜,打印⼀次快关注点赞return 0;
}
//代码2
#include <stdio.h>
int main()
{while (1)printf("快关注点赞\n"); //while后边的条件满⾜,死循环的打印快关注点赞return 0;
}

while语句的执行流程

在这里插入图片描述
⾸先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语
句,语句执行完后再继续判断,是否进行下⼀次判断

while语句的具体例子

//例子1
在屏幕上打印1~10的值
#include <stdio.h>
int main()
{int i = 1;while (i <= 10){printf("%d ", i);i = i + 1;}return 0;
}
//例子2
输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);while (n){printf("%d ", n % 10);n /= 10;}return 0;
}

1.要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如:
n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第二位3。
3. 循环1和2两个步骤,在n变成0之前,就能到所有的位

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 算法练习题07:无重复字符的最长子串
  • 临时性解决斐讯K3 路由器端口转发限制
  • GO Date数据处理
  • CSS-定位【看这一篇就够了】
  • 食堂线上预约点餐系统小程序的设计
  • 使用 FormCreate 渲染 Element Plus 表单
  • k8s1.23 部署Prometheus-Operator集群监控
  • 贪心算法---用最少数量的箭引爆气球
  • 【计算机网络】应用层HTTP协议
  • 数据赋能(193)——开发:数据服务——实施过程、应用特点
  • 142.环形链表二-力扣
  • Day 7:条件编译
  • 公务员面试(c语言)
  • ISO C++ 和 GNU C++ 的区别
  • MFC工控项目实例之十添加系统测试对话框
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • 77. Combinations
  • Java IO学习笔记一
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • October CMS - 快速入门 9 Images And Galleries
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 深度学习入门:10门免费线上课程推荐
  • 异步
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 再次简单明了总结flex布局,一看就懂...
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (超详细)语音信号处理之特征提取
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (过滤器)Filter和(监听器)listener
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)nsfocus-绿盟科技笔试题目
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET 药厂业务系统 CPU爆高分析
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET命名规范和开发约定
  • ::前边啥也没有
  • @EnableAsync和@Async开始异步任务支持