我试图重写以下代码
int i1=0,i2=1;
while(i1<5)
{
i1++;
i2=0;
while(++i2!=i1)
cout << "x";
cout <<"\n";
}
使用两个嵌套的for
循环。
我最初想过
int j1,j2;
for(j1=0;j1<5;j1++)
{
for(j2=0;++j2!=j1;)
cout << "x";
cout <<"\n";
}
但这会导致崩溃。移动内部j++
循环内的for
可以改为
int j1,j2;
for(j1=0;j1<5;)
{
for(j2=0,j1++;++j2!=j1;)
cout << "x";
cout <<"\n";
}
但我真的不明白将j1
增量放在第一个for
循环中是怎么回事,因为j1
应该是内部的常量for
循环。那么在内部for
?
我可以给出的唯一可能的合理解释是,在内部for
循环的测试条件中,++j2!=j1
,有一个j1
,这意味着{必须在j1
循环内初始化{1}} for
的方式相同(即使j2
为常量且j1
不同)。这可能是原因吗?
答案 0 :(得分:1)
你的第一个例子&#34;崩溃&#34; (它是一个无限循环)是因为你使用了后增量(j ++)和预增量(++ j)。
假设您有这个变量:int number = 1;
。如果你写了
int answer = 5 + number++;
cout << answer;
它将输出6
,因为当您使用后增量时,它会使用该行代码的变量的当前值,然后为该变量添加一个。
int answer = 5 + ++number;
cout << answer;
这将输出7
,因为预增量会为变量添加一个,然后THEN在计算中使用该新值。
第一个示例变为无限循环的原因是第一次循环j1
为0
。然后,您可以在第二个循环中执行此操作:for(j2=0;++j2!=j1;)
。
因为您在第二个循环中使用了预增量,j2
在1
处起作用。 1 != 0
,因此它会循环播放,第二次j2
2
,依此类推。 j2
永远不会等于j1
,因为j1
是0
而j2
每次循环时都会不断加1。
答案 1 :(得分:0)
for(j2=0;++j2!=j1;)
cout << "x";
在这里创建无限循环。 j2永远不会等于j1来弯曲循环
在第二个例子中,由于j1 ++的值增加,你将跳过第一次迭代
for ( j2 = 0, j1++; ++j2 != j1;)
cout << "x";
答案 2 :(得分:0)
假设:
int i1=0,i2=1;
while(i1<5)
{
i1++;
i2=0;
while(++i2!=i1)
cout << i1 << "," << i2;
cout <<"\n";
}
我认为对嵌套for
循环的最简单转换如下:
for(int i1=1; i1<=5; ++i1){
for (int i2=1; i2!=i1;++i2){
cout << "x";
}
cout << "\n";
}
Here你可以看到它们产生相同的输出。