前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言(3)----分支和循坏以及操作符

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

作者头像
Skrrapper
发布2024-06-18 15:30:29
70
发布2024-06-18 15:30:29
举报
文章被收录于专栏:技术分享技术分享

前言

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语句就很方便。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 分支
    • 1.if语句
      • 2.关系操作符
        • 3.条件运算符 ep1 ? ep2 : ep3
          • 4.逻辑运算符
            • 5.短路现象
              • 6.switch语句
              • 循环
                • 7.while语句
                  • 8.for语句
                    • 9.do while循环
                      • 10.break和continue在循环中的作用
                        • 11.goto语句
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档