C语言分支与循环语句

       在C语言中,分支与循环语句是最常用的几种语句。那么我们该如何去使用它们呢?

分支与循环的概念

       首先,我们要理解分支是什么?循环又是什么?分支——顾名思义,分支是一个主体分为几个支体的过程。同样的,循环就是一个结构体重复运行的过程。下面这张图片就是对分支与循环的具体描述。

分支与循环的语句及语法

       在理解了分支与循环的概念之后就是对分支语句以及循环语句的学习了。通常情况下,我们可以通过if-else、switch两种语句来实现分支结构,通过for、while、do-while三种语句来实现循环语句。

if-else语句语法

       还是顾名思义,if的中文意思是“如果”,else的中文意思是“其他的”。那么很显然,if-else语句是一个判断语句,作用就是对一个表达式进行判断,如果为真,那么便执行下面的语句,如果为假,那么便执行else下面的语句。其语法结构如下:

       同时,我们需要知道在C语言中0为假,非0为真。那么我们就可以利用这一点来写一个程序去判断一个数是奇数还是偶数了。

       首先,在写一个程序之前我们要理清这个程序的逻辑顺序,判断一个数是奇数还是偶数,它们之间的区别就是这个数除于2它的余数是1还是0。那么现在我们就可以来写这个代码了。

         这就是一个简单的if-else判断语句,那么我们通过观察上面的代码就可以发现else是在if判断为假的时候执行,并不是在程序进行到else时再进行一次判断。同时,if以及else后面的大括号在这里并不是必须加的,if和else只能控制其后面的一条语句,在这里if和else后面并没有多条语句,因此可以不加大括号。但是大多数情况下if-else语句后面都会跟随多条语句,这时就需要为受到if-else控制的语句加上大括号了。

if-else语句的嵌套:

       在学习了if语句的基本语法后,我们不妨思考一下,如果我们要判断输入进来的数是否是小于10的偶数时,我们该怎么去实现这个代码呢?这时候就需要用到if-else语句的嵌套了。嵌套,就是在一条语句内再嵌入另一条语句,从而达到对一个变量判断两次的效果。

       然而,大部分情况下我们都会通过逻辑操作符来实现两次判断的效果。因此,嵌套的应用大多在for循环中。

悬空else的问题:

       对于上一个判断是否是10以内的偶数的代码,假如将if后面的大括号去掉那么它还会达到我们想要的效果吗?

       很显然,去掉大括号之后它并不能实现我们需要的效果,这是因为else语句并不是和谁对齐就和谁匹配的,而是和它最近的if语句进行匹配,因此在执行第一个if语句的时候因为输入的5并不符合表达式,故而程序直接跳到了else之后,整个程序就结束了。这就是else的悬空问题。

switch语句语法

       在学习了if-else语句之后,我们就可以实现一些简单的分支结构,那么假如我们现在需要写一个代码来实现对于同一个表达式的不同结果执行对应的代码,那么利用if-else语句能不能实现呢?答案当然是可以的,我们只需要有几个结果就写几个if语句来判断就行了。但是这样显然非常的麻烦,这时候就需要我们的switch语句出马了。

       还是一样的方法,我们先来认识switch的英文意思,再去了解它的作用。switch的英文意思有开关的意思,那么开关是用来控制信号的传递的,只有符合条件的信号才能被传递到下一个地方。所以switch也是C语言中的一个开关语句,给它一个标准,它就能对表达式的结果进行匹配,从而执行对应的语句。因此switch语句的语法结构如下:

       其中dafault则是在表达式的结果不符合上面的所有结果时执行default语句。那么我们现在就利用switch语句来写一个练习:输⼊任意⼀个整数值,计算除5之后的余数,并打印出来。

switch语句中的break: 

        上面的代码中,我们要注意的点有:

        1.、case 和后边的数字之间必须有空格

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

        那么假如我们去掉了break会怎么样呢?

      可以发现,按照我们对代码的预想输入6应该只输出结果为1对应的语句,但事实是我们把结果为1后面的语句都执行了一遍,为什么呢?原因是switch语句也是分⽀效果的,只有在switch语句中使⽤break才能在跳出switch语句,如果某⼀个case语句的后边没有break语句,代码会继续往下执⾏,有可能执⾏其他case语句中的代码,直到遇到break语句或者switch语句结束。 

       然而,是不是每一个case语句后边都要加break呢?这是需要根据实际情况来决定的。如对工作日与休息日的判断,星期一到星期五是工作日,星期六星期天是休息日。那么这时候就可以将结果为1,2,3,4的case语句后面控制的语句省略,结果为6的case语句控制的语句省略,从而节省写代码的时间。

switch语句中的case和default的顺序问题:

       在switch语句中case语句和default语句有顺序要求吗?default只能放在最后吗? 其实,在switch语句中case语句和default语句是没有顺序要求的,只要我们的顺序是满⾜实际需求的就可以。 不过我们通常是把default⼦句放在最后处理的,这样看起来会更加美观。

while循环语句语法

       在学习了两种分支结构语句之后,就该来学习三种循环语句了。首先,我们来学习相对简单一点的while循环,while循环它的语法结构和if语句的语法结构非常相似。

       可以看到,它们的结构基本相同,那么它们的区别在哪呢?if后面的else语句自然是一个,那还有什么呢?在回答这个问题的时候,我们不妨看一下上面的标题,现在在讲循环语句,那么它们的区别就显而易见了。while语句在括号内的表达式为真时便执行下面的语句,执行完了并不会退出while循环,而是再次对表达式进行判断,如果为真那么便再一次执行下面的语句。下面就是while循环的执行流程图。

练习:

学习了while循环的基本语法之后,我们来做一个简单的练习:在屏幕上打印1~10的值。

       完成了这个练习之后感兴趣的小伙伴还可以去尝试难一点的练习:输⼊⼀个正的整数,然后;利用while循环逆序打印这个整数的每⼀位。具体思路就是使⽤n%10的运算,得到的余数就是最低位的数,然后依次将它们打印出来。

for循环语句语法

       接下来我们就要来学习三种循环结构中使用最多的for循环结构,for循环相对于前面的while循环要难一点,它们的语法结构也是大不相同。

for循环的难点就在于括号内的三个表达式分别代表什么意思,其中第一个表达式是⽤于循环变量的初始化,什么意思呢?这个循环变量就可以理解为在这个循环中我们需要去判断它是否满足循环条件的一个变量。初始化就是给这个变量一个初始值,给这个循环定义一个起点(注意:循环中使用的变量都需要进行初始化,如果前面已经初始化过了,那么这里就只需要引用它的变量名就行了)。表达式2就是对循环变量的范围的定义,比如现在我们给这个循环定义一个循环变量a=0,然后我们再给它一个范围,比如a<10,当a<10时,符合条件,循环进行。表达式3就是定义一个循环变量的变化式,我们先来思考一下,当我们进行了一次循环之后在第二次循环中循环变量a的值变不变?该怎样变?首先假如a的值不变,那么会出现什么情况?——死循环,因为a的值一直符合条件,那么这时候我们需要它发生变化,并且要有规律的变化,不然循环的次数就不可控了,for的作用就没了,因此我们要用一个函数表达式来表示它的变化规律,比如循环每进行一次a的值加1——a++,那么循环就只会进行十次,这就是表达式3的作用。

for循环执行流程图:

       以上就是for循环的执行流程。需要注意的是表达式3的执行是在循环体也就是循环语句执行之后再执行。

练习:

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

代码参考:

do-while循环语句语法

       do-while循环在三种循环结构中是用的最少的。并且我们在学习了while循环之后再来学习do-while循环就会非常简单。因此我在这里主要讲它和while循环的区别。首先,从表面上看,很明显多了一个do,do的英文意思是“做”,并且do是在while之前的,那么很明显,do-while循环是先将循环语句执行一遍,再进行判断。语法结构如下:

do-while循环执行流程图:

      由上图我们可以知道do-while循环中循环语句最少执行一次,这也是它的特殊之处。 

结尾

      以上就是我在学习了分支与循环之后对于这一部分的理解,在这里与大家分享一下,如有错误,还请指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值