分支和循环(1)


目录

前言

1.什么是语句?

 2.分支语句(选择语句)

2.1 if 语句

2.2if书写格式形式的对比

2.3 if 练习

2.4 switch 语句

2.5 switch 练习

总结


前言

分支合循环首先就是要有良好的代码风格,缩进得当,要不然真的很乱很不好理解,而且容易出现错误。在练习代码的时候或者平时写代码的时候还是要注意代码风格的问题。


1.什么是语句?

在进行学习本篇之前要先了解一下语句的概念

C语言语句可以分为以下五类:

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

本次学习的就是控制语句。

控制语句 用于控制程序的执行流程,以实现程序的各种结构方式,(C语言支持三种结构:顺序结构,选择结构,循环结构),他们由特定的语句定义符组成,C语言共有九种控制语句。

可以分为以下三类:

1.条件判断句也叫分支语句;if语句、switch语句;

2.循环执行语句:do while语句、while语句、for语句;

3.转向语句:break语句、goto语句、continue语句、return语句。

 C语言是一门结构化的程序设计语言,C语言可以支持三种结构:顺序结构,选择结构,循环结构,生活中所有的事情都可以用这三种结构表示出来。顾名思义顺序结构就是按照顺序从上到下依次运行程序,选择结构就是程序运行的时候可以有选择,循环结构就是到达某个条件或者开始就开始循环,反复执行程序。

 2.分支语句(选择语句)

以下就是一个抽象的分支语句逻辑:

就像你出生于罗马,但你没有选择好好学习,将来就会因为某些原因破产,但你要是选择好好学习,不管你出没出生在罗马,你都能有一个独一无二的美好的未来。

2.1 if 语句

//单分支
if(表达式)语句1:

单分支语句 ,表达式要是成立(为真)就执行语句1。

//双分支
if(表达式)语句1:
else语句2;

 这就是双分支语句,表达式要是成立(为真)就执行语句1,反之,就执行语句2 。

//多分支
if(表达式1)语句1:
else if(表达式2)语句2;
else语句3;

 这是多分支语句,表达式1要是成立(为真)就执行语句1,如果表达式2成立,就执行语句2,如果都不成立,就执行语句3,三选一的方式。

我们可以通过一个年龄代码块来判断:

int mian( )
{int age =0;scanf("%d",&age);if(age>=18)printf("成年\n");   //单分支if(age>=18)printf("成年\n");elseprintf("未成年\n");  //双分支if(age<16)              //多分支printf("少年\n");else if(age>=16 && age<30)printf("青年\n");else if(age>=30 && age<40)printf("中年\n");else if(age>=40 && age<56)printf("壮年\n");else if(age>=56 && age<80)printf("老年\n");else printf("老寿星\n");
}

上述代码就分别表示了单、双、多分支结构的if-else语句,同时if-else是可以进行嵌套的。

如果一个if-else语句内执行多个语句,那么就需要加上一个大括号,语句放在同一个大括号(代码块)里面:

if(表达式)
{语句1;语句2;
}    

如果不加上大括号那么久只能运行一句,因为 if 在C语言里面默认是只能运行一个语句的,同时不管if成不成立,语句2都会执行,因为if不包括语句2,同时代码是顺序执行的(一句一句执行),所以语句2一定会执行到。

2.2if书写格式形式的对比

在这里出现一串代码,可以先读完之后自己判断一下输出的到底是什么:

int main( )
{int a =0;int b =0;if(a == 1)if(b == 2)printf("123\n");elseprintf("456\n");return 0;
}

有可能会说这明明输出的是123,我在看的时候也错了,那么是456吗,实际上,什么也不输出,这段代码将其复制到编译器上就会发现它的会书写格式就会发生变化:

int main( )
{int a =0;int b =0;if(a == 1)if(b == 2)printf("123\n");elseprintf("456\n");return 0;
}

可见代码风格的重要,哪里缩进,哪里换行,都非常的重要。其中 else 是与最近的 if 进行匹配(当没有括号限制的时候)。

在这里再给出两段代码来进行分析:

//代码1
if(condition){return x;
}
return y;
//代码2
if(condition)
{return x;
}
else
{return y;
}

代码1是否是如果条件成立返回x,否则返回y,是的,这就是这个意思,但是代码1非常容易让人误解,而在看代码2,非常容易理解,看起来容易理解。

当我们在写一个程序来判断比较一个常量和一个变量是否相等的时候,把常量写在左边比较好,例如:

int main( )
{int  num = 5;if(10 == num){printf("OK\n");}return 0;
}

如果我们把num写在左边,中间忽略了一个等号的时候,相当于把num赋值,这样编译器还会执行里面的语句,就很难定位错误出现在哪里。而把常量写在左侧,当中间是一个等号的时候,编译器会告诉你哪里出现了错误。这样写比较好。代码风格比较优。注意是变量和常量比较的时候,如果是表达式和常量比较,那么放哪里都是一样的。

2.3 if 练习

输出1-100之间的奇数

可以自己在编译器上进行练习,首先要想这个程序需要用到什么?、

1、循环产生1-100的数字

2、判断产生数字是否为奇数

3、是奇数就打印

这样分布流程逻辑思维清楚,代码就好写。

int main( )
{int i =1;while(i<=100){if(i%2 == 1){printf("%d\n",i);}i++;}return 0;
}

定义一个整形变量i,初始值为1,从1开始循环,每次用i对2取余,如果余数是1,那么它就就是一个奇数,就打印出来,不管是不是,i都加1,直到i变成100后程序才结束,这样所有的奇数也就打印出来了。用其他的写法也可以,每次差2,就可以从1每次加2,还是奇数,这样就可以不用判断,所以后者更高效一些。

2.4 switch 语句

switch 也是一种分支语句,常常用于多分支结构。

比如:

输入1,输出星期一 

输入2,输出星期二

输入3,输出星期三 

输入4,输出星期四 

输入5,输出星期五 

输入6,输出星期六 

输入7,输出星期日 

如果用if...else来写的话,比较麻烦,形式比较复杂,但是用switch来写的话,就比较清晰明了。

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;default:printf("错误\n");break;}return 0;
}

 这里定义一个变量day,当输入数字的时候就会传入switch()里面,从而执行下面case对应的语句,符合哪个就运行哪个,这里每一个case后面都有break,可以试着把break删掉再运行看看,没有错误,只是输出不符合我们的预期,如果一个break没有,那么程序就会顺序执行,也就是每个语句都执行一遍,这里break就是起到了一个限制的作用;当我吗输入的数在case里没有对应值的时候,我们想要输出一个错误来说明没有这个数的对应值,就可以用 default来写,当输入的数不在这个范围内,那么程序就会直接运行 default里面的语句,放在最后的可以不写break,效果都一样,这就是switch语句。

switch(整形表达式)
{语句项:
}case 整形常量表达式:语句项;

这里注意,switch里面需要是整形表达式,case后面一定是整形而且还是常量才可以。

 case后面根据实际情况来加break,例如下面:

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;
}

这里目的就是输入1-5中的一个数,就输出工作日,而输出6或者7就输出休息日,其它的数字就输出错误 。这时候break就可以不用每个写,当输入1的时候,程序顺序执行,一直到break出现的时候才停止执行,而case1到case4没有任何操作,当到case5的时候才输出工作日,之后break。同理,休息日也是这个逻辑。所以break按需要来加。

switch是可以允许嵌套使用的。

2.5 switch 练习

下面是一个switch简单小代码,可以来进行分析:

int main( )
{int n =1;int m =2;switch(n){case 1: m++;case 2: n++;case 3:switch(n){case 1: n++;case 2:m++;n++;break;}case 4:m++;break;default:break;}printf("m = %d , n = %d\n",m,n);return 0;
}

最后结果是 m = 5, n = 3 , 一步一步分析就可以。break会跳出它所在的case范围,不会跳出好几个。


总结

以上就是今天要讲的内容,本文讲了分支语句的使用,以及一些分支语句的包含。

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

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

相关文章

横排文字、图层蒙版-1(2024年09月30日)

2024年09月30日 记录_导读 2024年09月30日 10:13 关键词 优惠券 设计 图层 背景 元素 调整 画笔工具 颜色 大小 位置 复制 移动 添加涂层 多选 显示 PS 元素文件 隐藏 使用规则 Logo 全文摘要 通过在Photoshop中精心操作图层&#xff0c;包括复制、移动和调整设置&#xf…

结构型模式-适配器-桥接-外观-代理

适配器模式 是什么 将一个类的接口转换成客户希望的另外一个接口 解决接口不兼容问题,复用之前的代码 实例 public class PoliceCarAdapter extends CarController { private PoliceSound sound;//定义适配者PoliceSound对象 private PoliceLamp lamp;//定义适配者Polic…

虚拟机U盘启动

二、注意事项 1、正确顺序是先插入U盘启动盘&#xff0c;再打开虚拟机&#xff0c;否则虚拟机无法检测到U盘&#xff1b; 2、如果已经打开虚拟机&#xff0c;则需关闭&#xff0c;插入U盘后重新开启。 3、设置好后如果换另一个U盘进行U盘启动&#xff0c;以下步骤要重新再设置&…

Python核心知识:pip使用方法大全

什么是 pip&#xff1f; pip 是 Python 的包管理工具&#xff0c;允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程&#xff0c;使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具&#xff0c;并且自 Python …

windows C++-UWP 应用中使用 HttpRequest 类

在 UWP 应用中使用 HttpRequest 类 本节演示在 UWP 应用中如何使用 HttpRequest 类。 应用程序会提供一个输入框&#xff0c;该输入框定义了一个 URL 资源、用于执行 GET 和 POST 操作的按钮命令和用于取消当前操作的按钮命令。 使用 HttpRequest 类 1. 在 MainPage.xaml 中…

8639 折半插入排序

### 思路 折半插入排序是一种改进的插入排序算法&#xff0c;通过二分查找来确定插入位置&#xff0c;从而减少比较次数。每次插入时&#xff0c;先用二分查找找到插入位置&#xff0c;然后将元素插入到正确的位置。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待…

class 030 异或运算的骚操作

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

【CKA】五、网络策略–NetworkPolicy

5、配置网络策略–NetworkPolicy 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 1、根据题目分析要创建怎样的网络策略 2、按题目要求查看ns corp-net的label 3、编写yaml&#xff0c;其中注意 namespace、label、port 3. 官网地址&#xff1a; https://kubernetes.io/…

解决connect因父类不明确而报错的问题

如图所示&#xff0c;connect函数报错&#xff0c;原因是connect的检查是在编译期完成的&#xff0c;而传入父类则是在运行时&#xff0c;从而引起connect不知道parent是谁而报错。只需加入类型转换即可。 connect(qobject_cast<TableWidget*>(parent), &TableWidg…

STM32F1+HAL库+FreeTOTS学习15——互斥信号量

STM32F1HAL库FreeTOTS学习15——互斥信号量 1. 优先级翻转2. 互斥信号量3. 相关API函数&#xff1b;3.1 互斥信号量创建3.2 获取信号量3.3 释放信号量3.4 删除信号量 4. 操作实验1. 实验内容2. 代码实现3. 运行结果 上期我们介绍了数值信号量。这一期我们来介绍互斥信号量 1. 优…

【计算机毕业设计】springboot企业客户信息反馈平台

摘 要 网络的广泛应用给生活带来了十分的便利。所以把企业客户信息反馈管理与现在网络相结合&#xff0c;利用java技术建设企业客户信息反馈平台&#xff0c;实现企业客户信息反馈的信息化。则对于进一步提高企业客户信息反馈管理发展&#xff0c;丰富企业客户信息反馈管理经验…

官网:视觉是第一记忆,没有记忆点的官网设计是失败的。

官方网站虽然不像之前那么火爆了&#xff0c;但是依然是企业展示品牌形象和吸引用户的重要渠道。仅仅拥有一个官方网站并不足以吸引用户&#xff0c;更重要的是网站的设计是否能够给用户留下深刻的记忆。 当前&#xff0c;用户对于网站的要求也越来越高&#xff0c;他们不仅仅希…

Arduino UNO R3自学笔记16 之 Arduino的定时器介绍及应用

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;学习定时器的功能。 1.定时器介绍 定时器也是一种中断&#xff0c;属于软件中断。 它就像一个时钟&#xff0c;可以测量事件的时间间隔。 比如早…

重置linux后vscode无法再次使用ssh连接

如果你使用过vscode ssh远程连接了一个Linux系统&#xff0c;但该系统被重置了&#xff0c;并且关键配置没有改变。再次使用vscode连接时&#xff0c;vscode可能无法连接。 原因&#xff1a;vscode远程连接后会在C:\Users{{你的用户名}}.ssh下的known_hosts和known_hosts.old。…

停止模式下USART为什么可以唤醒MCU?

在MCU的停止模式下&#xff0c;USART之类的外设时钟是关闭的&#xff0c;但是USART章节有描述到在停止模式下可以用USART来对MCU进行唤醒&#xff1a; 大家是否会好奇在外设的时钟被关闭的情况下&#xff0c;USART怎么能通过接收中断或者唤醒事件对MCU进行唤醒的呢&#xff1…

2024多模态大模型发展调研

随着生成式大语言模型应用的日益广泛&#xff0c;其输入输出模态受限的问题日益凸显&#xff0c;成为制约技术进一步发展的瓶颈。为突破这一局限&#xff0c;本文聚焦于研究多模态信息的协同交互策略&#xff0c;旨在探索一种能够统一理解与生成的多模态模型构建方法。在此基础…

基于springboot+小程序的在线选课管理系统1(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的在线选课管理系统实现了管理员、教师及学生。 1、管理员实现了首页、个人中心、管理员管理、教师管理、学生管理、课程信息管理、选课信息、公告管理、论坛管理、基…

Redis哨兵模式的搭建以及配置参数简介

原理 Redis哨兵模式是一种用于在Redis主从复制环境中进行高可用性监控和故障恢复的机制。该模式引入了一个或多个哨兵节点&#xff0c;这些节点负责监控Redis服务器的状态&#xff0c;并在主节点发生故障时切换为新的主节点。 哨兵节点的工作原理如下&#xff1a; 1、哨兵节点…

PDF阅读器工具集萃:满足你的多样需求

现在阅读书籍大部分都喜欢电子书的形式了吧&#xff0c;因为小小的一个设备就能存下上万本书。从流传程度来说PDF无疑是一个使用最广的格式。除了福昕PDF阅读器阅读之外还有哪些好用的阅读工具呢/&#xff1f;今天我们一起来探讨一下吧。 1.福昕阅读器 链接一下>>www.f…

MongoDB微服务部署

一、安装MongoDB 1.在linux中拉去MongoDB镜像文件 docker pull mongo:4.4.18 2. 2.创建数据挂载目录 linux命令创建 命令创建目录: mkdir -p /usr/local/docker/mongodb/data 可以在sshclient工具查看是否创建成功。 进入moogodb目录&#xff0c;给data赋予权限777 cd …