for 语句的循环体到底在哪

2009-05-13 321点热度 0人点赞 0条评论

看到这么一个题

在下面循环语句中循环体执行的次数为
for(int i=0;i<n;i++) if(i>n/2)break;

分析一下
开始
i=0<n
if判断,假
i++
i=1<n
if判断,假
i++
i=2<n
if判断,假
i++
……
i=n/2<n
if判断,假
i++
i=n/2+1<n
if判断,真
结束

在此过程中,我们看到,if判断语句执行了n/2+2次。i++执行了n/2+1次。
此题给出的答案为n/2+1,这么看来,i++应该是循环体了。

谭浩强《C语言程序设计》中写道

for语句的一般形式为
for(表达式1;表达式2;表达式3)语句
或者写成更易于理解的形式
for(循环变量赋初值;循环条件;循环变量增值)语句

在我理解中,一直以为语句部分是循环体,所以看到上题之后让我很费解,而且百度到的网页也与我的理解相同。
于是翻出K&R合著的C语言圣经——《The C Programming Language》来寻找答案。其中1.3节的举例

#include

/* print Fahrenheit-Celsius table */
main()
{
int fahr;
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}

之后,书中说道,“As with the while, the body of the loop can be a single statement or a group of statements enclosed in braces. The initialization, condition and increment can be any expressions。”(与while语句一样,for循环语句的循环体可以只有一条语句,也可以是用花括号括起来的一组语句。初始化部分,条件部分与增加步长部分都可以是任何表达式)。
这句话显然说明,表达式1-3只是起初始,条件,增加步长之用,语句才是for循环的循环体。
因而断定本文引题有误。

芒果不忙

这个人很懒,什么都没留下

文章评论