有没有人来帮我看看C语言for循环问题?
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
abc=a*100+b*10+c;
cba=c*100+b*10+a;
我用这个循环实现了找出所有abc+cba=1333的程序,但是突然发现我自己竟然都不知道这个循环是如何执行并实现组成所有三位数的,有没有人能帮我讲解一下这个for循环执行的顺序和过程? 展开
for循环的结构一般是这样的:
for(循环变量赋值;循环继续条件;循环变量变化)
循环内部的语句
其中的“循环内部的语句”如果是多句而不是一句,那么需要用一对花括号将其包裹起来。
一般来说执行过程就是多次地反复地执行“循环内部的语句”,而每次执行时循环变量的值会有变化,例如:
for( i=0; i<100; i++) printf("%d\n", i);
这里会多次调用printf函数来打印数字,而每次打印的数字i的值是不同的(0, 1, 2, ..., 98, 99)。一般在“循环变量赋值”这里,要给循环变量(例如上述例子中的i)赋一个初始值,也就是第一次执行“循环内部的语句”时i的值(也就是printf打印出的第一个数值:0)。赋初始值后,就开始进入循环过程(开始第一次执行“循环内部的语句”)。每次执行完“循环内部的语句”之后,会执行“循环变量变化”处的语句,使得循环变量变量发生变化(例如上述例子中的i++),然后判断现在的“循环继续条件”是否为真,如果为真,那么再次开始执行“循环变量变化”处的语句......以此类推,循环往复。
在本题中,有三层循环的嵌套。我们先看看最内层:
for(c=0;c<=9;c++)
循环内部的语句
在最内层的循环中,不难看出,在每次循环中,c都会发生变化(每次增加1),而且c的范围是0到9。在c从0到9逐渐变化时,a和b的值不会变化(因为最内层的循环处于上一层循环的“循环内部的语句”处。在执行“循环内部的语句”时,循环变量一般不发生变化。循环变量的变化一般都发生在每次“循环内部的语句”执行结束之后)。
所以在最内层,第一次执行“循环内部的语句”时,各个变量的值为:
a=0,b=0,c=0
第二次执行“循环内部的语句”时,各个变量的值为:
a=0,b=0,c=1 (注意,a和b没有变,只有c变化了)
第三次执行“循环内部的语句”时,各个变量的值为:
a=0,b=0,c=2 (注意,a和b没有变,只有c变化了)
以此类推,接下来各个变量的变化为:
a=0,b=0,c=3
a=0,b=0,c=4
a=0,b=0,c=5
a=0,b=0,c=6
a=0,b=0,c=7
a=0,b=0,c=8
a=0,b=0,c=9
a=0,b=1,c=0 (为什么变成这样了呢?请注意,c从0到9,最内层的循环语句已经执行结束。在上一层看来,现在应该进行下一轮循环了,所以上一层的循环变量(也就是b)会增加1。而最内层的循环会再次启动,c从0开始)
a=0,b=1,c=1
a=0,b=1,c=2
a=0,b=1,c=3
a=0,b=1,c=4
a=0,b=1,c=5
a=0,b=1,c=6
a=0,b=1,c=7
a=0,b=1,c=8
a=0,b=1,c=9
a=0,b=2,c=0(为什么变成这样了呢?现在你应该已经理解了)
a=0,b=2,c=1
a=0,b=2,c=2
a=0,b=2,c=3
......
a=0,b=2,c=9
a=0,b=3,c=0(为什么变成这样了呢?现在你应该已经理解了)
......
a=0,b=9,c=6
a=0,b=9,c=7
a=0,b=9,c=8
a=0,b=9,c=9
a=1,b=0,c=0(为什么变成这样了呢?现在你应该已经理解了)
a=1,b=0,c=1
a=1,b=0,c=2
a=1,b=0,c=3
......
a=9,b=9,c=6
a=9,b=9,c=7
a=9,b=9,c=8
a=9,b=9,c=9
至此,已经将000到999的所有数字全都尝试了一遍。