for的循环嵌套问题

bensonqiu 2013-10-07 01:34:27
#include <stdio.h>

int main()
{
int i =1,j=1;
for(i=1;i<10;i++)
{
for(j=1;j<i+1;j++)
{
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
return 0;
}
最近学到了for的循环嵌套,感觉有些混乱,不知道它们之间的执行顺序到底是怎么样,有没有哪位大神能详细的帮我解释一下,复制党勿扰!
...全文
430 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
x1128R 2013-10-07
  • 打赏
  • 举报
回复
循环嵌套就是最里层的循环全部执行完了外部的循环才执行一次,外部的循环执行完了那整个循环嵌套就执行完了.刚开始是有点不好理解,时间长了就很好理解了
Elite_Sword_break 2013-10-07
  • 打赏
  • 举报
回复
#include <stdio.h> int main() { int i =1,j=1; for(i=1;i<10;i++) { for(j=1;j<i+1;j++) { printf("%d*%d=%d\t",j,i,i*j); } //一般来说,从外循环for赋值一次,到内循环for循环一遍。只是你这个比较特殊,内循环一次而已。 printf("\n"); } return 0; }
Elite_Sword_break 2013-10-07
  • 打赏
  • 举报
回复
引用 11 楼 u011649187 的回复:
麻...话我就不多说了,感觉你根本没试过运行那代码就在这里空说而已,只是怕你误导他人 要是沒了j=1,每次i++跟j++也是各一次,才會導致i跟j的值相同 正因为有了j=1 每次内循环才会由1开始加,才会造出乘数表的结果 你所说的 [quote=引用 7 楼 Elite_Sword_break 的回复:] [quote=引用 6 楼 u011649187 的回复:] [quote=引用 4 楼 Elite_Sword_break 的回复:] //一般来说,从外循环for赋值一次,到内循环for循环一遍。只是你这个比较特殊,内循环一次而已。
他这个是内循环次数随i增加,所以不是纯粹一次[/quote]看清楚了,内循环中i的值是不变的,只有跳回外循环i的值才会增加。在这里其实i ,j是一样的值,所以导致了内外循环次数一样。 这里的情况是这样: i第n次赋值: 第一次:i=1 ->j=1; 第二次:i=2 ->j=2; ..... 第n次;i=n ->j=n; 至于你说的内循环次数随i增加,这没错。问题是我说外循环一次,内循环也就一次也没错啊。我有不是说一共只循环一次。 [/quote] 是在里面没有j=1的情况才会发生 输出的结果会是 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 你再[完整的]把LZ的代码运行一次,看看跟你的有什么差别[/quote]经过验证,确实如此,额,感谢你的教导,还是实践出真知啊
笨蛋琪露諾 2013-10-07
  • 打赏
  • 举报
回复
麻...话我就不多说了,感觉你根本没试过运行那代码就在这里空说而已,只是怕你误导他人 要是沒了j=1,每次i++跟j++也是各一次,才會導致i跟j的值相同 正因为有了j=1 每次内循环才会由1开始加,才会造出乘数表的结果 你所说的
引用 7 楼 Elite_Sword_break 的回复:
[quote=引用 6 楼 u011649187 的回复:] [quote=引用 4 楼 Elite_Sword_break 的回复:] //一般来说,从外循环for赋值一次,到内循环for循环一遍。只是你这个比较特殊,内循环一次而已。
他这个是内循环次数随i增加,所以不是纯粹一次[/quote]看清楚了,内循环中i的值是不变的,只有跳回外循环i的值才会增加。在这里其实i ,j是一样的值,所以导致了内外循环次数一样。 这里的情况是这样: i第n次赋值: 第一次:i=1 ->j=1; 第二次:i=2 ->j=2; ..... 第n次;i=n ->j=n; 至于你说的内循环次数随i增加,这没错。问题是我说外循环一次,内循环也就一次也没错啊。我有不是说一共只循环一次。 [/quote] 是在里面没有j=1的情况才会发生 输出的结果会是 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 你再[完整的]把LZ的代码运行一次,看看跟你的有什么差别
Elite_Sword_break 2013-10-07
  • 打赏
  • 举报
回复
引用 9 楼 u011649187 的回复:
当删去j=1才会出现你那个结果吧
我和小伙伴们都惊呆了,j++难道就这么没存在感
笨蛋琪露諾 2013-10-07
  • 打赏
  • 举报
回复
当删去j=1才会出现你那个结果吧
笨蛋琪露諾 2013-10-07
  • 打赏
  • 举报
回复
引用 7 楼 Elite_Sword_break 的回复:
[quote=引用 6 楼 u011649187 的回复:] [quote=引用 4 楼 Elite_Sword_break 的回复:] //一般来说,从外循环for赋值一次,到内循环for循环一遍。只是你这个比较特殊,内循环一次而已。
他这个是内循环次数随i增加,所以不是纯粹一次[/quote]看清楚了,内循环中i的值是不变的,只有跳回外循环i的值才会增加。在这里其实i ,j是一样的值,所以导致了内外循环次数一样。 这里的情况是这样: i第n次赋值: 第一次:i=1 ->j=1; 第二次:i=2 ->j=2; ..... 第n次;i=n ->j=n; 至于你说的内循环次数随i增加,这没错。问题是我说外循环一次,内循环也就一次也没错啊。我有不是说一共只循环一次。 [/quote] 你先运行一次程式码看看结果吧... j每次循环也会设成1的 第一次:i=1 ->j=1; 第二次:i=2 ->j=1; 第三次:i=2 ->j=2; 第四次:i=3 ->j=1; ..... 第n次;i=n ->j=n;
笨蛋琪露諾 2013-10-07
  • 打赏
  • 举报
回复
没得编辑帖...真不方便 #include <stdio.h> int main() { int i =1,j=1; for(i=1(开始for前先把i设成1) ;i<10(条件) ;i++ (内容完结后再i++) ) { for(j=1;j<i+1;j++) { printf("%d*%d=%d\t",j,i,i*j); } printf("\n"); } return 0; }
coblan 2013-10-07
  • 打赏
  • 举报
回复
这个有什么好难的啊。外面for执行一步,就是内部for执行一遍。
笨蛋琪露諾 2013-10-07
  • 打赏
  • 举报
回复


int main(){

 int i =1,j=1;
 while(i<10)
 {j=1;
 while(j<i+1)
 {
 printf("%d*%d=%d\t",j,i,i*j);
 j++;}
 printf("\n");
 i++;}
while学了没? 这样比较容易看到顺序吧?
Elite_Sword_break 2013-10-07
  • 打赏
  • 举报
回复
引用 6 楼 u011649187 的回复:
[quote=引用 4 楼 Elite_Sword_break 的回复:] //一般来说,从外循环for赋值一次,到内循环for循环一遍。只是你这个比较特殊,内循环一次而已。
他这个是内循环次数随i增加,所以不是纯粹一次[/quote]看清楚了,内循环中i的值是不变的,只有跳回外循环i的值才会增加。在这里其实i ,j是一样的值,所以导致了内外循环次数一样。 这里的情况是这样: i第n次赋值: 第一次:i=1 ->j=1; 第二次:i=2 ->j=2; ..... 第n次;i=n ->j=n; 至于你说的内循环次数随i增加,这没错。问题是我说外循环一次,内循环也就一次也没错啊。我有不是说一共只循环一次。
笨蛋琪露諾 2013-10-07
  • 打赏
  • 举报
回复
引用 4 楼 Elite_Sword_break 的回复:
//一般来说,从外循环for赋值一次,到内循环for循环一遍。只是你这个比较特殊,内循环一次而已。
他这个是内循环次数随i增加,所以不是纯粹一次

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧