for(a=0;a<=9;a++)
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的所有数字全都尝试了一遍。
有没有人来帮我看看C语言for循环问题?
for(循环变量赋值;循环继续条件;循环变量变化)循环内部的语句 其中的“循环内部的语句”如果是多句而不是一句,那么需要用一对花括号将其包裹起来。一般来说执行过程就是多次地反复地执行“循环内部的语句”,而每次执行时循环变量的值会有变化,例如:for( i=0; i<100; i++) printf("%d\\n", i...
c语言中for循环疑问:
5、循环结束,执行for语句的后续语句。如果你的循环没有跳出来应该是你的循环语句某处让j的值始终是低于5的,所以循环没有停下来,而是继续执行下去。
请教大神们一道c语言的题,有关于for循环的 题目是这样的,程序段运行...
故,答案是:B
c语言中两个for语句的是怎样循环的
比如 for(i = 0; i < 5; i++) for(j = 0; j < 5; j++) printf("i = %d, j = %d\\n", i, j);先执行i=0,读取i<5的逻辑值为1,则为真,再开始内层循环。内层从j=0一直到j=4循环一整遍之后再执行i++,然后i=1<5,再把内层从j=0一直到j=4循环一整遍,如此...
C语言for循环问题
k=7;k++表示k在参与完这个运算之后进行自加1的操作。对for循环进行分解:当k=5,k<=5满足,所以进入下一次循环,k++ 当k=6,k<=5不满足,跳出循环,k++ 跳出循环之后,k=7
C语言for语句问题?
i] < s;执行for循环体,这里是空语句;执行变量更新,这里是 i++;跳转到第二部;其中,第二部跳出的时候,程序是直接跳转到第五步之后继续执行的,也就是说,i++ 是不执行的;所以,当i为3的时候,取值为4,a[i] < s 不成立,程序直接跳出,i++没有执行。所以到最后,i的值是 3 ...
c语言for语句循环顺序是怎么样的
for(i = 0; i < 10; i++){ };i = 0 在执行循环之前执行,也就是只有第一次循环回执行这条语句 i < 10 进入循环的条件,在进入循环之前判断,每次循环都会判断 i++ 在循环执行完毕后所执行的语句,这条语句执行完毕,就进入下次循环判定,也就是判定i < 10,为假时跳到循环体外 ...
为什么我的单片机c语言中for循环有问题呢,如下
for(P1=0XFE;P1!=0X7F;P1=left(P1));中P1!=0xF7就对端口P1进行了读取,left(P1)又读取,P1=这样的是输出到端口P1. 读取的情况就不能确定了,如果外围电路没有变化,那么P1端口就没有变化,读取到的值也不变,当然循环就永远进行下去或者只进行一次;如果外围电路变化,那么电路的变化也不会和循环...
c语言中关于for循环的问题,急急急!!!
死循环,无限次 第二个的理由跟第一个一样,表达式k=0的值为0,所以一次都不运行 第三个是关系判断,如果k的值为0,k==0的值才为1,否则为0,第一次循环k=0,所以第一次运行符合条件,第一次循环结束后k++,k的值成为1,第二次k==0的值就是0了,所以只循环1次 ...
高手进来看看这个C语言程序,关于for循环的
\/\/for(k=N-i;k<0;k--)\/\/printf(" ");\/\/这条语句得不到执行 改为:for(k=N-i;k>0;k--)printf(" ");就可以了,你如果写k<0,那么在进入for循环时,首先初始化k=N-i,然后判断k<0不符合,直接就跳出了……