C语言分支循环语句

一、前言

在c语言的学习中,循环结构非常重要,主要有while循环,do while循环,for循环,steam,让我们一起学习一下。

二、分支

1.if语句

在这里插入图片描述
括号中结果为真,则执行语句,括号中结果为假,则跳出。
例子:输入值,判断是否为四的倍数。
在这里插入图片描述
以上代码还有一些地方可以做的更好,比如若不是四的倍数,则对输入者进行提示。那么就有了else语句可供使用。

2.else语句

1 if(条件)
2 语句1
3 else(条件)
4语句2

在第一个括号中为真则执行语句1,为假,则判断第二个括号中条件,为真,则执行语句2,为假则跳出循环。
例子:(同上)
在这里插入图片描述
ps:(while语句是为了方便多次输入,具体后面会讲到)
if和else语句有一些用法规则,具体解释如下

3. 分⽀中包含多条语句

if和else语句后只能影响一条语句。给大家举一个例子。
例子:
在这里插入图片描述

那么根据上图我们明显发现了问题,当输入的数字不是四的倍数时,没有跳出循环,输出了:“不是五的倍数”。而当数字是四的倍数时,输出了两条,说明if只读取了下面的第一条信息。

为了让大家看的更清楚,请看下图调试结果。

在这里插入图片描述

可以看到右边,当我们的a输入值为5时,系统在if筛选后直接跳到了第43行代码,也就意味着if并不会影响43行代码。

那么如果我们想要同时输入两条代码要怎么办呢?
我们需要用大括号括起来
在这里插入图片描述
这样就可以同时输出两行内容。

大括号是非常重要的,建议每次写都带上大括号,一是避免发生错误和歧义,二是使看代码的人能更容易理解你的代码,自己后期调试,也好改错。

大括号也关乎到else的归属问题。
为了让大家更直观了解大括号的好处,请大家看以下代码。
例子:
在这里插入图片描述

如图就出现一个问题else是归第一个if还是归第二个if。
以上代码如果我希望的是如果是四的倍数,那么进入第二个if看是不是五的倍数,如果是就输出:“是四和五的倍数”。如果不是就跳出循环。如果不是四的倍数就输出:“不是四的倍数”。那么这个程序可以实现吗?

那么看一下代码运行结果

在这里插入图片描述

那么从图中发现出现错误了,那么我们根据结果可以推测,else属于第二个if。当不是五的倍数时,输出:“不是四的倍数”。

接下来我们调试验证一下。

在这里插入图片描述

我们发现,当a为16时,走过第一条if后,接下来执行了第二个if,这并不是我们的程序目的。

这个时候就体现出大括号的重要性了。
在这里插入图片描述

如此,达到了我们的目的,并且我们后期看,或者别人看也不会出现问题。

由此我们也得到一个结论,就是else会默认跟随最近的一个if。(我们首先要记得带大括号,保证我们自己的代码不出问题,如果看别人代码遇到一些人写错,也要知道原因。)

4.嵌套if

在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

在这里插入图片描述

如图代码就可以可以实现数字是不是四的倍数或五的倍数。(你要是喜欢,你可以写一万个else if 去实现你的目的)

PS:最好都带上大括号,哪怕后面只执行一条语句。

三.操作符

1.关系操作符

有以下操作符

a>b⼤于运算符
a<b小于运算符
a<=b小于等于运算符
a>=b⼤于等于运算符
a==b相等运算符
a!=b不相等运算符

这些操作符比较简单,只有相等操作符需要注意。
“==”是判断是否相等。
“=”是赋值。

关系表达式通常返回 0 或 1 ,表⽰真假。
在这里插入图片描述
在这里插入图片描述

以上两张图片,印证了两个事情.
1."=“是赋值符号.
2.if的括号内0代表假,其他数字为真(括号内为bool式,不是假就是真,其他数字被识别成"1”)
当"a=3"时是把3赋值给a的意思.

2.条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
例子:
在这里插入图片描述
可简化为:
在这里插入图片描述

3.逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。

• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

3.1、逻辑取反运算符 !

在这里插入图片描述
⽐如,我们有⼀个变量叫 flag ,如果flag为假,要做⼀个什么事情,就可以这样写代码:
在这里插入图片描述
如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。

4.2 、与运算符

在这里插入图片描述
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
例子:

在这里插入图片描述

意思就是输入数字要同时满足是四和五的倍数。

4.3、 或运算符

在这里插入图片描述
|| (shift+enter键上面的键)就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
例子:我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天,那么我们怎么使⽤代码体现呢?
在这里插入图片描述

4.switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。

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

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执⾏ default 分⽀。
接下来我们拿switch与if进行对比。
例子:输出数字除以3后的余数。
(1)switch:
在这里插入图片描述

(2) if :
在这里插入图片描述

两者在代码长度上差距不是太大,但是面对多种情况分类,switch函数具有更清晰,更简洁的特点。

4.1、break语句

在上图switch函数中,我们看到了“break;”,那么其中break起到什么作用呢?
我们把break去掉看一下 :
在这里插入图片描述
我们发现当数字小时,输出还没有问题,当数字大了之后,结果出现了错误。
那我们调试找一下原因 :
在这里插入图片描述

我们对函数进行改造,为了计数一共走了几次case,i的值就是走过case的次数。

我们发现当输入值为40时,函数再走过一次case时(i=1),系统又读到了第69行,原因是函数在进行一次循环后没有跳出,又一次被“%3”了,才出现了这种情况,所以break函数的作用就是在执行一次之后跳出去。

4.2、default语句

有的时候我们在现实设计中,会出现其他情况,不在我们所设置的情况中,那么default就可以解决这一种情况。
就比如我们在设计小游戏时,我们希望用户输入1开始游戏,输入0结束游戏,但是现实中可能会出现输入别的数字的情况,为了增加我们程序的容错性,那么我们就可以用default解决。
例子 :
在这里插入图片描述

这样就可以增强容错。

####猜数字小游戏####
感兴趣的可以点卡链接看一下。

四、循环

1.while循环

我们来把if和while进行一下比较。

if (条件)
表达式


while (条件)
表达式

这样看起来好像差不多?
那我们写一个程序直观的看一下。
if :

在这里插入图片描述
while :

在这里插入图片描述
我们发现while陷入了死循环,while的括号中其实相当于bool式,当括号内为1时,也就是为真,进入循环打印“啊啊啊啊啊啊”,然后打印完了之后再次回来进行判断,发现还是1,再次进入循环。这就是while的基本原理。
在这里插入图片描述

这样也就能接上之前“while(scanf(“%d”.a))”可以重复输入的原因了。
只要我输入值,那么就会进入循环,只不过是死循环。这是唯一的缺点,如果想优化可以写成

whilea(scanf(“%d”,a)!=EOF)

超详解 - 如何理解C语言中while(scanf(“%d“, &num) != EOF)这一表达式?
(这是我粘别人的)

2. for循环

while循环需要我们对变量赋值,对循环进行判断,然后对循环变量进行调整。
那么有没有更简便的方法呢?

  •  for(表达式1;表达式2;表达式3)
          赋值     条件     循环
    
  •  语句
    

表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

for 循环就可以简便这一过程。
我们来举一个例子对比一下。
例子 : 循环打印1–10,十个数字。
while :
在这里插入图片描述

for :
在这里插入图片描述

由此可以看出for循环的优势,可以更简洁的对表达式进行处理。

接下来我们来看一个特殊的例子:
(1)
在这里插入图片描述
(2)
在这里插入图片描述

大家先看看这两个程序有什么不同,以及sum1和sum2的取值是否有不同。
*
*
*
*
*
*
*
*
*
(1)
在这里插入图片描述
(2)
在这里插入图片描述

所以想到了吗?
两给程序仅仅相差一个” ; “结果相差这么大。
那原因是什么呢?
我们来调试看一下:
在这里插入图片描述

我们发现带上” ; “的for表达式经过之后直接b直接变成11。
“其实就相当于一个句号。直接把整个语句执行完了而没有进行下面的程序,所以b直接变成了11。所以大家在写代码时一定要记得for循环不能带”“。

3. do while循环

有的时候我们需要先进行一次循环然后再判断,那么就可以用do while循环。

  • do
  • 语句
  • while(表达式)

这个就可以用于小游戏设计,进行菜单的打印。
在这里插入图片描述
这样从一开始就就有一个菜单。方便我们观看。

五、总结

本文总结性的介绍了分支和循环语句

1.分支语句主要有if,else。
2.操作符有关系操作符,条件操作符,逻辑操作符,switch语句。
3.循环有while循环,for循环,do while循环。
4.我只是一个初学小白,希望我们共同进步。
5.感谢大家支持!如果表述不当之处,欢迎各位斧正!
6.
在这里插入图片描述
与君共勉!!!!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值