本篇文章讲解题目:大学求和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++。毕竟我依旧认为,我们不应该在语言层面纠结太长时间。
这些问题需要在今后的学习过程中自己体会与抉择,这里不多说了……
注意事项:
多条循环语句不要忘了加大括号!
不要忘了加大括号!
加大括号!
剩下的就没有什么了,在掌握了循环之后,已经可以开始尝试一些入门级水题了。
这条路,长且艰……