C语言:分支循环语句的详解

本文介绍了C语言中的结构化编程概念,重点讲解了顺序、选择(if,switch)、循环(if,while,for,dowhile)结构,以及操作符、逻辑运算符的使用。此外,详细解释了if、else、switch、while、for、break、continue和goto语句的语法和应用,强调了合理使用这些结构和语句的重要性。
摘要由CSDN通过智能技术生成

首先,开宗明义,C语言是结构化的程序设计语言。那么,这里的结构是什么意思呢?其实这里的结构指的就是(1)顺序结构,(2)选择结构,(3)循环结构。

通过我们今天所介绍的分支循环语句可以实现这三种结构,比如通过if,switch语句实现分支语句,通过for,while,do while实现循环语句。

在介绍分支循环语句之前我们不得不了解一定的操作符,因为在C语言中除控制语句和输入/输出语句以外,几乎所有基本操作都会用到操作符,我们下面要讲的分支循环语句也不例外。

(1)一些简单操作符的介绍

今天,我们先来了解一些简单的操作符

1.算术操作符

算术操作符用于各类数值运算,有如下几个:

+ 加法操作符

- 减法操作符

* 乘法操作符

/ 除法操作符

% 求余操作符

++ 自增操作符(后期会出一期关于操作符的介绍)

-- 自减操作符

(除自增操作符自减操作符外)其他操作符运用与数学中类似这里不再举例

2.关系操作符

关系操作符用于比较运算,主要有以下6个。

> 大于操作符

< 小于操作符

== 等于操作符

>= 大于等于操作符

<= 小于等于操作符

!= 不等于操作符

关系表达式通常返回 0 或 1 ,表⽰真假。
C 语言中, 0 表示假,所有非零值表示真。比如, 20 > 12 返回 1 , 12 > 20 返回 0 。
关系表达式常用于 if 或 while 结构。

3. 条件操作符


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

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

4.逻辑操作符

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符
! :逻辑取反运算符(改变单个表达式的真假)

&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)

|| :或运算符,就是或者的意思(两侧至少有⼀个表达式为真,则为真,否则为假)

(2)if语句

在了解语句之前我们再补充一个小知识点

C语言中几乎所有的运算都是在表达式中完成的。表达式是由运算符将各种数据类型的变量、常量和函数等运算对象按一定的语法规则连接成的式子,它描述了一个具体的求值运算过程。

我们开始介绍if语句

1.if语句

 if 语句的语法结构为

 if ( 表达式 )
 语句

表达式成立(非0),则语句执行,表达式不成立(为0),则语句不执行

我们可以看到 flag 变量首先被初始化为0(为假),通过逻辑取反操作符将 flag 变为非0,也就是真。所以通过上述代码可以在屏幕上输出 Hello world

2. if-else语句

 if-else 语句的语法结构为

if ( 表达式 )
 语句1
else
 语句2

当表达式的值为真(非0)时,执行语句1;当表达式的值为假(为0)时,执行语句2。

很多刚接触C语言的同学会错误理解else语句执行的判断条件,我们在这里要清晰一点只要是表达式成立之外的条件都是else语句执行的判断条件

比如下方代码:

只要你输入非0值时,屏幕上打印的都会是haha。

3.分支中包含多条语句

我们要清楚C语言中 if 语句和 else 语句默认只控制一条语句

通过上面示例,我们不难发现 if 语句确实默认只控制一条语句,那如果我们想要让一条 if 语句控制多条语句应该怎么办呢?答案是es使用 { } 将多条语句括起来。

此时输入-1时将不会有任何输出,此时就是因为 if 语句将两条输出语句同时控制的结果。

else语句与上同理这里不再赘述。

4. 嵌套 if 

在我们生活中往往情况要更复杂,不可能只分为两种情况。那么,如果我们想要在C语言中实现多重判断就可以使用嵌套 if 语句。

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

比如判断一个整数是正数,负数还是零

 

上图中灰色背景的代码就是嵌套在前⾯的 else 子句中的,构成了嵌套的 if 语句。

我没再讲一个关于嵌套在 if 语句中的例子

比如输入一个整数,如果是正数,再判断其是偶数还是奇数。

上面的代码中灰色背景的代码也是嵌套在 if 语句中的,构成了嵌套的 if 语句。
以上就是嵌套 if 语句的语法,有了嵌套 if 语句,就可以完成更多复杂逻辑的判断。

5.悬空 else 问题

在讲解此问题之前大家可以先思考一下,下面代码的结果是什么

那程序运行的结果是什么?
我们很容易上来判断 a 是 0,不等于 1 ,那就执行 else 子句,打印 haha。但是当你去运行代码,你会发现输出结果为:什么都不输出。

这是为什么呢?

在解决这个问题之前我们要知道:如果有多个 if 和 else ,else 总是跟最接近的 if 匹配。

知道了这条规则上面的问题也就迎刃而解了

上面代码中 else 语句是与第二个 if 语句所搭配的,所以当第一个 if 语句判断 a 不等于 1 时,该程序就已经结束了。只是因为上面的排版使得第一个 if 语句与 else 语句对齐,使得我们误以为 else 语句是与第一个 if 语句所搭配的。

如果上面的代码改成如下形式就会很好理解了

通过上面的例子我们可以知道只要带上适当的大括号,代码的逻辑就会更加的清晰,所以我们以后在写代码的时候要注意括号的使用,让代码的可读性更高。

6. 短路

C语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

比如

对于&&(与运算符)如果与运算符左面的表达式已经为0,那么与运算符右面的表达式将不再计算

对于 || (或运算符)如果或运算符左面的表达式已经为1,那么与运算符右面的表达式将不再计算

接下来我们举一个例子

其实通过上述规则来计算我们不难得出此结果

我们来一起分析下这个代码,首先 a++ ,因为是前置++,所以先使用a的值,a=0,为假,所以需要向下一个操作符进行运算。之后再对右面表达式进行运算,此时a的值已经++为1,++b 使得 b 加1,变为3。此时对与第二个与运算符来说左面的表达式已经为真,所以发生短路。不再计算d++。

(3)switch语句

在C 语言中 if 语句主要是来实现两个分支的选择,但对于许多问题,我们需要对分支来解决,因此C语言提供 switch 语句来实现多分支的选择。

1. switch 语法的语法结构为

switch (expression)

{
         case value1: statement;break;
         case value2: statement;   break;
         default: statement;
}

2. switch 语句的用法

先执行expression中的值,判断此值与下面那个 case 语句中 value 的值相同,相同及执行此语句,若发现没有相同的任何一个值,即执行 default 语句。

3. switch 语句中 break 的作用

实现输入一个数字,打印出相对应的星期几

这是一个正确的代码,可以实现我们需求。

如果删除 break 语句又会发生什么呢

此时,我们发现删除 break 语句后,输出的结果不再是我们想要的结果,这是因为在 switch 语句中,表达式的值只是找到了该语句的入口,当输入4进入程序后,因为没有可以跳出程序的语句,就会执行完 case 4 语句后,继续执行到 switch 语句的结束。

所以从从这里我们可以看出 break 语句在 switch 语句中的重要性。

当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

4. switch 语句需要注意的点比较多

<1> case 和后边的数字之间必须有空格

<2> 每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。             

<3>switch后的圆括号内的表达式,其值的类型应该是整型(包括字符型)。                           

<4> case后的常量表达式类型只能是整型、字符型或枚举型,不能出现变量或由变量构成的表达式,并且各常量表达式必须互不相同。

<5> dafault语句可以出现在任意位置,都不会影响其功能,但是放在所有 case 语句后是一种良好的编程习惯。

(4)while循环

1.while的语法结构为

while(表达式)                                                                                                                                                语句 

先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语
句,语句执行完后再继续判断,是否进行下⼀次判断。

2.while循环的示例

在屏幕上打印出1~10的值

(5) do while循环

1.do while的语法结构为

      do                                                                                                                                                              语句                                                                                                                                              while(表达式);

do while循环语句是先执行后判断的循环语句,而 while 循环语句与后面要讲的 for 循环语句都是先判断条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;
而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表
达式为真,就会进行下⼀次,表达式为假,则不再继续循环。

2. do while循环示例

在屏幕上打印1~10的值

 do while 使用在循环体至少被执行一次的场景下,所以较少一些。

(6)for循环

1.for 循环的语法结构为

  for(表达式1;表达式2;表达式3)                                                                                                                        语句

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

for 循环语句的执行顺序为 先执行表达式1,再判断表达式2是否成立,成立执行语句,不成立跳出循环,如果成立,执行完语句后,再执行表达式3,表达式3执行完后,再进行表达式2的判断,如果成立,再执行语句,执行完语句后,再到表达式3,如此循环往复。直到某次表达式2不再成立,跳出循环。

2. for 循环示例

依然是在屏幕上打印1~10

for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优⼀些。

(7) break 和 continue 语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用 到循环中的。
break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。
continue 的作用是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

接下来我们分别对 while , for ,do while 循环运用 break 和 continue 举例

1.while 循环中的 break 

我们接下来都运用在屏幕上打印出1~10为例来比较不同

打印了1,2,3,4后,当i等于5的时候,循环在 break 的地方终止,不再打印,不再循环。
所以 break 的作用就是永久的终止循环,只要 break 被执行, break 外的第一层循环就终止了。
那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。

2.while 循环中的 continue

如果大家运行此程序就会发现4后面一直有光标闪烁,之就表明程序陷入了死循环。

我们也可以从此程序中得出一个结论,如果循环的调整是在 continue 后边的话,可能会造成
死循环。

3.for 循环中的break

我们可以显而易见,break语句的作用就是直接跳出循环。

4.for 循环中的continue

此时,我们可以看在 for 循环中执行此程序时并未产生如同 while 循环中的死循环现象,是因为当 i等于 5 时,循环直接跳到 i++ 的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用 continue 来实现。

5.do while循环中的 break 和 continue

运行完这两个程序后我们其实可以发现,do while 语句中的 break 和 continue 的作用和 while 循环中几乎⼀模⼀样,更多的大家可以自己下来尝试。

(8)goto 语句

C语言中提供了⼀种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。

我们在这里给大家举一个例子

从这个程序中大家要注意goto语句的语法结构,goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用。

但是在多重循环嵌套这种情况下,我们使用goto语句就会发现非常方便,使用goto语句我们就可以直接跳出多重循环嵌套中。

比如类似下面的程序

本来 for 循环想提前退出得使用 break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使用3个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值