做者 谢恩铭,公众号「程序员联盟」。 转载请注明出处。 原文:www.jianshu.com/p/9193259c0…git
《C语言探索之旅》全系列程序员
上一课是 C语言探索之旅 | 第一部分第八课:条件表达式 。github
下一课咱们就要一块儿编写第一个 C语言的小程序啦,激动吗?那就快点把今天这课学完吧。小程序
循环,是什么呢?bash
简单地说:循环使你可以重复执行一样的指令。学习
放轻松,这一课的内容相对比较简单,不像以前的【变量】和【条件表达式】那么难以消化,因此好好享受这一课吧。由于第二部分就要开始难起来咯!ui
循环是一种结构,使指令能够被执行屡次。spa
与 条件语句/条件表达式 相似,循环语句也有几种形式。可是至终,目的仍然是同样的:屡次执行一样的指令。3d
咱们一块儿来看看 C语言中经常使用的三种循环:code
这三种循环的基本原理都是同样的,以下图所示:
上图中,依次进行的是:
上图中存在的问题是:若是咱们不中止循环,那么电脑是有能力一直执行下去的(“我一路向北,离开有你的季节,方向盘周围,回转着个人后悔” -- 歌词来自周杰伦的歌曲《一路向北》)。
是的,咱们的电脑兄不像有些人,它是历来不抱怨的,叫它干什么就干什么,这也是咱们喜欢它的缘由。
永不中止的循环有一个术语叫“死循环”,陷入死循环的电脑很容易卡机,这也是程序员常常抱怨的问题之一。
怎么可以让循环停下来呢?
聪明的读者已经想到了:条件表达式 。
对了,上一课咱们学了条件表达式,如今到它派用场的时候了。
事实上,咱们建立循环语句的时候,总会给它一个条件,这个条件指明:在条件为真时,才继续执行循环,不然中止。
下面咱们就来看看第一种循环:while 循环。
while 循环的结构是这样的:
while (/* 条件 */)
{
// 重复执行的指令
}
复制代码
不难理解吧,while 在英语中是“当...时”,便是说:
当括号里的“条件”为真时,执行大括号里的指令,一旦条件变为假,不执行指令,while 循环结束。
用一个小程序来看一下吧,这个程序中,咱们要让用户输入数字 27,只有当用户输入的是 27 时,程序才会中止,不然会一直让用户输入数字(是的,我很任性):
#include <stdio.h>
int main(int agrc, char *argv[]) {
int number = 0;
while (number != 27) {
printf("请输入 27 ! ");
scanf("%d", &number);
}
return 0;
}
复制代码
运行程序,会以下显示:
请输入 27 ! 10
请输入 27 ! 17
请输入 27 ! 30
请输入 27 ! 27
复制代码
接下来,咱们用 while 循环来作一点更有意思的事情:让循环执行必定次数 。
int counter = 0;
while (counter < 10) {
printf("你好 !\n");
counter++;
}
复制代码
它会显示 10 次“你好!”,以下:
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
复制代码
逻辑究竟是怎么样的呢?
counter 初始值为 0 。
咱们的 while 循环的循环条件是 counter < 10,也就是说,只有在 counter 变量的值小于 10 的时候,才会执行循环体(大括号里)的指令:打印“你好!”。
由于初始 counter 是 0,循环条件为真,因此执行 printf,显示“你好!” 。
在循环体中,咱们将 counter 的值加 1 。
第二次判断条件的时候,counter 的值已是 1 了,但仍是知足 counter < 10 这个条件,所以再次显示“你好!”。
如此这般,一直到 counter 的值变为 10,不知足 counter < 10 这个条件了,while 循环才结束,因此一共打印了十个“你好!”。
为了加深理解,咱们再来写一个小程序,此次咱们让 while 循环每次输出变量的值:
int counter = 0;
while (counter < 10) {
printf("变量的值是 %d\n", counter);
counter++;
}
复制代码
执行程序,显示以下:
变量的值是 0
变量的值是 1
变量的值是 2
变量的值是 3
变量的值是 4
变量的值是 5
变量的值是 6
变量的值是 7
变量的值是 8
变量的值是 9
复制代码
这下是否理解得更透彻了?
do 表示“作”。
这种类型和 while 循环很是相似,不过比较少用到。
与 while 循环惟一的不一样点就是循环条件的位置,while 循环中循环条件是在一开始,而 do...while 循环中是在最后:
int counter = 0;
do {
printf("你好 !\n");
counter++;
} while (counter < 10);
复制代码
这样的不一样改变了什么呢?
很简单,while 循环可能会一次也不执行循环体(大括号里)的指令,假如条件一开始就不知足。
而 do...while 循环是先执行循环体的指令,再作条件判断,因此 do...while 的指令至少会被执行一次。
若是咱们将 do...while 循环中的变量 counter 初始化为 40,那么 do...while 会显示一次“你好!”,对于 while 循环,若是 counter 初始为 40,那么一次也不会显示“你好!”
for 表示“对,对于”。
理论上,for 循环能够实现咱们想要的任何类型循环。
以前已经说过,for 循环就是另外一种形式的循环而已。
以前 while 循环的例子:
int counter = 0;
while (counter < 10) {
printf("你好 !\n");
counter++;
}
复制代码
以上的代码,咱们能够写一个 for 循环的版本,它们作的是一样的事情:
int counter;
for (counter = 0 ; counter < 10 ; counter++) {
printf("你好 !\n");
}
复制代码
这两个循环都会显示十次“你好!”。
for 循环和 while 循环有什么区别呢?
for 循环的例子中,counter 变量并无在声明的时候初始化。
在 for 后面的括号中,有更多的东西(下面咱们会详述)。
在循环体(大括号里的内容)中,没有 counter++ 这个指令。
咱们最感兴趣的是 for 后面的括号中的内容,由于那也是 for 循环吸引人的地方。
能够看到括号中有三条指令,用分号(;
)分隔:
第一条指令用于初始化:在咱们的状况,咱们将 counter 的值初始化为 0。
第二条指令用于规定条件:和 while 循环同样,这个条件用于判断循环是否继续执行。当这个条件为真时,for 循环才会继续。
第三条指令用于作自增:这条指令是在循环体中的指令执行完后才执行的,用于更新变量的值;大多数状况下咱们是作自增,固然咱们也能够作自减(counter--
)或者增长/减小任意值(counter -= 2
) (关于自增和自减,请回顾运算符那一课)。
所以,for 循环的逻辑是这样的:
括号里的第一句指令用于初始化变量,只会执行一次,以后再也不执行。
对括号里的第二句指令作判断,若是条件为真,则执行循环体(大括号里)的指令;若是为假,则不执行循环体,for 循环结束。
执行完循环体里的指令,接着执行括号里的第三句指令,用于更新变量的值。
再次对括号里的第二句指令作判断,若是条件为真,则执行循环体(大括号里)的指令;若是为假,则不执行循环体,for 循环结束。
如此周而复始。注意,括号里的第一句指令只会执行一次,以后就用不上了。
简单说来,for 循环浓缩了不少内容在 for 后面的括号里。
必定要熟练掌握 for 循环,由于会很经常使用。
循环可以使咱们的程序重复执行一系列指令。
有好几种循环:while,do...while,for 。依场景不一样,选择某个循环会更适合。
for 循环多是使用最频繁的循环语句了,在里面咱们常常会作变量的增减。
今天的课就到这里,一块儿加油吧!
下一课:C语言探索之旅 | 第一部分第十课:第一个C语言小游戏
下一课咱们将编写第一个 C语言小游戏!
我是 谢恩铭,公众号「程序员联盟」运营者,慕课网精英讲师 Oscar 老师,终生学习者。 热爱生活,喜欢游泳,略懂烹饪。 人生格言:「向着标杆直跑」