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

【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。

完。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C语言指针和数组梳理
  • opencv之图像轮廓(三)--凸包
  • Unity SRP 可编程渲染管线的基本用法
  • Python——俄罗斯方块
  • 『功能项目』切换职业面板【48】
  • 笔试强训day13
  • MySQL索引-聚簇索引和非聚簇索引
  • Android 11 FileProvider的使用和限制
  • URL的执行流程
  • 【C-项目】网盘(一期,线程池版)
  • react 安装使用 antd+国际化+定制化主题+样式兼容
  • 进程vs线程:高效并发编程的基石
  • fsck 命令:修复文件系统错误
  • AI时代的到来,让英文写作变得简单
  • python常用框架及使用方法
  • 【comparator, comparable】小总结
  • 【刷算法】从上往下打印二叉树
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ES6系列(二)变量的解构赋值
  • js 实现textarea输入字数提示
  • PhantomJS 安装
  • Python 基础起步 (十) 什么叫函数?
  • uva 10370 Above Average
  • vue数据传递--我有特殊的实现技巧
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 初识MongoDB分片
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 机器学习 vs. 深度学习
  • 前端面试题总结
  • 如何在GitHub上创建个人博客
  • 思否第一天
  • 微服务框架lagom
  • 小程序开发中的那些坑
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)Nginx简介和安装教程
  • (PADS学习)第二章:原理图绘制 第一部分
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (七)Java对象在Hibernate持久化层的状态
  • (一)80c52学习之旅-起始篇
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)虚函数剖析
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .Net下的签名与混淆
  • .NET应用架构设计:原则、模式与实践 目录预览
  • ::
  • :如何用SQL脚本保存存储过程返回的结果集
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @EnableWebMvc介绍和使用详细demo