【C语言】分支和循环(下)

分支和循环(下)

    • 5、练习:判断年份是否为闰年
    • 6、短路
    • 7、switch语句
      • 7.1 if语句和switch语句的对比
      • 7.2switch语句中的break语句
      • 7.3switch语句中的default
      • 7.4 switch语句中的case和default的顺序问题
    • 8、while循环
      • 8.1 if和while的对比
      • 8.2 while语句的执行流程
      • 8.3while循环的应用
      • 8.4 练习
    • 9、for循环
      • 9.1for循环的语法形式
      • 9.2 for循环的执行流程
      • 9.3for循环的应用
      • 9.4while循环和for循环的对比
      • 9.5 练习
    • 10、do-while循环
      • 10.1语法形式
      • 10.2do while循环的执行流程
      • 10.3 do while循环应用
      • 10.4 练习
    • 11.break和continue语句
      • 11.1 while循环中的break和continue
        • 11.1.1 break举例
        • 11.1.2 continue举例
      • 11.2 for循环中的break和continue
        • 11.2.1 break举例
        • 11.2.2 continue举例
      • 11.3 do while循环中的break和continue
      • 12、循环的嵌套
        • 12.1 练习
    • 13、goto语句
    • 14、关机程序

5、练习:判断年份是否为闰年

判断闰年的规则:
1.能被4整除并且不能被100整除是闰年;
2.能被400整除是闰年;
下面是代码演示:
在这里插入图片描述
当然左右两边的条件也可以不用或者||符号表示也可以拆开用 if…else if…的方法来改写,输出的效果是一样的

6、短路

C语言逻辑运算符总是先对左侧的表达式求解值,再对右边的表达式求解值,即运算顺序是从左向右进行的。

如果左边的表达式满足整个逻辑运算的条件,右边的表达式便不再求值,我们形象地把这个C语言逻辑运算现象称为“短路”。

下面进行代码演示:

与(&&)操作符的短路情况
在这里插入图片描述

或(||)操作符的短路情况:

在这里插入图片描述
像上面例子举例的仅仅根据左操作数就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。

短路求值练习:
请看如下代码,并计算出代码会输出的值。
在这里插入图片描述
解析:
在这里插入图片描述
在这里插入图片描述

7、switch语句

选择结构除了if语句之外还可以通过switch语句来实现。
switch语句时一种特殊形式的if…else结构,用来判断条件有多个结果的情况。switch语句可以简化if…else语句代码,使得代码简洁不会显得冗长。
下面介绍一下switch的使用方法:

switch(expression)
{
case value1:statement
case value2:statement
default:statement
}

根据expression不同的值,执行对应的case分支。如果找不到对应的值,就执行default分支。
注意:

  • switch后面的expression必须是整型表达式
  • case后面的值,必须是整型常量表达式

7.1 if语句和switch语句的对比

练习:输入任意一个整数值,计算除3之后的余数。
在这里插入图片描述
在这里插入图片描述
注意:

  • case和后面的数字之间需要有空格。
  • 每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句。

7.2switch语句中的break语句

根据前面的代码,我们在每个case语句后面都加上break结束,那么如果去掉break会有什么样的效果呢?
在这里插入图片描述
从图中我们可以看到,当输入结果是6时可以被3整除,它却打印出三个余数,这是因为switch语句也是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果某一个case语句的后边 没有break语句,代码才会继续往下执行,有可能执行其他case语句中的代码,直到遇到break语句或者switch语句结束。比如上面的代码就执行了case 1和case2中的语句。
所以switch中的break语句是非常重要的,这样才能实现真正的分支效果。
当然break并不是每个case都需要有的,需要根据具体问题具体分析。

练习:
输入1-7的数字,打印对应的星期几。
eg:
输入:1输出:星期一
输入:2输出:星期二
输入:3输出:星期三
输入:4输出:星期四
输入:5输出:星期五
输入:6输出:星期六
输入:7输出:星期日。

解析代码如下:
在这里插入图片描述

拓展练习:根据上述题意,如果改变需求:

  • 输入1-5,输出的是“工作日”;
  • 输入6-7,输出的是“休息日”;

下面拓展练习的代码演示:

在这里插入图片描述
在这里插入图片描述

对于本题可以采取减少break来简化代码,简化后的代码如下:

在这里插入图片描述

通过上述的练习,我们发现对于不同的题目需要根据实际情况来使用break,以简化代码以及正确完成题目要求。

7.3switch语句中的default

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

switch(expression)
{
case value1:statement;
case value2:statement;
default:statement;
}

switch后面的expression的结果不是value1和value2的时候,就会执行default子句。

前面做过的练习中,如果day输入的范围不在1-7之间时,我们就可以使用default语句来提示重新输入。

在这里插入图片描述

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

通常我们在写switch语句的时候都会把case子句写在前面,default子句写在后面,那么switch语句中的case和default有顺序问题吗?其实只要满足题目要求case和default谁在前谁在后都可以,不过按照书写习惯我们一般都是把default写在后面。
在这里插入图片描述

8、while循环

C语言提供3种循环语句,而while就是其中的一种语句,下面我们来介绍一下while语句。
while语句的语法结构与if语句类似。

8.1 if和while的对比

if(表达式)语句;while(表达式)语句;//循环体包含两句及以上的语句,需要加上大括号。

接下来展示一组if和while语句进行对比,代码如下:
在这里插入图片描述
看似两段代码中的不同只有if和while,那么它们运行的结果是否会一样呢?

在这里插入图片描述
在这里插入图片描述
从上述两段代码的运行结果我们可以看到:if语句只进行一次判断一次输出(haha),但是使用while循环语句却进入无限打印haha的死循环中,由此我们可以得到结论:while在本题中是进行无限循环判断的。

为了更加清楚的明白while语句的执行流程,下面会用一张图片来说明while循环的具体流程。

8.2 while语句的执行流程

在这里插入图片描述
首先对表达式进行判断,如果值为0(假),则循环直接结束,如果值不为0,则执行语句,执行语句后再进行判断真假,直至判断为假时结束本次循环。

8.3while循环的应用

练习:在屏幕上打印1-10的值

在这里插入图片描述

8.4 练习

输入一个正的整数,逆序打印这个整数的每一位。eg:输入:1234,输出:4321。
在这里插入图片描述

9、for循环

9.1for循环的语法形式

for循环是三种循环中使用最多的循环语句,for循环的语法形式如下:

for(表达式1:表达式2:表达式3)语句;//如果循环体包括两句及以上的句子,必须加上大括号。

解释:
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断(判断表达式)
表达式3 用于循环变量的调整

9.2 for循环的执行流程

在这里插入图片描述
for循环的执行流程

说明:首先执行表达式1初始化变量,接下来执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,之后再去表达式2进行判断,以此循环进行直至循环结束。
注意:整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3进行循环。

9.3for循环的应用

练习:在屏幕上打印1-10的值

代码解析如下:
在这里插入图片描述

9.4while循环和for循环的对比

while循环
在这里插入图片描述
for循环
在这里插入图片描述
for和while在实现循环的过程中都有初始化、判断、调整三个部分,但是for循环的三个部分非常集中,便于代码维护,而如果代码较多的时候while循环的三个部分就比较分散。所以for循环的集中代码更有优势一点。

9.5 练习

计算1-100之间3的倍数的数字之和

代码解析如下:
在这里插入图片描述

改写简化版本:
在这里插入图片描述

10、do-while循环

10.1语法形式

在循环语句 do while语句使用最少,语法形式如下:

do语句;
while(表达式)

while和for这两种循环都是先判断,条件如果满足进入循环,执行循环语句,不满足则跳出循环结束。

但是 do while循环则是先进入循环体,然后再执行while判断,如果表达式为真,进行下一次,表达式为假则结束。

10.2do while循环的执行流程

在这里插入图片描述
在do while循环中先执行图上的语句,执行完语句再执行判断表达式,如果判断表达式!=0(true),则继续循环,如果判断表达式==0,则循环结束。

在do while循环中上来先执行语句再判断,所以整个循环至少执行一次语句

10.3 do while循环应用

练习:在屏幕上打印1-10的值

在这里插入图片描述

10.4 练习

输入一个正整数,计算这个整数是几位数?
eg:输入:1234 输出:4
输入:12 输出:2

在这里插入图片描述

11.break和continue语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环是普遍的现象。因此c语言中提供了break和continue两个关键字,应用到循环中的。

  • break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。
  • continue的作用是跳过本次循环中continue后边的代码,在for循环和while循环中有所差异。

11.1 while循环中的break和continue

11.1.1 break举例

在这里插入图片描述
从上述举例中得出,break的作用就是永久终止循环,之后我们想在某种条件下终止循环,则可以用break来完成我们想要的效果。

11.1.2 continue举例

continue是继续的意思,在循环中的作用就是跳过本次循环continue后面的代码继续下一次循环的判断。
请看下面的代码:

在这里插入图片描述
从上述例子可以得出:如果循环的调整是在continue后边的话,可能会造成死循环。

11.2 for循环中的break和continue

11.2.1 break举例

在这里插入图片描述

11.2.2 continue举例

在这里插入图片描述

11.3 do while循环中的break和continue

do while 语句中的break和continue的作用和while循环中几乎一模一样。故参考前面while循环的break和continue语句

12、循环的嵌套

前面介绍了三种循环 while、 for、 do while,这三种循环一般嵌套在一起可以更好地解决问题,这就是循环嵌套,接下来用例子来说明。

12.1 练习

找出100-200之间的素数,并打印在屏幕上
在这里插入图片描述

13、goto语句

goto语句可以实现在同一个函数内跳转到设置好的跳转标号,goto语句可以实现在同一个函数内跳转到设置好的标号处。

在这里插入图片描述

14、关机程序

1、程序运行起来的时候,就开始倒计时60s关机。
2、如果能输入我是250则取消关机

在这里插入图片描述
温馨提醒:本关机代码仅供学习参考使用,请勿恶搞他人电脑qwq。

完。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++_20_多态

多继承会造成 菱形继承** 使用虚继承来解决 不是给爷爷类加 也不是给子类加 是给父类加 虚基指针和虚基表 多态 概念: 概念: 一个事物的多种形态,简称多态 如: 对象的多态 ​ 张三 ​ 在对象面前 怂 ​ 在朋友面前 谄媚 ​ 在父…

搜索二叉树BSTree的原理及实现

目录 一、简介 二、功能的实现 节点的实现 这里为什么模板参数采用的是K而不是T呢? 树体的实现 非递归版本 Insert函数 Find函数 Erase函数 递归版本 中序遍历 FindR InsertR EraseR 构造函数 析构函数 拷贝构造 赋值重载 一、简介 BSTree&#x…

【CS110L】Rust语言 Lecture3-4 笔记

文章目录 第三讲 所有权:移动与借用&例1例2例3 错误处理(开头)为什么空指针如此危险,我们能做什么以应对?— 引出Optionis_none()函数unwrap_or()函数常见用法 第四讲 代码实践:链表Box节点和链表的定义节点和链表的构造函数判…

Hack the 21LTR: Scene 1 靶机

靶机配置 kali配置 虚拟网络适配器配置 不行的时候关闭虚拟机,多点几次生成 主机发现和端口扫描 主机发现 arp-scan -l 端口扫描 端口扫描发现21,22,80端口开放 nmap -sV -A -T4 192.168.2.120 访问80端口 http://192.168.2.120/ 查看页…

SOMEIP_ETS_108: SD_Deregister_from_Eventgroup

测试目的: 验证DUT在接收到StopSubscribeEventgroup消息并取消订阅后,不会响应TestEventUINT8触发的事件。 描述 本测试用例旨在确保DUT在取消对事件组的订阅后,不会对随后的事件触发做出响应。 测试拓扑: 具体步骤&#xff1…

.NET内网实战:通过命令行解密Web.config

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。 02基本介绍 本文内容部分节选自小报童…

Spring Boot集成Akka Cluster快速入门Demo

1.什么是Akka Cluster? Akka Cluster将多个JVM连接整合在一起,实现消息地址的透明化和统一化使用管理,集成一体化的消息驱动系统。最终目的是将一个大型程序分割成若干子程序,部署到很多JVM上去实现程序的分布式并行运算&#xf…

编译原理之预处理

目录 生成预处理文件的的命令 预处理做了什么 实验 --------------------------------------------------------------------------------------------------------------------------------- 本篇文章主要是带着大家一起看看预处理阶段编译器都做了些什么 --------------…

十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明

十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明 文章目录 十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明1. 基本介绍2. 准备工作:3. 内置 Tomcat 的配置3.1 第…

Git项目管理工具

分布式版本控制系统

62. 不同路径、64. 最小路径和

思路 dp:代表到达当前位置的总方式 初始化:第一行的位置dp[0][j]:当前位置只能由左边的位置向右移动得到 所以只有1种方式 d[0][j]1, d[0][0]1 第一列的位置 dp[i][0]:当前位置只能由上一个位置向下移动得到 除此之外的位置可以由…

【Python】基本使用

目录 变量的类型 整数 int 浮点数 float 字符串 str 字符串长度 格式化字符串 布尔类型 动态类型 注释 获取输入 浮点数比较 多元赋值 for循环 函数的定义和调用 创建函数/定义函数 调用函数/使用函数 列表 创建列表 切片操作 遍历列表 新增元素 判断元…

2024最全网络安全工程师面试题(附答案),金九银十找工作必看!

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

[matlab]matlab调用python的各种方法

前言 在MATLAB中,可以使用 py 函数来调用Python模块和函数。在此基础上,我们可以很轻易的调用python中的各种模块,方便我们在神经网络上的应用仿真。 以下是使用MATLAB调用Python模块的基本步骤: 确保你的系统已经正确安装了Py…

文心一言 VS 讯飞星火 VS chatgpt (347)-- 算法导论23.2 6题

六、假定一个图中所有的边权重均匀分布在半开区间[0,1)内。Prim算法和Kruskal算法哪一个可以运行得更快?如果要写代码,请用go语言。 文心一言: 在比较Prim算法和Kruskal算法在特定条件下的性能时,我们需要考虑几个因素&#xff…

复杂情感识别系统

复杂情感识别系统(CERS)是一种先进的技术平台,旨在通过分析情感的组合、相互关系及其动态变化来解读和识别复杂的情感状态。这种系统通常采用以下技术和方法: 机器学习与深度学习: 通过训练算法识别和解释大量情感数据…

[Linux]:进程间通信(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程间通信介绍 1.1 进程间通信的概念 进程间通信简称IPC(In…

jdk相关介绍

JDK,全称Java Development Kit,是Java语言开发的基础工具包。它包含了Java运行时环境(JRE)以及用于开发Java应用程序的各种工具和库。JDK为Java程序员提供了编译、调试和运行Java应用程序所需的全部环境。 JDK的主要组成部分包括&…

离线数仓DWD层

离线数仓DWD层 DWD层设计要点:9.1 交易域加购事务事实表9.2 交易域下单事务事实表9.3 交易域取消订单事务事实表9.4 交易域支付成功事务事实表9.5 交易域退单事务事实表9.6 交易域退款成功事务事实表9.7 交易域购物车周期快照事实表9.8 工具域优惠券领取事务事实表9…

2024/9/15 408“回头看”之应用层小总结(下)

域名系统DNS: 本地域名服务器 本地域名服务器起着代理的作用,会将报文转发到根域名服务器、顶级域名服务器、权限域名服务器。 递归查询: 迭代查询: 文件传送协议FTP: FTP客户和FTP服务器之间使用的是tcp连接。 控制连接使用21端口&…