高手请看此道c++题目

来源:百度知道 编辑:UC知道 时间:2024/07/03 02:53:25
#include<iostream.h>
int main()
{int a,b,c=0;
for(a=1;a<6;a++)
for(b=6;b>1;b--)
{
if((a+b)%3==2)
{c+=a+b;
cout<<a<<' '<<b<<' ';}
if(c>20) break;
}
cout<<"c="<<c<<endl;
return 0;
}
为什么程序输出的结果没有a=4,b=4和a=5,b=3?谢谢你!

a b c
1 4 5
2 6 13
2 3 18
3 5 26
在此以后遇到这一句
if(c>20) break;
就会break,但是不是break出2重循环,而是
break出b的循环。
下一个循环是 a=4 b=6
不满足 if((a+b)%3==2)
所以又到了
if(c>20) break;
break出b的循环但是a的循环没有完
下一个循环是 a=5 b=6
满足 if((a+b)%3==2)
执行了c += a+b
c 变成了37
又到了
if(c>20) break;
break出b的循环,而a得循环也完了。
打印c结束。

逻辑看不懂要干什么。
不熟的时候2重循环最好写{, 对齐

for(a=1;a<6;a++)
{
for(b=6;b>1;b--)
{
if((a+b)%3==2)
{
c+=a+b;
cout<<a<<' '<<b<<' ';
}
if(c>20) break;
}
}

去掉break这一句,结果就是
1 4 2 6 2 3 3 5 3 2 4 4 5 6 5 3 c=58

因为a=4,b=4时c>20了啊

程序稍作修改
看起来更方便
#include<iostream.h>
int main()
{
int a,b,c=0;
for(a=1;a<6;a++)

for(b=6;b>1;b--)
{
if((a+b)%3==2)