【愿成其身】[13]循环结构 – 计算机的神奇

/ 0评 / 0

本篇文章讲解题目:蜗牛爬树

推荐先独立进行解题尝试,然后再阅读本篇讲解!


一道小学数学题,但对于计算机来说,却是直接模拟这一过程更为简洁。

很明显的一个思路是,对高度不断模拟上升下落的这一过程,然后统计次数,直到高度达到树的高度。

简单的画一个流程图:


分析可以发现,这里的循环是由一个条件控制的。如果满足某一条件则一直循环,否则退出循环。

在C语言里,这种形式可以使用while语句表达,其基本形式为:

	while(/*条件*/) {
		/*语句*/
	}

可以发现与if语句形式类似,也是很好理解,若满足条件,则不断执行语句,每次执行之后判断条件是否成立,然后选择继续执行或者跳出循环。


有了上面的基础知识,我们再来思考这道题,发现上面的程序流程图对于一些情况是没有考虑到的。

加上这些考虑,我们改进流程图如下:


有了这些思考,AC还是件难事吗-.-。

嗯……似乎还有些问题。

首先是对于输出不可能判定的条件有两个,在C语言里我们使用两个&号,也就是“&&”来表示并且,而用“||”来表示或者。这个条件就可以写为n<h&&n≤m。

再来是循环内的判断,如何终止循环呢?我们可以使用continue与break来控制循环。

continue的作用是跳过continue下面的部分直接回到循环条件那里判断是否需要进行下一次循环。

break的作用就是直接跳出循环。

测试代码:

#include<stdio.h>
int main() {
	int T=10;
	while(T--) {
		/*
		if(T==5)
			continue;
		*/
		/*
		if(T==5)
			break;
		*/
		printf("%d\n",T);
	}
	return 0;
}

这里还顺带写了while的一种常见用法while(T--),可先自己理解理解其中含义,在后面输入输出系列中会详细说明。

写到这里,这一题就算告一段落了。

事实上,while还有一种变形,do-while,其基本形式为:

	do {
		/*语句*/
	} while(/*条件*/);

也就是判断循环条件是否成立之前,先执行一次循环体,这在解决一些问题的时候很方便。

也许你可以自己尝试画出它的流程图呀~

发表评论

邮箱地址不会被公开。 必填项已用*标注