C语言——分支与循环

本文详细介绍了C语言中的分支结构(if,else,if...else,switch)和循环结构(for,while,do...while),包括它们的语法、实例和注意事项,强调了括号和break/continue/goto语句在代码清晰度和控制流程中的重要性。
摘要由CSDN通过智能技术生成
   C语⾔是结构化的程序设计语⾔,这里的结构是指顺序结构、选择结构(分支结构)以及循环结构,C语言是可以实现这些结构的。其实我们不难发现,我们平时的生活基本上就是由这三种结构组成。
   在C语言中,分支结构可由 if 语句和switch 语句实现,而循环结构可由 for语句、while语句和do...while语句实现。

  1.分支语句

   1.1 if...else语句

    1.1.1   if

   如果你想要你的代码只打印一种情况,那么只需要使用 if 语句就行了。
if语句的表达形式如下:
   如果表达式成立(为真),则语句执行;如果表达式不成立(为假),则语句不执行。
    在C语言中规定:非0表示真;0表示假。
   示例: 输⼊⼀个整数,判断是否为奇数

    1.1.2  else

    如果你想打印第一种情况和与第一种相反的情况,那么 这个时候就需要if...else语句了。
    语句形式如下:
示例: 输⼊⼀个年龄,>= 18岁就输出:成年,否则就输出:未成年

     1.1.3分支中包含多条语句

   在C语言中默认  if  和 else 语句都只是控制一条语句。比如:
   通过上面的代码,你会发现输入的值不管是>=18 还是小于18,"可以交女朋友了" 都会打印在屏幕上。
    这是因为 if 语句只能控制⼀条语句,就是 printf(" 成年了 \n"); if语句为真,则打印成年了,
if语句为假,则不打印,对于 printf(" 可以谈恋爱了 \n"); 是独⽴存在的,不管if语句的条件的真
假,都会被执
    但是,如果我们想要 if 语句控制多条语句,那就要使用  {} 将代码括起来, else 后也可以跟上⼤括号。如下:

    1.1.4 嵌套 if

   if... else 语句中, else 可以与另⼀个 if 语句连用,在我们需要构成多重判断时使用。
  比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。 
   以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。

    1.1.5悬空else问题

    在C语言中规定:else 总是跟最接近的 if 匹配。
比如:
    上面这个代码什么都不会打印出来,因为 上⾯的代码排版,让 else 和第⼀个 if 语句对齐,让我们以为 else 是和第⼀个if匹配的,当 if 语句不成立的时候,自然想到的就是执行  else 子 句,打印 haha ,但实际上 else 是和第⼆个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不 成⽴,嵌套 if else 就没机会执行了,最终啥都不打印。
    但是如果将代码改成下面这样就容易读懂了。
只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以我们以后在写代码的时候要注意括号的使用。让代码的可读性更高。

   1.2  switch 语句

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

  上面代码中,根据表达式 expression 不同的值,执行相应的 case 分支,然后通过break语句跳出循环;如果找不到对应的值,就执行default 分支。
 注意:

switch 后的 expression 必须是整型表达式

case 后的值,必须是整形常量表达式

  1.2.1 switch中的break语句

  break语句会在相应的case分支执行后,跳出switch循环;但是如果我们把case语句中的break去掉,会发生什么样的情况?

  我们来创建一个代码:输⼊任意⼀个整数值,计算除3之后的余数

运行结果为:

为什么会出现这种情况呢?
   这是因为 switch 语句也是分支效果的,只有在 switch 语句中使用  break 才能在跳出 switch
句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case
语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面的代码就执行了 case
2 中的语句。所以在 switch 语句中 break 语句是非常重要的,能实现真正的分⽀效果。

  1.2.2 switch中的default语句

   在使用switch语句时,我们通常会遇到这样一个情况,就是switch中的表达式中的值无法匹配到case分支。这时候要不就不做处理,要不就得在 switch 语句中加入default子句。

1.2.3switch中的break和default的顺序问题

  在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
  不过我们通常是把 default ⼦句放在最后处理的。

  2.循环语句

  2.1  while循环

   while语句的语法结构与if语句非常相似,不过while语句可以实现循环效果。

   2.1.1while的语法形式

  2.1.2 while的执行流程

首先计算圆括号中表达式的值,如果值非0,则执行循环体语句,接着判定表达式。这个过程持续到表达式的值为0才结束。

  2.1.3while的实践

在屏幕上打印1~10的数字

  2.2 for循环

  2.2.1 for循环的语法形式

表达式 1:循环开始前的初始化步骤,只执行一次。

表达式 2:循环的条件,决定循环的继续或结束。

表达式 3:每次循环中最后一个被执行的操作。设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。

  2.2.2 for语句的执行流程

   首先执行表达式 1 初始化循环变量,接下来就是执行 表达式 2 的判断部分, 表达式 2 的结果如果
==0,则循环结束; 表达式 2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去表达式 2 的地方执行判断, 表达式 2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

  2.2.3 for语句的实践

在屏幕上打印1~10的数字

2.2.4 while循环与for循环的比较

由上面两个图可知while语句中的初始化、判断和调整不在同一位置,如果代码过多出现bug时,可能找不到并改正它们。而for语句中这三个在同一位置,出现bug时,易找到并改正。所以循环语句中for语句比while语句使用率高。

2.3 do...while循环

2.3.1 do..while的语法形式

2.3.2 do...while的执行流程

   在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的
结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。
  所以在 do while 语句中循环体是至少执行⼀次的,这是 do while 循环比较特殊的地⽅。

2.3.3 do...while的实践

打印1~10的数字

⼀般 do while 使⽤在循环体至少被执行⼀次的场景下,所以较少⼀些。

  2.4break语句与continue语句

  在执行循环过程中,总是会遇到突发情况使循环中断。C语言提供了break语句和continue语句来表达这种情况。

2.4.1 break语句

break语句能够强制结束循环,转到后续语句执行。示例如下:

2.4.2 continue语句

  continue语句能够中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始新的一轮循环。示例如下:

  2.5 goto语句

  C语言提供了⼀种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。但是goto语句也可能跳过了某些对象的构造、变量的初始化、重要的计算等语句,造成代码错误。
   
   
    它能从多重循环体中咻地一下子跳到外面,用不着写很多次的 break 语句; 例如
  就象楼房着火了,来不及从楼梯一级一级往下走,可从窗口跳出火坑。所以我们主
张少用、慎用 goto 语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值