教你快速精通循环和分支语句,确定不进来?(和bug 郭一起学C系列2)(2)

简介: 教你快速精通循环和分支语句,确定不进来?(和bug 郭一起学C系列2)(2)

循环语句

 我们日复一日都要完成的事情!

1

三种循环语句


while

for

do while

还记得一开始我们说的循环代码 ,码3万行有效代码,你就能成为大牛,这便是循环。


while语句

if语句:当条件满足的情况下,if语句后的语句执行,否则不执行。


但是这个语句只会执行一次。但是我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢? C语言中给我们引入了:while语句,可以实现循环。

语法结构


while(判断表达式)
  { 
     //循环体
  }

和if语句一样,当表达式结果为0循环结束,表达式结果非0循环继续。

image.png

这是while语句的最简单用法!

让我们学习一下高级一点的语法!

image.png

从执行流程图中可以看出,while语句还能与break,continue关键字一起使用!

我们来看两个代码看看它们有什么不同点。

image.png

break:直接跳出while循环

image.png

continue:不执行这次循环continue后面的代码,重新进入下一下while循环。

因为执行完continue后就重新回到了

while判断,没有进行i++;而后if(i==100)一直判断为真,一种执行continue语句,循环往复。i一直不变。


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


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

continue:用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。


for语句

我们可能会很疑惑,都已经学了while循环语句为啥还要学习for语句,难到道for循环有什么过人之处!我们先来看同样是一个程序while和for循环有什么不同!

实现一个1~100相加的程序


//while循环
    int i=1,sum=0;  // 初始化
    while(i<=100)  //判断
    {
      sum=i+sum;
      i++;         //调整
    }
  //for循环
  int i=0,sum=0;
  for(i=0;i<=100;i++)  //初始化,判断,调整
  {
  sum=sum+i;
  }

从上面代码可以看出while循环的控制循环的3个部分比较分散,如果循环体语句过长,调整部分i++就有可能找不到,看一个循环也比较难读。

而for语句就很好的解决了这个问题,循环的三个控制部分都包含在for()增强了代码的可读性,循环一目了然。


for语句语法

for(exp1;exp2;exp3)
   {
      //循环体
     // 当循环体中只有一条循环语句时{}可以省略
   }

exp1表达式1为初始化部分,用于初始化循环变量的。

exp2表达式2为条件判断部分,用于判断循环时候终止。

exp3表达式3为调整部分,用于循环条件的调整。


for循环的执行流程图

image.png

看了流程图你大致了解了for循环的执行过程

第一次进入for循环先执行exp1表达式1,然后条件判断exp2表达式2,为真进入循环,为假,退出循环;为真,执行循环语句,而后回到循环头部,先执行exp3调整部分,再进行exp2的判断部分,为真继续循环,为假退出循环,如此循环往复,直到exp2判断为假。


for循环和break,continue搭配使用

和while循环一样也能和break,continue搭配使用

image.png

和while循环中的break得到的结果一样,因为break永久终止循环。

image.png

而continue在for循环中并没有造成是死循环,因为continue会退出本层循环回到循环头部,不执行后面continue后面代码,但是for循环的调整部分都在循环头部,不同于while在循环体内,可能会在continue后面而跳过执行!


for循环的注意事项


第一次,进循环,执行exp1初始化,便不会执行exp1,而exp3调整部分是每次循环结束一次后回到if头部先执行,再判断

for(exp1;exp2;exp3)表达式1,2,3都可以省略,但省略了exp2条件判断表达式会造成死循环。

表达式之间用;隔开,一个表达式可以有多个小的语句,小语句之间用,隔开,比如for(i=0,j=0;i<100;i++,j++)

for循环变种

变种1

image.png

省略表达式exp2造成死循环

变种2

image.png

for语句的循环控制变量一些建议:


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

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

int i=0;
   for(i=0;i<10;i++)  //前闭后开
   for(i=0;i<=9;i++)  //前闭后闭

来个笔试题测试一下


int i=0,k=0;
   for(i=0,k=0;i++)
   {
     printf("hehe");
   }

判断上面代码打印hehe的循环次数。

image.png

答案:循环一次也不执行!

对了嘛?是不是很坑,判断表达式k=0赋值为0,我们一直强调表达式为0,判断为假,退出循环


do while语句

语法结构


do

{

循环语句

}while(表达式);


可以看到do while语句,不同于for while语句先判断,再执行循环语句,可能循环一次也不进行;而do while先do进行一次循环,再判断表达式。

image.png

和while语句大致相同。


和break,continue搭配使用image.png

image.png

和while一样的结果

do while注意事项


当循环必须执行一次时使用,一般用的比较少。

while()后面要有;分号。


goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。


for(...)
   {
    for(...)
    {
      for(...)
      {
       if(disaster)  
         goto error;   
      }
    }
   }
   error:    // 处理错误情况

注意:

goto语句的标识符自定义,标识符后接:即可跳转到指定位置

goto语句虽然可以跳转到指定位置但无法跳转到自定义函数内

虽然goto语句在特殊情况下有奇效,但是基本都能有其他循环语句代替,所以尽量避免使用。


目录
相关文章
|
2月前
|
C语言
爱上C语言:分支与循环(分支篇)多个if与if — else if区别
爱上C语言:分支与循环(分支篇)多个if与if — else if区别
|
2月前
|
Go C语言
爱上C语言:分支与循环(循环篇)
爱上C语言:分支与循环(循环篇)
|
2月前
|
Python
[重学Python] Day1 变量+分支+循环
[重学Python] Day1 变量+分支+循环
42 3
|
12月前
|
C语言
学C的第六天(深入了解 分支语句 和 循环语句 )(1)
C语言:结构化的程序设计语言,支持三种结构,顺序结构、选择结构、循环结构。生活中大大小小的事件基本都可以用这三种结构来描述,这是一种高度的抽象 什么是语句?
|
12月前
学C的第六天(深入了解 分支语句 和 循环语句 )(2)
2.switch语句: switch语句也是一种分支语句,常常用于多分支的情况。 语法结构:
|
12月前
|
编译器 C语言
|
12月前
|
监控 C++
分支与循环(2)(下)
分支与循环(2)(下)
|
12月前
|
C语言
分支和循环习题以及知识点
分支和循环习题以及知识点
|
12月前
|
C语言
分支语句和循环语句(超详细保姆级,适合初学者)上
分支语句和循环语句(超详细保姆级,适合初学者)
57 0
|
12月前
分支语句和循环语句(超详细保姆级,适合初学者)下
分支语句和循环语句(超详细保姆级,适合初学者)
42 0