从零开始学习C语言丨循环结构

9,770次阅读
没有评论

共计 2685 个字符,预计需要花费 7 分钟才能阅读完成。

本文发布于微信公众号:三玹

首先,我们先来认识一下什么是循环?循环是在满足某个条件的情况下,让计算机帮忙重复执行某个命令或者某一块命令。
C 语言中的循环结构包括了:for 循环、while 循环、do…while 循环以及嵌套循环。
for 循环
先来看一下 for 循环的语法结构:
for(init;condition;increment){statements;}
for 循环要具备的四个部分:
1、init:初始值。一般是变量赋值,只在第一次循环的时候才会被使用到,之后的每一次循环就用不到这个初始值。其作用是为了赋给后面的 condition 中进行判断。
2、condition:判断式。循环结构中的判断条件,第一次循环开始前接收 init 传过来的值,往后是接收 increment 传过来的值。判断是否成立,成立则开始循环,不成立就结束循环。
3、statements:执行语句。当 condition 里面的条件满足时,则会开始执行循环代码块里面的指令。
4、increment:增量表达式。每一次循环执行完语句后,都会调用 increment 中的命令,更新 init 定义的变量的值。然后传给 condition,继续循环。
接下来,我们来用 for 循环来打印 0-100 的内容:
for(int i=0;i100;i++){printf("%d", i);
}
第一个初始值,初始化了一个 int 类型的变量 i,并给它一个初始值 0。当然声明变量的行为,也可以在 for 循环之外定义的。
不过这两者是有区别的。for 循环里面定义的称为临时变量,当 for 循环结束后,这个变量就从内存中删掉了,在循环结构之外使用变量 i 是会报错的;for 循环外面定义的称为全局变量,即使循环结束,变量 i 还是存在,且此时的值是 101。

一般建议是在 for 循环中进行变量的初始化。
第二个判断式,判断 i 是否小等于 100,是的话就执行下面的打印命令,不是的话就结束循环不再运行。
第三个执行语句,每循环一次都会执行一次打印命令,把此时 i 的值打印在控制台。
第四个增量表达式,每循环一次,i 变量就自增一次,然后传给判断式进行判断。以此往复 2-4 的内容。
那么有朋友要问,除了自增,我想自减行吗?
当然也是可以的。同样是打印 0 -100 之间的数字,但是要求是从 100 开始。这时候初始值要初始化 i 变量的值是 100,判断式是小等于 0,增量表达式就可以使用自减 i–。
while 循环
同样,while 循环也是需要初始值,判断式,执行语句以及增量表达式。
语法结构:
int i = 0;
while(i 5){printf("%d", i);
  i++;
}

和 for 循环不同的是,while 的初始值得在循环体外面进行初始化,然后将初始化后的变量传递给 while 关键字后面括号里的条件判断式。

do…while 循环
和 while 循环很相似,但又有不同。同时,do…while 是一种比较特殊的循环结构,即便判断的条件不满足,都 至少会执行一次循环体的内容
来看一个简单的例子:
int i = 0;
do{
  i++;
  printf("%dn", i);
}while(i0);
printf("%d", i);
如果按照 while 循环,首先会将初始化的 i 变量代入 while 后面的判断式。显然结果是不满足的,因此是不会执行代码块里面的内容。所以在 while 循环里面,这个案例只输出了一个 0。
但在 do…while 里,这段代码的结果输出是:1 1。
按照我的理解,计算机语言是按顺序执行的,那么 do…while 循环首先被执行的是 do 后面的代码块。因此,执行了一次累加和打印命令。
紧接着运行到 while 的判断式,结果不满足条件,该循环就结束了。
最后再执行代码块外面的打印命令,而此时变量 i 的值已经发生了改变,结果就是 1 1。
嵌套循环
循环结构同判断结构一样,也是可以进行嵌套(套娃行为)的。
例如:循环打印 1 -10 中的所有值,在打印每一个值的时候,同时跟着要打印 3 个 1。(用 for 循环写)
for(int i=1;i10;i++){printf("%d",i);
  for(int j=1;i3;i++){printf("1");
  }
}
嵌套的行为在代码中建议是尽可能少用,一是影响代码的阅读性,二是会导致后期代码维护变得困难。
所以,嵌套这个行为尽可能少用;当不得不用的使用,也要尽可能少嵌套的层数,一般三个就差不多了。
关键字
C 语言中有三个被应用在循环中的关键字,分别是:
break:用来终结循环的。
continue:用来跳过循环中符合某个条件的内容。
goto:用来把控制无条件转移到同一函数内被标记的语言。但这个关键字通常都不被建议使用,就不在这里展开了。
break 和 continue 在循环中通常 需要和判断结构结合在一起使用
首先看一下 break 的使用。例如:我有一百个苹果,但我只需要从中拿出三个就够了。
for(int i=1;i100;i++){printf("你拿了 %d 个苹果。n", i);
  if(i == 3){printf("你已经拿到 3 个苹果了,停手吧!");
    break;
  }
}
运行结果:
你拿了 1 个苹果。
你拿了 2 个苹果。
你拿了 3 个苹果。
你已经拿到 3 个苹果了,停手吧!
再来看一下 continue 的使用。例如:10 以内的数字,除了 3 的倍数的数字,其他都要打印出来。
int i=0;
while(i10){if(i % 3 == 0){continue;
  }
  printf("%d", i);
}
运行结果:0124578
死循环
前面都是在满足条件的情况下发生,那么如果一直都不满足判断式的条件,那么结果会是怎么样呢?
答案很明显,就是会一直循环下去,永不停息。
这种情况就会导致程序一直在运行当中,不会正常结束。这种情况就类似于先帝创业未半,而中道崩殂。也就被称之为 死循环
在程序中,一旦出现循环的判断条件一直处于满足的情况下,就要注意了。
死循环,一般都是要和 break 关键字结合在一起的,用来强行终止循环。
下面来看一下 for 循环、while 循环、do…while 循环的死循环状态。

for(int i=0; i 1; ){printf("循环中...");
}

while(1){printf("循环中...");
}

do{printf("循环中...");
}while(1);
想要让循环成为了一个死循环其实很简单,只要保证循环中判断条件式的结果一直是为真,也就是符合条件的情况。
总结
关于循环结构的知识就讲到这里结束了,文中有什么不足之处,希望大家可以在评论区留下宝贵建议。下一篇,准备用学习的判断和循环结构来实现简单的算法——二分法以及冒泡排序。

原文地址: 从零开始学习 C 语言丨循环结构

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-23发表,共计2685字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)