求C++程序输出结果

来源:百度知道 编辑:UC知道 时间:2024/05/06 06:24:42
#include<iostream>
using namespace std;
void main()
{inti(1),a(0);
for(;i<=5;i++)
{do{i++;
a++;
}while(i<3);
i++;}
cout<<a<<","<<i<<endl;
具体执行过程是怎样的 ? 谢谢
外部循环体:执行i++,i=7
外部循环体:结束前执行for内的i++,i=8
这个时候 I已经不满足I<=5了 还要执行I++?

补充:

注意看这三行的过程:
(1)外部循环体:执行i++,i=7
(2)外部循环体:结束前执行for内的i++,i=8
(3)满足i<=5吗?不满足,执行cout。

实际上执行到(2)的时候,就标志着一次for循环的结束,这时候程序并不知道要不要继续执行for循环,那么它需要再回到for的头部,去判断一下for的条件是不是成立。很显然,这时候iM=5不成立,于是就不继续执行for循环,跳出来,执行cout了。

而这里执行i++,是因为for循环展开代码的特性,你可能没仔细看我写的展开代码,仔细看你会发现,for循环的第三个子句(这里就是i++)是在每次循环的结束时被执行的,无论for的条件满足不满足,只要你结束了某次循环,就会执行这个语句。
那么我们看上面三行,(1)结束后,标志着1次循环的结束,这时候不是执行下一次循环,而是直接执行i++,然后再“尝试”执行下一次for循环。(能理解我这里为什么写“尝试”么?)

我们还可以换个思路来看。
假如从一开始,(1)类似的语句结束后,不执行(2)类似的语句,直接跳到下一次for循环,也就是进入for的条件判断,那么结果会怎样?
很显然,for循环的第三个子句(i++)将永远不被执行,循环将变成死循环。

下面是补充前的回答:

-----------------------------------------

结果:

3,8

代码注释:

#include<iostream>
using namespace std;
void main()
{
int i(1),a(0); // 初始化:i=1,a=0
for(;i<=5;i++) // 当i<=5满足就执行循环,每次循环结束前执行i++,一共执行5次
{
do {
i++;
a++;
} while(i<3); // 当i&