有没有人来帮我看看C语言for循环问题?

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;... 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循环执行的顺序和过程?
展开
 我来答
msxxlele
2020-03-27 · TA获得超过2736个赞
知道小有建树答主
回答量:396
采纳率:100%
帮助的人:144万
展开全部

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的所有数字全都尝试了一遍。

听不清啊
高粉答主

2020-03-27 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

 

#include<stdio.h>

int main()

{ int a,b,c,abc,cba;

  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;   //组成第二个三位数

        if(abc+cba==1333)    //如果符合条件

          printf("%d+%d=1333\n",abc,cba);    //就输出

      }

  return 0;

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式