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 中的几乎一模一样

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

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

相关文章

栈和队列题目练习

本节小编选了两道题来加深对栈和队列的认识理解&#xff01; 有效的括号 方法1&#xff1a;直接用栈的结构&#xff08;动态数组&#xff09; 本题可以用栈这个结构来解答&#xff0c;将(,{,[ 左括号压入栈中&#xff0c;然后取出栈顶元素与右括号),},]匹配。不匹配的话&…

单片机通信协议(1):SPI简介

关于SPI SPI&#xff08;串行外设接口&#xff09;是板载设备间通信接口之一。它是由摩托罗拉公司&#xff08;飞思卡尔半导体&#xff09;推出的。由于其简单性和通用性&#xff0c;它被纳入各种外围设备中&#xff0c;并与飞利浦I2C总线并列。 SPI的三线或四线信号数量比IIC…

OSPF状态机+SPF算法

OSPF状态机 1.点到点网络类型 down-->init-->(前提为可以建立邻接)exstart——>exchange-->若查看邻接的DBD 目录后发现不用进行LSA 直接进入ful。若查看后需要进行查询、应答先进入loading&#xff0c;在查询应答完后再进入 fuIl: 2.MA网络类型 down --&g…

【C++修行之道】类和对象(三)拷贝构造函数

目录 一、 概念 二、特征 正确的拷贝构造函数写法&#xff1a; 拷贝函数的另一种写法 三、若未显式定义&#xff0c;编译器会生成默认的拷贝构造函数。 四、编译器生成的默认拷贝构造函数已经可以完成字节序的值拷贝了&#xff0c;还需要自己显式实现吗&#xff1f; 深拷…

Transformer 动画讲解:数据处理的四大关键步骤

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述 关于此文&#xff0c;我的一个见解想法&#xff0c;重点关注他怎么描述 「Diffusion Model」的引用的&#xff0c;以及未来方向就好了。当然从这篇文章可以知道 「Diffusion Model」的一个基石…

【哈希】用哈希桶封装unordered_map unordered_set

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 用哈希桶封装 unordered_map & unordered_set 的相关内容。 如…

Linux系统使用Docker安装Drupal结合内网穿透实现远程访问管理后台

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Linux系统使用Docker安装Drupal…

python在cmd中运行.exe文件时报错:不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

添加系统环境变量&#xff1a; 设置环境变量&#xff0c;在用户变量里面添加 【PATH&#xff1a;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Windows\SysWOW64】 在系统变量里面添加,【变量名&#xff1a;ComSpec】 【变量值&#xff1a;%SystemRoo…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的…

适合能源企业的文档安全外发系统应该是什么样的?

能源企业是市场经济中的重要组成&#xff0c;也是社会可持续长远发展的关键组成之一&#xff0c;能源行业在开拓新能源业务线、提升产能的日常经营中&#xff0c;也需要与外部合作伙伴、客户间进行密切的业务往来&#xff0c;文档可能涉及多个领域多个类型。 能源供应合同&…

IDEA2023.2单击Setting提示报错:Cannot get children Easy Code

1、单击Setting&#xff0c;不能弹出对话框 2、打开IDE Internal Errors发生错误 原因&#xff1a; 报错信息 "Cannot get children Easy Code" 通常指的是 IntelliJ IDEA 在尝试访问或操作 Easy Code 插件的子设置时遇到了问题。 主要检查是有网络&#xff08;断断…

【排序算法】选择排序以及需要注意的问题

选择排序的基本思想&#xff1a;每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 第一种实现方法&#xff1a; void SelectSort(int* arr, int n) {for (int j 0…

安装 Android Studio 2024.1.1.6(Koala SDK35)和过程问题解决

记录更新Android Studio版本及适配Android V应用配置的一些过程问题。 安装包&#xff1a;android-studio-2024.1.1.6-windows.exe原版本&#xff1a;Android Studio23.2.1.23 Koala 安装过程 Uninstall old version 不会删除原本配置&#xff08;左下角提示&#xff09; Un…

数据结构第二篇【关于java线性表(顺序表)的基本操作】

【关于java线性表&#xff08;顺序表&#xff09;的基本操作】 线性表是什么&#xff1f;&#x1f435;&#x1f412;&#x1f98d;顺序表的定义&#x1f9a7;&#x1f436;&#x1f435;创建顺序表新增元素,默认在数组最后新增在 pos 位置新增元素判定是否包含某个元素查找某个…

如何解决研发数据传输层面安全可控、可追溯的共性需求?

研发数据在企业内部跨网文件交换&#xff0c;是相对较为普遍而频繁的文件流转需求&#xff0c;基于国家法律法规要求及自身安全管理需要&#xff0c;许多企业进行内部网络隔离。不同企业隔离方案各不相同&#xff0c;比如银行内部将网络隔离为生产网、办公网、DMZ区&#xff0c…

Linux编程基础 8.4:epoll工作模式

1 简介 poll机制的工作原理及流程与select类似&#xff0c;但poll可监控的进程数量不受select中第二个因素——fd_set集合容量的限制&#xff0c;用户可在程序中自行设置被监测的文件描述符集的容量&#xff0c;当然poll在阻塞模式下也采用轮询的方式监测文件描述符集&#xf…

相对位姿估计

相对位姿估计 示意图 理论推导 离线数据库&#xff1a; P的位置 P [ X , Y , Z ] T P[X,Y,Z]^{T} P[X,Y,Z]T 相机内参 k 1 k_{1} k1​ 安卓手机&#xff1a; 相机内参 k 2 k_{2} k2​ 两个像素点位置 &#xff1a; p 1 和 p 2 p_1和p_2 p1​和p2​ 公式一&#xff1a;…

Python魔法之旅-魔法方法(04)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

2年go蓝炎科技、爱诗科技面试经历,期望薪资22K

广州蓝炎科技一面 1、简单自我介绍&#xff1f;用的什么技术栈&#xff1f; 2、go的map是线程安全的吗&#xff1f; 3、Channel一般会在什么场景下使用&#xff1f;往一个未初始化的channel发送数据&#xff0c;会怎样&#xff1f; 4、关于go里头的随机数是线程安全的吗&am…