C语言(3)----分支和循坏以及操作符

简介: C语言(3)----分支和循坏以及操作符

前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构

对于顺序结构,就是一个起点对应一个终点,也就是单线程;

对于选择结构,也就是一个起点对应不同的终点,也叫分支结构,是多线程。

if,switch用于控制分支结构。


分支

1.if语句

公式:

if(表达式)

    语句

表达式如果成立的话,那么语句执行,反之则不执行。

if语句相当于英语中的条件状语从句,甚至可以说一模一样。非真即假。

else

else的意思等同于另一个选项,也就是如下:

if(表达式

    语句1(第一种情况

else

    语句2(第二种情况

也就是说如果不是第一种情况那么就是第二种情况。

就好比表达式中a>=1

那么第一种情况就是a>=1

      第二种情况就是a<1

如何控制多条语句

注意,if默认只能控制一条语句,比如

如果a=1,那么就有A

如果此时后面再加上一条语句B,那么无论有没有a=1,这条语句B都不归if管。

所以如果要控制多条语句的话,需要用{}把所有要控制的语句给括起来。

对于else也是一样。

嵌套式if

嵌套式好比套娃,不过又不太一样。

如果想要不止有非对即错两种选择,那么就要做出特殊处理,有两种方法。

(1 使用else if

注意,使用else if就相当于原先的第二种选择,

只不过在这个语句中可以再次包含两种选项,而这两种选项也是非对即错的关系。

(2 使用 {}

就像上方,如果想要包含多个选项,那么就可以用大括号将其括起来,而这个方式也是可以无限套娃的,

如图所示,套娃之后每一层之间也是有关系的。

悬空else

一个if只能对应一个else。并且这个else只和最近的if匹配。

2.关系操作符

关系操作符顾名思义就是表关系的操作符。主要分为这几类:

>

<

>=

<=

==(在C语言中两个等号才是相等一个等号赋值的意思)

!=(不等于

插入:在C语言中0即为假,无论它是代表算出来的一个数字还是得出来的逻辑结果,只要是在判断中,它即为假。而非0即为真。我们可以将0和1看成一种逻辑判断词,假或者真

而在关系表达式中通常返回 1 或 0 ,表⽰真假。⽐如, 20 > 12 返回 1 , 12 > 20 返回 0 。

注意:a:在关系表达式中我们一般将变量放在左边。

          b:表达式不能直接表达连续的关系。也就是多个关系运算符不能连续运用。

          比如,如果在表达式中(a>b>c),那么编译器按照从左往右的读取顺序会先读取a与b的大小,倘若a<b,那么这个关系就为假,所以a>b这个表达式也会代为0(0表示假),那么对于后哦面b与c的关系就变成了0和c的比较,那么也就不是原先所要表达的意思了。

那么对于这个问题我们要怎么解决呢?在后续逻辑运算符中会进行解释。

3.条件运算符 ep1 ? ep2 : ep3

条件运算符顾名思义是用来说明条件的。

而这个符号的意思就是若表达式1为真,则表达式2计算,表达式3不再计算

                                   若表达式1为假,则表达式3计算,表达式2不再计算

并且两种情况计算出的是整个表达式的结果。

这个操作符用于条件语句中,一个前提,两个结果。同时它是一个三目操作符

4.逻辑运算符

逻辑取反运算符(改变单个表达式的真假)这个运算符相当于数学中的否命题。

也就是有一个事件a,那么!a的意思就是非a

&&与运算符,也就是并且的意思。格式是:a&&b

&& 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。

即为:全真则真,一假则假。

所以对于2中的问题也可以很好的解决,也就是(a<b&&b<c)如此表示即可。

||:或运算符,也就是或者的意思。格式是:a||b

两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

即为:一真则真,全假则假。

插入:括号()有一个作用就是把数个语句整合在一个框内,防止它们乱跑到其他的语句和其对应

5.短路现象

从前面已经了解到C语言是从左往右进行读取,那么可以说它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。而这其实就相当于我们生活中的语言逻辑,我们也是从左往右读而不是反过来。

如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

我们可以理解为C语言认为全部都运算是没有必要的。

针对&& 比如a&&b, 若a==0(假),那么右边的b便不再计算。

针对 | |   比如a||b,若a为真,那么右边的b便不再计算。

6.switch语句

公式:

switch (表达式)

{

case 情况1: 答案1

break

case 情况2: 答案2

break

default: 答案3

(break)

}

对于上述词的理解,switch可以理解为转换的意思,所以这个语句叫做转换语句,也就是在不同情况之间转换的意思。

case就是情况的意思,也相当于如果是情况()的话的意思。可以理解为开启的入口或者钥匙,它只起到开启的作用,不负责关闭或者出口。

defaut可以理解为如果不是上述任何一个情况的话,那么就...的意思。

break相当于停止的意思,也相当于出口的意思,如果不以break作为出口的话,那么函数就会一直向下直到结尾。而为什么default后的break可加可不加呢,因为后面已经结尾return 0了,也就没必要再停止一次。

其实switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。所以它和if...else 的作用大差不差。

注:

• switch 后的 expression 必须是整型表达式。插入:但是由于字符是对照ASCII码的,而ASCII是对应整数的,所以字符类型也是整形

• case 后的值,必须是整形常量表达式。注意是常量表达式,case后不能是变量。

• case和后边的数字之间必须有空格。

• case和default的顺序没有规定,两者都可以放在前面也都可以放在后面。不过根据语言逻辑,通常将default放在后面。

循环,这里的循环其实不是指死循环,而是指某一个指令,比如一直循环+1,那么数字就会一直+1,打印出1,2,3,4,5等等。

循环

7.while语句

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。 while 语句的语法结构和 if 语句⾮常相似。

可见,while和if的区别在于while是用来循环的。

这是while循环流程图:判断为真,则执行某一语句,并且再继续返回去判断;直到判断为假,就会停止判断结束执行。或许换一种说法更好理解,⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

插入:1.语句的执行顺序是从左往右,从上往下。

2.循环经常涉及数学计算,关键是要搞清语句逻辑和数学运算符,数字之间的关系,才能正确表达意思。

8.for语句

for语句的格式是:

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

语句;

各语句的作用:

表达式1 ⽤于循环变量的初始化

表达式2 ⽤于循环结束条件的判断

表达式3 ⽤于循环变量的调整

for循环的流程:⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继 续。

注意:1.整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

2.for循环的三个表达式都可以省略,可以将其写在后方的代码中,但如果判断的部分省略,那么就会使得这个判断恒为真。

其实从图中就可以看出,for语句和while语句的效果其实一样的,只是形式不同。

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

9.do while循环

这是三个循环语句中用的最少的一个。

它的表达式是

do

    语句;

while(表达式)

值得注意的是,while和for两个语句都是先判断再循环,而do while是先执行一次在进行判断,这说明在这个语句中循环体至少执行一次。而正是由于这个特性,所以它能使用的情况较少,但是有一个特殊情况:

另外,在C语言中,计数是无法直接表示出来的,但如果我们用循环语句就可以实现这个过程,也就是使我们的对象进行循环,同时设置一个新变量来进行自增,则如果循环进行一次那么新变量就自增一次,那么什么时候对象不再进行循环了,那么自增也就停止了,此时新变量的值就是计出来的数字。

插入:由于代码需要优化和简洁才能更有效率,所以当我们需要进行自增,自减等等的时候,能写a/=10就不要写a=a/10,即我们要简化形式。

10.break和continue在循环中的作用

break的意思是中断或跳出整个循环。

可以想象minecraft中的红石循环时,突然打碎一个红石,那么整个循环都会停止,但是注意,这里与其不同的是,红石循环需要打碎一个红石,相当于减少一个自我单元,但break却是加入一个词,从而达到终止的目的。

continue的意思是跳过在本次循环它后面的代码直接进行判断。

在continue的使用中,有可能会陷入死循环。

根据上面的注释我们可以知道,continue跳过了后方的代码,所以陷入死循环,而死循环的表达方式是光点一直闪烁,而不是停止运行。

也就是说continue在while中的机动性更高。因为它可以自己决定后面需要省略的东西,但是在for循环中,会直接跳出本次循环,执行下一次迭代循环。

 

11.goto语句

goto语句的作用相当于minecraft中的/tp,goto 语句可以实现在同⼀个函数 内跳转到置好的标号处。它的格式是:

goto (想去的标号处(已经提前设置好)):

goto语句很灵活,既可以跳到后面也可以跳到前面,具体取决于标号处的位置。

但是对于goto的位置摆放如果不清晰的话,就会导致代码错乱,所以我们一般不用这个语句。

但是如果我们想要快速一个嵌套语句,那么使用goto语句就很方便。

目录
相关文章
|
6月前
|
C语言
C语言中条件操作符的应用
最后,条件操作符是个超级英雄,但不是每个代码问题都需要一个超级英雄来解决。一定要在适当的时候适度的使用它,那么它将成为你的编程工具箱中的一件强力工具。
321 75
|
4月前
|
C语言
C语言分支和循环语句
分支语句由`if-else`构成,用于根据不同条件执行相应代码。`else`会与最近未配对的`if`结合,多个条件可用`else if`实现。若连续使用`if`,各条件互不影响。嵌套结构可在`if`中再加入`if-else`。此外,`switch`语句适用于多分支选择(注意表达式不能为浮点数,`case`后需加`break`)。循环语句包括`for`、`while`和`do...while`,注意`do...while`末尾需加分号。循环中,`break`直接终止循环,`continue`跳过当前循环剩余部分,但`for`的语句三仍会执行,而`while`中位置影响效果。
58 0
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
250 5
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
172 0
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
516 0
|
10月前
|
存储 网络协议 C语言
【C语言】位操作符详解 - 《开心消消乐》
位操作符用于在位级别上进行操作。C语言提供了一组位操作符,允许你直接操作整数类型的二进制表示。这些操作符可以有效地处理标志、掩码、位字段等低级编程任务。
421 8
|
10月前
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
541 7
|
12月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
267 10
|
12月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
173 8
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向