【问题标题】:For loop confusion in CC语言中的循环混淆
【发布时间】:2013-08-24 12:13:04
【问题描述】:

这是一个我不完全理解的练习题。

对于代码片段

int i = 0, j = 0, k = 0;
for (i=-1; i<=10; ++i){ 
    j = i; ++k; 
}

我被要求在执行代码后找到变量的值。

答案是:

 i = 11 j = 10 k = 12

我不明白怎么做,有人可以帮忙吗?

【问题讨论】:

  • 我想你的意思是输入:for (i=-1; i &lt;= 10; ++i) { j = i; ++k; }
  • 是的,刚刚解决了这个问题,谢谢
  • 解释你不明白什么,你认为结果应该是什么,以及你是如何确定的。
  • 这个问题是为了测试你对 i 什么时候递增,什么时候测试它的值的理解。忘记 j 和 k。
  • 我以为我会是 10,因为那是我在循环中达到的最高值,j 会是 10,因为 j = i,k 会是 11,因为 k 从 0 开始并且随着每代码的迭代(代码递增 11 次以从 -1 计数到 10)。当然,根据测试提供的解决方案,这些都是不正确的。我想知道的是如何找到此类问题的实际解决方案。

标签: c loops for-loop integer


【解决方案1】:

在循环之后理解i 的值非常简单,比这里的其他各种答案要简单得多。循环条件为i&lt;=10 ...为了使循环终止,该条件必须为false。显然,i 的值为 11。

循环结束时j的值是i的前一个值,即10,k的值是循环执行的次数,即1(对于- 1) + 1(对于 0)+ 10(对于 1 到 10)= 12。

【讨论】:

  • 嗯......在我写下我的答案之前,我没有完全阅读你的答案。 +1 良好的推理能力。
【解决方案2】:

i 必须是

k = 1, i = -1
k = 2, i = 0
k = 3, i = 1
k = 4, i = 2
k = 5, i = 3
k = 6, i = 4
k = 7, i = 5
k = 8, i = 6
k = 9, i = 7
k = 10, i = 8
k = 11, i = 9
k = 12, i = 10

因此 k = 12

【讨论】:

    【解决方案3】:

    步骤如下:

    1. 当循环开始时,所有三个变量都为零。
    2. 循环初始化器将i 设置为负1。
    3. 循环测试:i &lt;= 10 为真,因此进入循环。
    4. 在循环内部,j 设置为 i,所以 j 也是负 1。
    5. k 递增,所以 k 变为 1。
    6. 迭代结束; i++i 而递增,所以i 变为0。
    7. 循环测试:由于i为零,i &lt;= 10为真,所以再次进入循环。

    这样,循环继续,依次更改jki。因此,当i 变为 10 时,j 将变为 9,k 变为 11。此时:

    1. 最后一次进入循环。
    2. j 也变为 10; k 变为 12
    3. 然后i 递增到11。循环条件i &lt;= 10 为假,循环终止。

    所以i 是 11。j 是 10,k 在循环终止时是 12。

    关键是,第一遍之后,每次进入循环,ji小一,ki大一。当循环终止时,情况仍然如此。

    【讨论】:

    • 谢谢,最好的答案:)
    【解决方案4】:
    for (i=-1; i<=10; ++i){ 
        j = i; ++k; 
    }
    

    这是循环:

    i = i +1;     <-------+
       |                  |
    check condition!------|--+
       |                  |  |
    j = i;                |  |
       |                  |  | 
      k++;----------------+  |
       |                     |
       +<--------------------+
       |
    other code
    

    最后一个循环

      i = 10
       condition == true
       j = 10;
       k = 12;
    

    然后

    i= i+1 表示i = 11 但条件显示为假!循环结束。

    【讨论】:

    • @kikuchiyo 我是从这个网站学到的,有人可以画出非常酷的图!
    • 不错的图表,但不幸的是它不正确。 i 在循环的结束处递增。
    • @andy256 是的,我知道i 在循环结束时递增。所以,图表显示了。
    【解决方案5】:

    将三个变量分开。 你可以看到变量 k 会增加,循环执行的次数。 没有。坐的时间会从 -1 到 10 执行,它会进行 12 次迭代

    k = 1,  i = -1,  j=-1
    k = 2,  i = 0,   j=0
    k = 3,  i = 1,   j=1
    k = 4,  i = 2,   j=2
    k = 5,  i = 3,   j=3
    k = 6,  i = 4,   j=4
    k = 7,  i = 5,   j=5
    k = 8,  i = 6,   j=6
    k = 9,  i = 7,   j=7
    k = 10, i = 8,   j=8
    k = 11, i = 9,   j=9
    k = 12, i = 10,  j=10
    

    This i 已达到其限制后,但它会先递增然后检查, 因此 i=11, k=12 和 j 比 i 的值小一,即 j= 10

    【讨论】:

      猜你喜欢
      • 2023-02-02
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 2013-10-09
      相关资源
      最近更新 更多