注册 登录
编程论坛 C++教室

哪个大哥解释下,这是论坛上看的例子!!有点地方不明白

從霝開匙 发布于 2007-09-10 14:40, 1125 次点击
引用
#include<iostream.h>
void main()
{
int i(1),a(0); //赋值i=1;a=0;
for(;i<=5;i++)
// .
// .
// ................>(1)
{
do{
i++;// ...............>(2)
a++; //...............>(3)
}while(i<3);
i++; //...................>(4)
}
cout<<a<<","<<i<<endl;
}
/*
1.(在这之前的for(;i<=5;i++)i不就应该是2了吗怎么到了)(2)(3) i(还是=2 ?)=2;a=1; 不跳出while
2. (2)(3) i=3;a=2; 退出while
3. (4)(1) i=5; 因为5<=5,所以在做do{...}
4. (2)(3) i=6;a=3; 因为i=6>3,所以跳出while
5. (4)(1) i=8; 此时因为 i=8>5,所以跳出for
6.输出 3,8*/

[此贴子已经被作者于2007-9-11 10:10:47编辑过]

17 回复
#2
aipb20072007-09-10 15:15
以下是引用從霝開匙在2007-9-10 14:40:38的发言:

1. 在这之前的for(;i<=5;i++)i不就应该是2了吗怎么到了 (2)(3) i还是=2;

谁说的i那时就是2?

#3
從霝開匙2007-09-10 15:19
i不赋值1了吗?不有了个i++那不2了吗 ?我哪个地方理解错了麻烦指教!!谢谢难道是for语句全部执行完了i才+1吗?

[此贴子已经被作者于2007-9-10 15:35:51编辑过]

#4
chen78062007-09-10 15:29
以下是引用從霝開匙在2007-9-10 15:19:23的发言:
i不赋值1了吗?不有了个i++那不2了吗 ?我哪个地方理解错了麻烦指教!!谢谢难道是for语句全部执行完了i才+1吗?


问题是你i++如何执行没弄清楚。先执行后加,也就是说执行1以后才加1,第二次循环赋值为2。

#5
從霝開匙2007-09-10 15:34
我看书说是++i是执行前+1,i++是执行后+1 这个执行后我理解的不是很好是拿这个列子来说是执行for(;i<=5;i++)他以后还是执行
for(;i<=5;i++)
// .
// .
// ................>(1)
{
do{
i++;// ...............>(2)
a++; //...............>(3)
}while(i<3);
i++; //...................>(4)
}
以后+1呢 1!
#6
HK狼2007-09-10 16:22

吧i++ 改成 ++i;

他们的区别就是这个 试了就知道了

#7
從霝開匙2007-09-10 16:32
这个就是一个是使用前加,一个是使用后加啊 1!那个使用后,后到时候时候是for(;i<=5;i++)还是for(;i<=5;i++)
// .
// .
// ................>(1)
{
do{
i++;// ...............>(2)
a++; //...............>(3)
}while(i<3);
i++; //...................>(4)
}
#8
從霝開匙2007-09-10 16:34
回复:(chen7806)以下是引用從霝開匙在2007-9-10 15...
是啊执行完1是指执行完for(;i<=5;i++)这一句话还是整个的
for(;i<=5;i++)
// .
// .
// ................>(1)
{
do{
i++;// ...............>(2)
a++; //...............>(3)
}while(i<3);
i++; //...................>(4)
}
#9
yuyunliuhen2007-09-10 16:42
在你这个例子里面 i++和++i结果都是一样的。
#10
從霝開匙2007-09-10 16:59
回复:(aipb2007)以下是引用從霝開匙在2007-9-10 14...
大哥那个个应该是多少啊 1!如果改成++i 是一样吗 ?
#11
從霝開匙2007-09-10 17:04
不好意思 !!终于明白了 1!在for(1;2;3){4}中1赋值,接着判断2,2为TURE的话就执行4,再执行3,若2为FALSE的话直接跳出循环,不知小弟理解得对不 !!!

[此贴子已经被作者于2007-9-10 17:06:16编辑过]


#12
snakeImao2007-09-10 17:13
for(表达式1;表达式2;表达式3)
循环体;
它的执行过程如下:
(1) 先求解表达式1;
(2) 求解表达式2,若为 0 (假),则结束循环,转到(5);
(3)若表达式2为非 0(真),则执行循环体,然后求解表达式3;
(4)转回(2);
(5)执行for语句下面的一个语句.
#13
從霝開匙2007-09-10 17:17
谢谢大家了 1!麻烦了 1!呵呵 !!以前理解错误 !!
#14
aipb20072007-09-10 20:20
前自增和后自增的区别是体现在一个语句结束前,也就是分号前。

int a,i = 0,j = 0;

a = i++; //a = ++i;
++j; //j++;

第2行效果一样。
#15
sunkaidong2007-09-11 09:24
楼主,你的标注好象是没有办法运行的啊,里面的细节问题自己看看啊.不难理解
#16
從霝開匙2007-09-11 10:10
不好意思掉了*/马上改!!现在明白了受教很多,是我没理解for怎么运行的谢谢大家的教导
#17
laogao32322007-09-12 11:55

怎么最后成3,8了啊,还是不大明白

#18
胡桂生2007-09-14 00:17
“i不赋值1了吗?不有了个i++那不2了吗 ?我哪个地方理解错了麻烦指教!!谢谢难道是for语句全部执行完了i才+1吗?”
是你对i++的执行顺序能错了。
for(i = 1;i <= 5; i ++)首先i的值是1,1 <= 5 成立所以进入for循环体,当循环体执行完毕时i++,此时i=2(在此忽略for循环体中的内容,认为循环体中没有对i进行修改),在判断2<=5成立 第二次进入循环体,当循环体又一次执行完毕时i++......每次都是执行完循环体以后i才加1
1