天天动画片 > 八卦谈 > 期末核心难点突破(一):循环的基本用法

期末核心难点突破(一):循环的基本用法

八卦谈 佚名 2023-09-24 04:47:25

各位同学大家好!本学期C语言的学习已经临近尾声了,循环结构将是期末考察的重点。本文将为大家全面地梳理循环结构的相关知识点,以便大家更好地进行复习。

一、while循环

while循环是我们最早学习的循环结构,其基本结构如下:

while循环的结构相当简洁,但这里涉及到了一个核心考点:while循环可能的执行次数为0~无穷次。请注意,当程序运行到while循环时,会先对括号中的条件语句进行判断,若条件为假则直接结束while循环,执行后续语句,这种情况下while循环的次数就是0。比如下面这个例子:

在这个程序中,由于i<0的条件在第一次执行到while时就不成立,所以循环内的语句一次都不会执行,这个程序也就没有任何输出。这就是一个while循环次数为0的例子。

二、do while循环

do while循环的基本结构如下:

刚刚提到了while循环可能的执行次数为0~无穷次,do while循环可能的执行次数则为1~无穷次。当程序运行到do while循环时,会先执行一次大括号中的语句,再对条件进行判断,所以无论条件是否成立,大括号中的语句至少会被执行一次。这便是while循环与do while循环的本质不同。

刚刚我们用while循环举了一个例子,这里我们不妨把它修改为do while循环:

在这个程序中,尽管i<0依旧不成立,但由于do while循环先执行一次后判断,所以最终仍会输出一个星号。

三、for循环

for循环的结构更为复杂,其基本结构如下:

其中init为初始化语句,仅在for循环开始时执行一次;condition为条件判断语句,每轮循环开始时执行;increment为迭代语句,每轮循环结束时执行。for循环可能的循环次数与while循环相同,同样是0~无穷次。当程序执行到for循环时,会先执行init初始化语句,然后对condition进行判断,若为假则直接结束for循环,这种情况下for循环的循环次数就是0。

为了便于大家比较和思考,我们继续对刚才的案例进行修改:

这个案例中,当程序运行到for循环时,会先执行i=1,然后判断i<0是否为真。由于i<0不成立,所以for循环直接结束,大括号内的语句一次都不会执行。

四、break语句(选读)

跳出循环有两种方法,一是上文提到的条件判断,每轮循环开始时都会进行一次判定,若条件为假则会跳出循环。然而,这种方法有时会显得有些力不从心,比如下方这个案例:

例4.1 编写程序,求算式1+2+...+k<=100中,k的最大值,要求使用循环。

这道题我们的老师在课堂中讲过,我记得他提供的方法是这样的:

你第一次看到这个程序时可能会有一丝疑惑,为什么最后答案要输出i-2呢?虽然这个程序输出的结果是正确的,但它的可读性较差,不利于理解。这时就要引出我们跳出循环的第二个方法:break语句。

早在学习switch语句时我们就使用过break语句,在先前的期末大作业中大家可能也用到了break语句。在循环结构中,break的用法本质上就只有一句话:执行到break就跳出循环。然而,break语句看似简单,但有一些细节需要注意:

首先,break只会跳出最内层的一层循环。比如下方这个例子:

在执行break语句后,它跳出的只是最内层的循环,而非所有循环,这在循环嵌套中非常常见,务必要理解。

其次,break语句面向的对象是while循环、do while循环、for循环和switch语句。if语句并不是break语句处理的对象。比如下方的这个案例:

有人会把if也计算成一重循环,这是错误的。break只会跳出一重循环,但if并不是循环语句,而是条件语句,所以不能算作一重循环。

最后,break语句生效后会直接跳出循环结构,而不是等本轮循环结束后再跳出。比如下方这个例子:

在break执行后,会直接退出循环,所以并不会输出‘ # ’。 

以上就是使用break语句时需要注意的几点细节。理解了break语句后,我们再来看看刚才的那道例题:

例4.1 编写程序,求算式1+2+...+k<=100中,k的最大值,要求使用循环。

引入break语句后,程序可以写成这样:

这段代码中,我们在循环内进行了一次判断,如果sum+i<=100成立,那么我们就给sum加上i,并把i加一;如果sum+i<=100不成立,就说明当下的这个i已经超出了范围,那么i就应该减一。这样的程序就有了更好的可读性,更容易理解。这就是break的价值所在。原先我们只能在每轮循环的起始处设置跳出循环的条件,而break使我们可以在循环内的任何地方跳出循环。这就是break语句的核心作用。

五、死循环(选读)

之前提到过,while循环、do while循环和for循环都可能执行无数次,也就是死循环。下方为大家列举了最基本的三个死循环:

我们都知道1在C语言中可以代表条件为真,所以这三个循环的判断条件永远为真,也就永远无法自行退出。然而需要说明的是,这三种死循环只是最简单的情况,并不意味着只有将1作为判断条件才能实现死循环,比如下方这个案例:

可以看到,i>0永远为真,这样的情况同样可以实现死循环。所以,实现死循环只要保证条件永远为真,实现的方法是多种多样的。

六、for循环、while循环和do while循环的转换(重点)

截至目前,我们总共学习了三种不同的循环结构:for循环、while循环和do while循环。这三种循环各具特色,但又存在着紧密的关联。事实上,循环间有时是可以相互转换的,它们之间满足这样的规律:

  1. for循环和while循环都可以相互转换,也就是说:任何for循环都可以转换为while循环,任何while循环都可以转换为for循环

  2. do while循环都可以转换为for循环和while循环,但for循环和while循环不一定能转换成do while循环

先来解释第一点,为什么for循环和while循环都可以相互转换呢?我们不妨回到for循环的一般形式:

这样的for循环就等价于:

这就是for循环向while循环的转换。

同样的,while循环的一般形式是这样的:

这样的while循环就等价于:

通过这两个一般形式的比较,相信大家应该就可以理解for循环与while循环的关系了。

接着我们来说说第二点,为什么do while循环可以转换成for循环和while循环,但for循环和while循环不一定能转换成do while循环呢?原因其实很简单。do while循环执行的次数至少为一次,而while循环和for循环都可能执行0次。所以,执行0次的while循环和for循环绝对不可能以do while循环来实现。这就是for循环和while循环不一定能转换成do while循环的原因。

那么,do while循环如何转换为for循环和while循环呢?方法其实也很简单。我们还是以do while的一般形式为例:

这等价于:

do while循环至少执行一次,那么我们直接在while循环和for循环开始前把大括号中的内容执行一遍就可以了。

七、for循环、while循环和do while循环的选择(重点)

上面我们分析了循环的转换,这就意味着同样的一个功能可能可以通过不同的循环来实现。但是我们在实际编写程序时还是要进行仔细地选择,因为循环选择不当可能会大大增加我们编写程序的难度,降低程序的可读性。那么我们应当如何进行选择呢?教材P327页将其提炼为了三点:

  1. 在循环开始之前,已知循环次数,适宜使用for循环。

  2. 在循环开始之前,未知循环次数,适宜使用while循环。

  3. 在循环开始之前,未知循环次数,但至少循环一次,适宜使用do-while循环。

我们来举几个例子:

输入n,计算1~n的和:

这道题中,由于我们在执行循环前就知道了需要循环n次,所以我们就应当使用for循环

输入一个正整数n,由低到高依次输出它各位上的数

例如:

输入:4578

输出:

8

7

5

4

输入:12

输出:

2

1

这道题中由于不知道n的位数,也就无法判断循环次数,所以应选用while循环。

输入一串数字,数字间以空格隔开,数字以0作为结尾,输出所有数字之和

在这道题中,我们肯定要先输入一次n才能判断n是否为0,所以循环至少执行一次,这时就应选择do-while循环。

以上三个例子若能够理解和掌握,那么就已经有了基本的判断能力。在之后编程的过程中,也要多总结,多思考,这样才能有更深入的理解。

本文对循环语句基础内容的讲解就到这里,稍后还会有另一篇文章分析循环嵌套的常见模型。感谢你能读到这里,如果有任何疑问也欢迎联系我,我的QQ是:1312580942。祝愿每位同学都能在期末考试中考出满意的成绩!

本文标题:期末核心难点突破(一):循环的基本用法 - 八卦谈
本文地址:www.ttdhp.com/article/40238.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们