2 joyce1995 Joyce1995 于 2016.01.31 10:57 提问

这道简单的编程题里,为啥运行结果会是这个?

图片说明
以上题,结果是怎么出来的呢??

老师说for的嵌套循环语句时一笔带过,之前重点讲了道for的例题,
图片说明
但我发现,用这道例题的逻辑去思考嵌套循环语句,完全行不通嘛!im crazy!!求好心人解答...

8个回答

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2016.01.31 19:44
已采纳

其实,我觉得你应该是不会看内外层的嵌套,一般都是从最内层开始看 ,

i j k

所以一上来就是000 001

之后k都循环完了,再往外就是j = 1 的情况,而这时候i = 0

所以结果是 010 011 以此类推

j的情况结束了,i = 1 情况就要开始了

而j k 还是要从0 开始算 ,所以是

1 0 0 1 0 1

注意此时变化的依然是最内层,所以 接下来就是

j = 1 的变化

1 1 0 1 1 1
,你要用debug仔细看一下就会了,即便是我在分析,如果不看的你的图说,也还是可能做错的,

总看看就不会出错了~~~希望对你有用

qq_27183003
qq_27183003   Ds   Rxr 2016.01.31 11:17
Joyce1995
Joyce1995 这个网址里的知识点很好地解释了第二张图的运行逻辑,关键是第一张图里的题,我不知道什么意思啊
接近 2 年之前 回复
devmiao
devmiao   Ds   Rxr 2016.01.31 15:03

这程序很正确啊,这就是循环嵌套。外侧循环每执行1次,内侧就执行2次。最外侧的1次,最内侧就是8次。你单步运行下就知道了。

u012140536
u012140536   2016.01.31 11:04

每个for循环都需要花括号

qq_31122105
qq_31122105   2016.01.31 12:00

For循环先执行最里面的,这里也就是k的那层,执行一次for循环,打印一次i,j,k第一次打印也就是000,第二次k+1, i,j都为0,所以为001 ,再次执行时,执行for循环的j,然后是k,所以,i,j,k分别为010,011……

Joyce1995
Joyce1995 000 001 理解了。为什么接下来不是011呢?运行逻辑能讲仔细点吗?拜托啦!
接近 2 年之前 回复
u012061345
u012061345   2016.01.31 12:11

这不是很正常嘛。用for语句执行的逻辑去推导。

xianfajushi
xianfajushi   2016.01.31 14:58

爱动脑筋的人和我一起玩自动嵌套,或许理解和控制循环量更容易理解,
string 字符串 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int 量 = 字符串.Length, 跟 = 0, 定 = 3, 嵌套量 = 量 - 定;
int[] 无限嵌套 = Enumerable.Range(定, 嵌套量).ToArray();
do
{
foreach (int 元 in 无限嵌套)
{/*逐级运算*/
if (元 < 0)
{
if (跟 + 1 >= 嵌套量) break;/*数组最后元素小于0时*/
--无限嵌套[跟 + 1];
无限嵌套[跟] = 定 + 跟;
}
++跟;
}
if (无限嵌套[嵌套量 - 1] >= 0)
Console.WriteLine(string.Join(" ", 无限嵌套));
--无限嵌套[0];
跟 = 0;
} while (无限嵌套[嵌套量 - 1] >= 0);

        string 字符串 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 输出 = "";
        int 量 = 字符串.Length, 跟 = 量;
        int[] 无限嵌套 = Enumerable.Repeat(0, 量).ToArray();
        do
        {
            while (--跟 >= 0)/*逐级运算*/
                if (无限嵌套[跟] >= 量)
                {
                    if (跟 - 1 < 0) break;/*防止越界*/
                    ++无限嵌套[跟 - 1];
                    无限嵌套[跟] = 0;
                }
            if (无限嵌套[0] < 量)
                //Console.WriteLine(string.Join(" ", 无限嵌套));
                foreach (int aa in 无限嵌套)
                    输出 += 字符串[aa].ToString();
            Console.WriteLine(输出);
            ++无限嵌套[量 - 1];
            跟 = 量; 输出 = "";
        } while (无限嵌套[0] < 量);
        /*多年前的想法,今天终于实现了,自动嵌套循环的算法,从此不再局限于固定的嵌套循环,以后都可以使用动态的嵌套循环。2016年1月25日10:05*/
Joyce1995
Joyce1995 OMG!!新手表示更晕了。。。
接近 2 年之前 回复
xianfajushi
xianfajushi 既可以从最前也可以从最后还可以玩花样从任何层做最深嵌套层
接近 2 年之前 回复
91program
91program   Ds   Rxr 2016.01.31 13:21

sum=0 完全可以放在 for 语句之前,因为它是在 for 的初始化部分,也只执行一次。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!