C语言分支和循环(2)
我的相关博客:
C语言的分支与循环(1)
1.switch语句
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 else if 改成更易⽤、可读性更好的形式
switch (expression)
{
case value1:statement1;break;
case value2:statement2;break;
default: statement3;break;
}
上面代码中,value1,value2对应的是expression的值,如果expression的值符合 value1,则进入statement1,执行其中的语句,紧接着遇到break,退出这个switch
如果expression的值符合value2,则进入statement2,执行其中的语句,紧接着遇到break,退出这个switch
而上面的default,指的是value1、和value2以外的所有情况,都会进入statement3,执行其中的语句
注意:
switch 后的 expression 必须是整型表达式
case 后的值,必须是整形常量表达式
2.if语句和switch语句的对比
实例::输⼊任意⼀个整数值,计算除2之后的余数
使用if语句时:
int n = 0;
scanf("%d", &n);
if (n % 2 == 0)printf("整除,余数为0\n");
elseprintf("余数是1\n");
而使用switch语句改写,则:
int n = 0;
scanf("%d", &n);
switch (n % 2)
{
case 0:printf("整除,余数为0\n");break;
case 1:printf("余数是1\n");break;
}
需要注意的是:
case和后边的数字之间必须有空格
每⼀个 case 语句中的代码执⾏完成后,需要加上break ,才能跳出这个switch语句
3.switch中的break
switch中的break非常重要,是正确跳出switch的关键
如果没有break,则执行相应的一条语句后,对之后的每一个case中的语句都会执行
如下面这个例子:
printf("输入1~7的数字,打印星期几\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:printf("星期一\n");
case 2:printf("星期二\n");
case 3:printf("星期三\n");
case 4:printf("星期四\n");
case 5:printf("星期五\n");
case 6:printf("星期六\n");
case 7:printf("星期天\n");
default:printf("输入错误\n");
}
输入:2
输出 :
如果要实现正确的功能,需要给加上 break,正确的代码为:
printf("输入1~7的数字,打印星期几\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
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;
}
当然,我们也可以依此实现一些功能,如下面这个代码:
输入1-5,输出:工作日
输入6-7,输出:休息日
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:printf("工作日\n");break;
case 6:
case 7:printf("休息日\n");break;
default:printf("输入错误\n");
}
4.switch语句中的default
在switch语句中,default归纳为 除了case之外的所有情况
满足这个条件就会进入default中,default可以理解为:非目标值,或者无用值
关于default与case,不需要考虑顺序,可以case在前,也可以default在前,不影响代码效果的实现,一般习惯将default放在最后
5.循环
C语言提供了3种循环,分别是:for循环、while循环、do-while循环
5.1for循环
for(语句1;语句2;语句3)
{
语句4;
}
for循环的小括号里面有3条语句 ,部分语句可以为空,但是必须有两个分号
一次循环语句的执行顺序为:
语句1——>语句2——>语句4——>语句3
如果语句循环多次,执行的顺序为:
语句1——>语句2——>语句4——>语句3——>语句1——>语句2——>语句4......
(语句1 ,2,4,3...1,2,4,3的循环)
这个执行顺序是固定的,根据这个逻辑,可以完成大量的循环运算
实例:计算1到10相加的和
int sum = 0;
for (int i = 1; i <= 10; i++)
{sum = sum + i;
}
printf("相加的和为%d", sum);
运行结果:
相加的和为55
上面循环停止的关键在于 i <= 10 ,所以语句2一般是循环停止的条件
实例:打印1到10
for (int i = 1; i <= 10; i++)
{printf("%d ", i);
}
运行结果:
1 2 3 4 5 6 7 8 9 10
5.2while循环
while 循环的语法结构 和 if 非常相似
if(表达式)
{
语句;
}
while(表达式)
{
语句;
}
while循环的执行顺序为:表达式——>语句——>表达式——>语句——>......
⾸先上来就是执⾏判断表达式,若表达式的值为0,循环直接结束
表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次循环语句
实例:计算1到10相加的和(可与上面的for循环对比)
int sum = 0;
int i = 1;
while (i <= 10)
{sum = sum + i;i++;
}
printf("和为%d\n", sum);
运行结果:
和为55
while循环和for循环对比:
while与for循环都有:初始化、判断,和调整这三个部分,但是for循环⾮常集中,便于代码的维护
5.3do while循环
do while语句的使用较少,语法是:
do
{
语句;
}while(表达式)
do while循环和while循环非常相似,只是先执行了一次语句,再判断表达式是否成立
因此,即使表达式不成立,也会先执行一次语句(与C语言的代码,从上往下执行相对应)
如:
int n = 0;
do
{printf("执行\n");
} while (n);
运行结果:
执行
6.break和continue
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象
C语⾔中提供了 break 和 continue 两个关键字,就是应用到循环来终止的
6.1while循环中的break和continue
先看一个实例:
1.break
#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)break;printf("%d ", i);i = i + 1;}return 0;
}
运行结果:1 2 3 4
2.continue
#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)continue;printf("%d ", i);i = i + 1;}return 0;
}
运行结果:1 2 3 4 (死循环)
上面代码中的if没有使用花括号{ },只能控制一条语句,即break,或者continue,而之后的代码不受if的控制
通过对比,不难看出, while 中的 break 跳过相应的while整个循环
而 while 中的 continue 只是跳过本次循环,也跳过了i = i + 1这条语句,因此,i一直停留在4,陷入死循环
6.2for循环中的break和continue
1.break
#include<stdio.h>
int main()
{for (int i = 1; i <= 10; i++){if (i == 5)break;printf("%d ", i);}return 0;
}
这里break的含义是跳过for循环,因此,运行结果与while中的break相同
运行结果:1 2 3 4
2.continue
#include<stdio.h>
int main()
{for (int i = 1; i <= 10; i++){if (i == 5)continue;printf("%d ", i);}return 0;
}
运行结果:1 2 3 4 6 7 8 9 10
这里的continue和while中的continue相同,跳过本次循环,但是由于i++还是会执行
所以 i 可以继续自增,往后执行
6.3do while中的break和continue
do while中的 break 和 continue 与 while 中的几乎一模一样
相关文章:

C语言分支和循环(2)
我的相关博客: C语言的分支与循环(1) 1.switch语句 除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 else if…...
14.FreeRTOS 流媒体缓存 Stream Buffer
FreeRTOS 中的 Stream Buffer(流媒体缓存) 在实时操作系统(RTOS)中,处理流媒体数据是一项非常关键的任务。FreeRTOS 提供了一种名为 Stream Buffer(流媒体缓存)的机制,用于高效地管…...
利用ffmpeg把视频分解成图片(每秒x张图)再图片合成视频
1. 视频分解成图片 ffmpeg -i rawVideo.mp4 -r 5 -f image2 img/%04d.png-i rawVideo.mp4 输入文件 -r 5 每秒5帧(1秒5张图) 可不写,默认每秒24帧 -f image2 表示输出的格式图像 可不写,默认图像 img/ 图片放在img文件夹下 %04d.png 图片的命名…...

冯喜运:6.7今日外汇黄金原油走势分析及日内操作策略
【黄金消息面分析】:美国初请失业金人数超预期,市场对美联储9月降息预期升温,全球降息潮起,黄金市场受支撑。北京时间本周四,美国劳工部公布的数据显示,截至6月1日当周初请失业金人数增加至22.9万人&#x…...

[网络基础]——计算机网络(OSI)参考模型 详解
🏡作者主页:点击! 🌐网络通信基础TCP/IP专栏:点击! ⏰️创作时间:2024年6月2日21点59分 🀄️文章质量:93分 目录 🎟️OSI基本概念 🎄分层架构…...
使用 Java 获取图片的 MD5 编码
在许多应用场景中,我们需要验证文件的完整性或唯一性,常用的方法是计算文件的哈希值。MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,可以生成一个128位的哈希值(32位的十六进制数字࿰…...
GO——泛型
泛型 对于强类型语言,在编写代码时不事先指定类型,在实例化的时候作为参数指明类型 参考:https://www.liwenzhou.com/posts/Go/generics/ 什么时候使用泛型? 方法中的代码实现与类型T无关参考:https://juejin.cn/p…...

TSP(Python):Qlearning求解旅行商问题TSP(提供Python代码)
一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…...

【精通NIO】NIO介绍
一、什么是NIO NIO,全称为New Input/Output,是Java平台中用于替代传统I/O(Blocking I/O)模型的一个功能强大的I/O API。NIO在Java 1.4版本中被引入,其设计目标是提供一种非阻塞的、低延迟的I/O操作方式,以…...

ssh远程管理
一、Openssh概述 Openssh是一种安全通道协议,用来实现字符界面的远程登录、远程复制、远程文本传输。 Openssh对通信双方的数据进行了加密。有两种方式: 用户名和密码登录:比较常用密钥对认证方式:可以实现免密登录 ssh端口&a…...

【ai】pycharm远程ssh开发
方式1: gateway的方式是远程放一个pycharm 专业版,经常下载失败 方式2: 类似vs,源码本地,同步到远程进行运行。 参考大神的分享: Pycharm远程连接服务器(2023-11-9) Pycharm远程连接服务器(windows下远程修改服务器代码)[通俗易懂] cpolar 建议同时内网穿透 选 远程开…...
leetcode 9 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而…...
学习Python的基础知识
目录 摘要 Python 的主要特点 基本语法 1. 变量和数据类型: 2. 条件语句: 3. 循环: 4. 函数: 5. 类和对象: 6. 列表和字典: 7. 文件I/O: Python 的学习路线 如何高效使用 Python 的…...
第五届上海市青少年算法竞赛网络同步赛(小学组)
第五届上海市青少年算法竞赛网络同步赛(小学组)T1. 符号译码_网络同步赛 内存限制: 256 Mb 时间限制: 1000 ms 题目描述 小爱为标点符号设计了一套编码系统,编码规则如下: [ 的编码为 010 ] 的编码为 101 < 的编码为 00 > 编码为 11 + 的编码为 011 - 编码为 100 根…...
【区分vue2和vue3下的element UI Cascader 级联选择器组件,分别详细介绍属性,事件,方法如何使用,并举例】
在Vue 2的Element UI和Vue 3的Element Plus中,el-cascader(级联选择器)组件用于从嵌套的数据中进行选择。以下是对这两个版本下el-cascader组件的属性、事件和方法的详细介绍,并附带示例。 Vue 2的Element UI el-cascader 属性…...

pottery,一个超酷的 Python 库!
更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超酷的 Python 库 - pottery。 Github地址:https://github.com/brainix/pottery 在分布式系统和高并发环境中,Redis 作为一种高性能的键值存储数据库,被广泛…...
【Android面试八股文】在Java中重载和重写是什么意思,区别是什么?
文章目录 在Java中重载和重写是什么意思,区别是什么?这道题想考察什么 ?考察的知识点考生应该如何回答重载(Overloading)重写(Overriding)重载和重写的区别在Java中重载和重写是什么意思,区别是什么? 这道题想考察什么 ? Java基础 考察的知识点 面向对象多态的基…...
【第二篇】SpringSecurity源码详解
一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用Spring Security XML名称空间进行配置或Spring Security的Java configura…...

基于Python+FFMPEG环境下载B站歌曲
题主环境 WSL on Windows10 命令如下 # python3.9 pip install --pre yutto yutto --batch https://www.bilibili.com/video/BV168411o7Bh --audio-only ls | grep aac | xargs -I {} ffmpeg -i {} -acodec libmp3lame {}.mp3WinAmp...

静态 VxLAN 浅析及配置示例(头端复制)
一、概念: VxLAN:Visual eXtensible Local Area Network 虚拟扩展本地局域网,一种隧道技术,能在三层网络的基础上建立二层以太网网络隧道,从而实现跨地域的二层互连,VxLAN端口:4789EVPN&#x…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...