6.C语言0基础自学-分支和循环

目录

Switch语句

If语句

while循环

for循环

do while循环

goto


C语言是一门结构化的程序设计语言。

在我们生活中,日常的方方面面里,结构无非就三种:

顺序结构,选择结构,循环结构。

什么是语句?:在c语言中,由一个分号隔开的就是一条语句。单一个分号也是语句,即空语句。

只要有一个分号,我就认为它有一条语句。

分支语句有两种:if 和switch

循环语句有三种:for ,while和do while。

顺序结构:

像一串简单的int a=1;printf(%d,a)这些按顺序依次执行每一条语句的代码都是顺序结构。

分支语句:

分支语句也叫选择语句,顾名思义,就是代码在执行的过程中会遇到分支,只能选择其中一个方向的顺序走下去,这样有选择的路线的结构就是分支结构。

Switch语句

 Switch也是一种分支语句,适合用于一些多分支的选择结构。用法为:switch()。判断后面表达式的结果,以与其多条分支内选择对应的语句开始执行。

Case决定了代码从什么地方开始执行,break决定了从哪里结束执行代码。一般情况下,推荐case搭配break使用,当然也可以不搭配。

Switch在执行的时候会判断其后面表达式里的值,然后根据表达式的结果选择合适的case分支开始执行。所以switch语句所判断的表达式必须为整型表达式。当然,case分支后面的值也必须为整型。

如果switch语句所判断表达式的值不与任何一个case的值相匹配,则会执行“默认执行代码”:default。

对于default的顺序没有严格的要求,无论在case语言的前后都不影响代码逻辑。执行default只能是没有任何case分支与switch判断的结果相匹配才会执行。

Switch语句里也允许出现if语句,以及嵌套switch语句。

If语句

语法结构: if (表达式)

{    }

这个 他执行的时候就是先执行if后面括号里的语句,如果表达式结果为真,则执行下面的语句,若为假则跳过执行下下条语句。

语法结构:

这种结构就是说如果if后面的表达式为真,则执行if下面的语句,“else 否则”就执行else 下面的语句。

语法结构(多分支):

有些时候,我们的选择往往不止if和else两种,当有多个选择的时候就要用到多分支,即else if。

结构里,只有一个语句会成立,代码开始执行时,从if开始依次去执行后面的表达式,一旦遇到结果为真的表达式就执行该分支下的语句,在后面的语句不管成立不成立都不会被执行。末尾不一定非得else!else if也不会错

如果,要在表达式里面放两条语句,就要用到 “或 与”

执行这个if语句,括号里面的&&表示与,表达式1与表达式2都为真时,才会执行if下的语句。当然,“ || ”或也可以用到这里,则表达式1或者表达式2任意一个为真,就会执行if下的语句。 

else里面可以套if else if。

if可以单独使用,但是else不行,else必须配合if使用。

while循环

        这个用法和if语句有点相似,还是判断后表达式,若为真在执行下面代码,和if不一样的是它执行完了会再返回来再判断表达式是否为真,如果为真则再执行,这就是循环。

和if一样,如果要while循环控制多条语句而不止它下面的一条,则就需要一个大括号把他们括再一个代码块里面。

然后,又和switch一样的,在循环语句中一但遇到break,就立马跳出循环,无论在执行什么,遇到break就直接跳出,永久的终止循环。brake常搭配if在while语句里面使用。

有了brake停止关键字,能让代码直接跳出循环,也就有了与之对应的continue继续关键字,和break相反,continue的作用是直接让代码返回去重新判断,无论后面是什么都不执行,直接返回去重新判断是否进行下一次循环,也是适合搭配if使用。

Continue和break都是终止当前循环,break是终止并直接跳出循环,而continue是终止当前循环后重新判断循环表达式。

好的我又从getchar函数回来了,前面说是如何清理输入缓冲区的残留物,提到用到while循环可以很好的解决,大致就是加一个while循环,让它一直循环用getchar读取,直到读取到 \n 换行转移字符就结束,因为 \n 往往是输入缓冲区的最后一个字符。表达式大概为 while(getchar() != ‘\n’),很好的解决了不会死循环的问题并且会读完缓冲区,以便于下一个输入函数的正常执行。

for循环

一个循环体结构分为,初始化部分,判断部分,调整部分。任何一个部分发生变动都会使循环发生改变,for循环出现的意义就是使这三个部分放在一起方便调整。

for循环的格式为for(表达式1;表达式2;表达式3){ }

由两个分号隔开三个表达式组成for循环。在开始执行for循环的时候:先直接执行表达式1,然后判断表达式2,若是表达式2结果为真则执行循环体,执行完循环体再执行表达式3调整循环。

和while循环不一样的是它遇到continue时for跳出循环之后,因为它已经执行了这个循环,所以还是要执行表达式3调整循环,再判断表达式2。Continue的作用是跳过continue后面的循环。

而while循环会直接跳出循环,跳到while处重新判断循环表达式。

但是他们遇到break时的表现都一样,会直接结束循环。

For循环几乎可以解决所以循环体结构。

来自老师的建议:

不可以在for循环体内修改循环变量,防止for循环失去控制。

建议for语句的循环控制变量采用“前闭后开区间“的写法,意思就是表达式1初始化的值让表达式2判断为真,表达式2判断本身的值的时候结果为假。

For循环的多个变种:

省略 for(;;):省略三个表达式,只写两个分号。事实证明,for循环的三个表达式(初始化,判断,调整)都可以省略,但是for循环的判断部分(表达式2)如果被省略,那么循环的判断条件则恒为真。如果不是能非常熟练的运用循环,建议还是不要省略。举个例子:

比如,写循环a时候的省略了初始化部分,循环a的循环变量已经在循环外初始化过了。省略了初始化,直接判断,调整。执行的时候代码也很好的得出完想要的结果,但是呢 如果,此次循环a本身也是一个循环b的循环语句呢,那循环a在被循环b判断是否再次循环的时候,如果判断结果为真,那么问题就出现了,因为之前此循环a结束的时候,a的循环变量已经调整到判断结果为假,若是此时再开启循环a,因为没有初始化循环变量,循环变量此时还是上一次调整完的值,循环a的判断结果则直接为假。

逗号表达式与或且:一个表达式中有多个用逗号隔开的表达式,或者出现 &&(并且) || (或者) 表达式,这也可以成为for循环中表达式的任意一个 比如

这个for循环就省略了初始化循环变量,在执行循环判断的时候表示,x小于18或者y大于0结果都为真,可以继续执行代码,而在循环变量调整的时候,需要调整两个变量:x++ 和y--。

一定要注意!千万不要在写判断语句的时候写成赋值语句,==真的真的太容易被写成=了,这是个坑,这是个大坑。一定要注意!无论是在做题还是自己敲代码,遇到判断语句了就留意一下。

do while循环

do while循环和while循环的区别就是这个do,do while循环在执行的时候,首先是执行do的语句,然后再判断要不要进行循环,上来先执行一边再说。举个栗子:

这里while循环的判断表达式直接给了一个0,则结果为假,不循环。但是呢这个do while循环先给它do一边,然后再判断,判断是0,那没事了,结束循环。这要是搁别的循环里边看到判断表达式直接是个0还判断der啊,早结束了哪还有循环体的事。do while循环体至少会被执行一次。

这边有一个do while循环的流程图:

可以看到,do while循环执行的时候遇到break还是会直接 跳出并结束循环。当遇到continue的时候,会直接跳到判断语句进行判断,简单的说如果循环的变量调整语句执行是continue的后面,遇到continue的时候一般情况下都会是死循环,因为它直接判断导致调整语句没机会调整。

Continue:跳过本次循环后面的代码直接进行判断。

strcmp是用来判断两个字符串是否相等的。需要srtring头文件。

goto

这个语句本就是不合理的,可以跳到本函数体内部的任何地方,一般可以在为了跳出多层循环体可以用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值