【C语言】分支语句和循环语句

一、什么是语句

C语言的语句可以分为以下五类:

1.表达式语句语句必须有分号,任何一个表达式语句加上就成了表达式语句

2.函数调用语句

3.控制语句用于控制程序的执行流程,以实现程序的各种结构方式,他们由特定的语句定义符组成,C语言有九种控制语句。可分为以下三类:

a. 条件判断语句也叫分支语句:if语句、switch语句

b. 循环执行语句:while语句、for语句、do while语句

c. 转向语句:break语句、goto语句、continue语句、return语句

4.复合语句 { } 将若干语句包括起来而构成的语句

 注:a. 复合语句是单条语句,而不是多条语句;

        b. if选择结构或者循环结构要用到复合语句;
        c. 复合语句{}外面不要有;
        d. 复合语句{}里每一句都要加;

5.空语句无任何操作,但合法,可用于循环中的延时,有些地方需要有一个语句占位等

二、分支语句(选择结构)

1. if语句

1.1 if语句的语法结构

单分支:                                       双分支:                                            多分支:

         if  (表达式)                                    if  (表达式)                                          if  (表达式1)  

                语句;                                             语句1;                                               语句1;

                                                              else                                                    else if(表达式2)

                                                                     语句2;                                               语句2;

                                                                                                                         else

                                                                                                                                 语句3;

       上面的语法结构中,其实每个语句可以用大括号括起来,原因是如果if或者else后面要执行的可能不止一句,用大括号将所以要执行的语句括起来,这样就可以完美的执行代码,当然了,如果要执行的语句只有一条,那么可以如同语法结构那样不加大括号。

       注:在C语言中非0就是真,if后面圆括号中的表达式是非0,语句就能执行。(写代码规范性-推荐看《高质量c/c++编程》前三章

例:a. 判断年龄,如果年龄大于18,就输出成年

b. 如果年龄大于18,就输出成年,否则就输出未成年,不能谈恋爱

 c. 再提升一下,判断少年(18岁以下)青年中年老年几个阶段

 

1.2 悬空else 

else默认和离他最近的if相匹配,而且我们也要意识到写代码规范的重要性,适当的使用{ }可以使代码的逻辑更清楚。

else与第二个if相匹配,共同构成第一个if的子语句。第一个if表达式不成立,所以程序直接跳出if这个分支语句,跳过了第二个if,自然也就没有执行else语句,其实如果我们把这段代码复制到编译器上就会发现else是默认跟第二个if对齐的。

我们适当的使用了{ },既避免了出错,又使代码更加美观。

 

 1.3 if书写形式的对比

                

对比一下四种代码的书写形式,我们会发现代码2和代码4更好,逻辑更加清晰,对比1,2,我们很容易发现代码2书写更好,那为什么对比3和4,代码4更好呢?这是因为代码4中,if表达式中常量在左,变量在右,这样可以防止将等于号==错写成赋值号,却无法找到错误。

1.4 练习

1.判断一个数是否为奇数

 2.输出1-100之间的奇数

2. switch语句

2.1 switch语句

我们发现,如果分支语句太多,用if...else if...else if.....的形式太复杂了,这时候用switch语句就会更加简单。

switch语法结构:

          switch(整型表达式

          {

                case 整型常量表达式

                         语句;

                .......

          }

代码1:

  为什么每个case的后面加上break,是因为在执行对应的case语句后,就跳出switch分支语句,如果没有加上break,那么程序会继续执行后面的case语句,只要再次遇见break语句为止,才跳出switch分支语句。

代码2:

  如果几个case对应的结果都是一样的,如上代码所示,那么这个时候就不用每个case都加上要执行的语句,只需要在对应结果相同的最后一个case后面加上要执行的语句即可。

代码3:

最后的defalut,其实是可以省略的,只不过如果当我们输入的数字在switch分支语句中,没有找到对应case的时候,可以打印一个输入错误作为提醒,当然了break不能少。

而且这个default语句可以放在分支语句中的任意位置,这个不影响代码的运行。(最好放在语句最后)

养成一个编程好习惯:在每一个Switch语句中添加一个default语句。

2.2 练习

下面代码输出的结果是什么?


三、循环语句

1.while语句

1.1 while循环的语法结构

不管是if语句还是switch语句,当条件满足的情况下,都只能执行一次。

但是很多时候我们知道同一件事情需要完成很多次,这个时候就要用到循环语句,首先介绍while语句。

while的语法结构:

           while(表达式)

           {

               循环语句;
           }

表达式为真,则执行循环语句,循环一次后,第二次判断表达式的真假情况,直到循环到表达式为假的时候,就不再执行循环语句,这时候跳出循环。

用流程图如下:

在屏幕上打印1-10的数字:

 

 我们和前边的if语句结合一下,要求它打印3个换行再打印:

 1.2 while语句中的break和continue

    a. break语句

while循环语句中如果执行了break语句,那么就是会中止循环,这时候就跳出了循环。如上代码所示,当循环到 i 等于5的时候,就会执行if后的break语句,所以代码运行的结果如上。

总结:break在while循环中的作用:

其实在循环中只要遇见break,就停止后期的所有循环,直到终止循环。所以:while中的break是只用于永久终止循环的。

   b. continue语句

这是为什么呢?这是因为i == 5 的时候,continue跳出了本次循环,后边的语句也没有执行,所以i++并没有被执行,然后开始进入下一次循环判断,i还是等于5,所以程序陷入了死循环,i一直等于5。

总结:continue在while循环中的作用:

其实在循环中只要遇到continue,也就是本次循环中的continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。

2.for循环

2.1 for循环的语法结构

对于循环语句来说,用的最多的是for循环,再就是while循环,用的最少的是do while

for语法结构

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

        {

              循环语句;

        }

表达式1初始化部分,用于初始化循环变量的。表达式2条件判断部分,用于判断循环时候终止。表达式3调整部分,用于循环条件的调整。注意:表达式之间用的分号 ;相隔。 

for循环的执行流程:

 练习:使用for循环,在屏幕上打印1-10的数字

 

通过for的循环流程图可知,一般进入for循环,先初始化,然后判断,判断为真,进入循环语句,然后进行调整,接着再进行判断......,直到判断出现为假,就跳出循环。

 

 可以发现,在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改不够集中和方便。所以,for循环的风格更好,for循环的使用频率也是最高的。

2.2 for循环中的break和continue

在for循环中也有break和continue,他们的意义和while循环中是一样的,但是还是有些差异

a. break语句

 当i=5时,执行break语句,for循环中遇到break,和while中的break一样,就会终止循环。

b. continue语句

                           

 我们可以发现,for中的continue并没有像while那样在i ==5的时候陷入死循环,这是因为i == 5的时候,执行continue,跳过本次循环,i++变成了6,后边的循环仍然可以正常运行。

2.3 for 语句中的循环控制变量

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

2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

 2.4 一些for循环中的变种

代码1:

代码2:

 

代码3:

 

分析:当i=0满足i<3,进入循环体,j=0满足j<3,进入循环体打印,然后j++,当j=3时不满足条件退出循环,此时已经打印出三个hehe,然后i++,此时j未被初始化,j还是等于3,不符合j<3,最后只能得到三个hehe。

代码4:

 

 2.5 练习

 答案是0次,因为k=0是赋值,k被赋值为0,0为假,循环不执行。

3. do…while()循环

3.1 do…while()循环的语法结构

格式: do

        {

           循环语句;

        }

        while(表达式)

执行流程:

 

do...while()语句和其他循环语句不一样的地方在于do...while()语句是先执行再判断。 

注:do...while语句的循环体至少执行一次。

打印1-10:

  3.2 do..while语句中的break和continue

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值