【愿成其身】[14]for循环 – 另一种表达方法

/ 0评 / 0

本篇文章讲解题目:大学求和1到n

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


依旧是一道小学题目。

本篇文章有过激言论,请谨慎阅读。

这一题一般常用做初讲for循环的例题,而这道题也确实很合适,因为这标志着思考问题解决方案的可行性,由优先思考数学方法转变为思考时间复杂度。

而有争议的地方,便是for循环的写法。

首先是基本结构如下:

	for(/*起始语句*/; /*判断语句*/; /*修正语句*/) {
		/*循环语句*/
	}

同样画出它的流程图:


(参考文章《for,(do-)while的循环体执行》)

for循环比while好在它能清晰的操作循环变量,比如下面代码:

	int i;
	for(i=0; i<n; i++) {
		/*循环语句*/
	}

这便是让循环语句循环n次的写法,同样的操作可写为while(n--)。

但是如果我们在循环中用到了i,比如我们想让奇数次时执行某一语句,偶数时执行另一语句,就可以写为:

	int i;
	for(i=0; i<n; i++) {
		if(i%2==0) {
			/*偶数时操作*/
		} else {
			/*奇数时操作*/
		}
	}

所以具体什么时候该用哪种循环,取决于哪一种可以使代码简洁、写起来方便,可以进行互相转换。

上边代码就等同于:

	int i=0;
	while(i<n) {
		if(i%2==0) {
			/*偶数时操作*/
		} else {
			/*奇数时操作*/
		}
		i++;
	}

而至于for循环有争议的地方,便是for循环中的i=0。

在C++中,我们可以在循环的初始语句里写成:for(int i=0; i<n; i++),也就是把定义变量放在循环内部,这样的话变量作用范围就仅限于这个循环里面。如此做,可以防止循环与循环之间的干扰,特别是需要函数互相调用时,防止变量因为已被占用而发生错误。

(关于变量的作用范围,可参考我之前写过的一些文章《for循环中的定义变量》《关于for循环中定义变量的后续讨论》)

然而,在标准C中不允许这么写,可以尝试把代码保存为.c和.cpp来查看编译区别。

所以如果需要使用在for中定义变量的形式,提交时需要选C++,事实上我认为最好以后默认选C++。

这不是C语言课……

这不是C语言课……

这不是C语言课……

所以我认为,只要自己在使用时清楚地认识到哪部分是C++特有的,那么我们大可放心使用C++。毕竟我依旧认为,我们不应该在语言层面纠结太长时间。

这些问题需要在今后的学习过程中自己体会与抉择,这里不多说了……


注意事项:

多条循环语句不要忘了加大括号!

不要忘了加大括号!

加大括号!


剩下的就没有什么了,在掌握了循环之后,已经可以开始尝试一些入门级水题了。

这条路,长且艰……

发表评论

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