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之前,就能到所有的位

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

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

相关文章

滚动视图ScrollView

activity_scroll_view.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

【Python系列】 Python 中的枚举使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

合宙LuatOS开发板使用手册——Air700EAQ

EVB-Air700EL&700EY 开发板是合宙通信推出的基于 Air700EL&700EY 模组所开发的&#xff0c; 包含电源&#xff0c;SIM 卡&#xff0c;USB&#xff0c;PCB 天线等必要功能的最小硬件系统。 以方便用户在设计前期对 模块进 行性能评估&#xff0c;功能调试&#xff0c;软…

如何让“相信相信的力量”帮你多赚100万

公门洞开纳百川 众心逐梦越千山 号召引领潜力绽 心觉潜意识无间 我们经常听到这句话&#xff1a;相信相信的力量 为什么要相信相信的力量 相信是什么意思 相信的力量又是什么意思 我估计99%的人不知道这句话的底层逻辑是什么 如果你悟透了&#xff0c;你的并且践行了&…

PE文件结构详解(非常详细)

最近在参考OpenShell为任务栏设置图片背景时&#xff0c;发现里面使用了IAT Hook&#xff0c;这一块没有接触过&#xff0c;去查资料的时候发现IAT Hook需要对PE文件结构有一定的了解&#xff0c;索性将PE文件结构的资料找出来&#xff0c;系统学习一下。 PE文件结构 Portable…

【Qt】 QDateTimeEdit | QDial

文章目录 QDateTimeEdit —— 时间日期 微调框QDateTimeEdit 属性核心信号QDateTimeEdit 的使用 QDial —— 按钮QDial 属性核心信号QDial 使用 QDateTimeEdit —— 时间日期 微调框 QDateTimeEdit 属性 QDateTimeEdit 作为 时间日期 的 微调框 dateTime —— 时间⽇期的值…

minio文件存储+ckplayer视频播放(minio分片上传合并视频播放)

文章目录 参考简述效果启动minio代码配置类RedisConfigWebConfigMinioClientAutoConfigurationOSSPropertiesapplication.yml 实体类MinioObjectResultStatusCodeOssFileOssPolicy 工具类FileTypeUtilMd5UtilMediaTypeMinioTemplate 文件分片上传与合并MinioFileControllerMini…

Webpack打包常见问题及优化策略

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack打包常见问题及优化策略1. 引言2. Webpack打包常见问题2.1 打包时间过长问题描述主要原因 2.2 打包体积过大问题描述主要原因 2.3 依赖包版本冲突问题描述主要原因 2.4 动态导入和代码拆分问题问题描述主要原因 2.5 文件路径…

Python+VScode 两个不同文件夹里的py文件相互调用|python的模块调用|绝对导入

第一次用VScode写python遇到了模块无法识别的问题&#xff0c;搞了一整天&#xff0c; 上网查&#xff0c;chatGPT都不行&#xff0c;现在时解决了。 首先项目结构如下&#xff0c;四个文件夹&#xff0c;四个py文件 代码&#xff1a; def f1fun():print("f1") de…

Code Practice Journal | Day59-60_Graph09 最短路径(待更)

1. Dijkstra 1.1 原理与步骤 步骤&#xff1a; 选取距离源点最近且未被访问过的节点标记该节点为已访问更新未访问节点到源点的距离 1.2 代码实现 以KamaCoder47题为例 题目&#xff1a;47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; (kamacoder.com) class Progra…

Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化

引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本&#xff0c;围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程&#xff0c;希望通过这篇文档&#xff0c;对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文章将会分成三篇&#xff0c;从以下方向给大家介绍&am…

指针5.回调函数与qsort

今天来学习回调函数与qsort 目录 1.回调函数实现模拟计算器代码的简化原代码运行结果简化代码运行结果 qsort函数排序整型数据代码运行结果 qsort排序结构数据代码 qsort函数的模拟实现代码运行结果 总结 1.回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的…

C++语法基础(一)

第一个C程序 1. <iostream>&#xff08;C&#xff09; <iostream> 是 C 标准库中的头文件&#xff0c;用于处理输入输出操作。它提供了基于流&#xff08;stream&#xff09;的输入输出机制。 特点&#xff1a; 面向对象&#xff1a;C 中的输入输出操作是基于流…

hyperf json-rpc

安装 安装docker hyperf 安装 hyperf-rpc-server-v8 &#xff08;服务端&#xff09; docker run --name hyperf-rpc-server-v8 \ -v /www/docker/hyperf-rpc-server:/data/project \ -w /data/project \ -p 9508:9501 -it \ --privileged -u root \ --entrypoint /bin/sh \…

Upload-LABS通关攻略【1-20关】

Pass-01 第一关是前端JS绕过 上传一个php文件显示只能上传特定后缀名的文件 这里将1.php改为1.jpg直接进行抓包&#xff0c;在数据包中将jpg改为php放行 文件上传成功&#xff0c;邮件图片新建页面打开 可以访问到1.php文件&#xff0c;则一句话密码上传成功 使用蚁剑 进行连接…

Redux的中间件原理分析

Redux的中间件原理分析 redux的中间件对于使用过redux的各位都不会感到陌生&#xff0c;通过应用上我们需要的所有要应用在redux流程上的中间件&#xff0c;我们可以加强dispatch的功能。最近抽了点时间把之前整理分析过的中间件有关的东西放在这里分享分享。本文只对中间件涉…

音视频开发之旅(90)-Vision Transformer论文解读与源码分析

目录 1.背景和问题 2.Vision Transformer(VIT)模型结构 3.Patch Embedding 4.实现效果 5.代码解析 6.资料 一、背景和问题 上一篇我们学习了Transformer的原理&#xff0c;主要介绍了在NLP领域上的应用&#xff0c;那么在CV(图像视频)领域该如何使用&#xff1f; 最直观…

算法复盘——LeetCode hot100:哈希

文章目录 哈希表哈希表的基本概念哈希表的使用1. 插入操作2. 查找操作3. 删除操作 哈希表的优点和缺点1.两数之和复盘 242.有效的字母异位词复盘 49.字母异位词分组复盘 128. 最长连续序列复盘HashSet 哈希表 先来搞清楚什么是哈希表吧~ 概念不清楚方法不清楚怎么做题捏 哈希表…

使用mysql保存密码

登录MySQL 这行命令告诉MySQL客户端程序用户root准备登录&#xff0c;-p表示告诉 MySQL 客户端程序提示输入密码。 mysql -u root -p创建数据库 create database wifi; use wifi;create table password(user_password CHAR(8),primary key(user_password));源码 代码编译 …

QT实战项目之音乐播放器

项目效果演示 myMusicShow 项目概述 在本QT音乐播放器实战项目中&#xff0c;开发环境使用的是QT Creator5.14版本。该项目实现了音乐播放器的基本功能&#xff0c;例如开始播放、停止播放、下一首播放、上一首播放、调节音量、调节倍速、设置音乐播放模式等。同时还具备搜索功…