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

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

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


依旧是一道小学题目。

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

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

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

首先是基本结构如下:

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

同样画出它的流程图:

TODO

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

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

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

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

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

1
2
3
4
5
6
7
8
int i;
for(i=0; i<n; i++) {
    if(i%2==0) {
        /*偶数时操作*/
    } else {
        /*奇数时操作*/
    }
}

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

上边代码就等同于:

1
2
3
4
5
6
7
8
9
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++。毕竟我依旧认为,我们不应该在语言层面纠结太长时间。

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


注意事项:

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

不要忘了加大括号!

加大括号!


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

这条路,长且艰……

该内容采用 CC BY-NC-SA 4.0 许可协议。
最后更新于 2016-08-28 16:00:46