这些嵌套的`for`循环如何在C语言中工作?

时间:2015-01-04 12:53:05

标签: c for-loop

我发现很难理解for循环是如何工作的,特别是当有多个循环时。如果f3(1,-2,1),那么这个函数返回什么?也是n6 =?语言是C.

int f3(int n6, int n7, int n8) {
    int i, j;

    for(i = 0; i <= n8; i++) {
        for(j = i; j > n7; j--) {
            n6 *= 2;
        }
    }

    return n6;
}

答案应为32。

1 个答案:

答案 0 :(得分:2)

此函数需要多个int作为输入。

n7n8是迭代输入。或者它们为循环提供长度值。

第一个for循环循环n8的长度,而i小于或等于n8

第二个循环将第一个循环的当前index(= i)作为起始点。它查看索引是否大于n7并且通过从{(1}}大于one的索引(j)中减去index来迭代(j--)。

计算在第二个循环的迭代中进行:它将n7乘以n6。完成循环后,它会返回two的乘法。

在你的情况下,第一个循环将运行两次:

  1. n6 = 1且0和1小于或等于。
  2. index n8成为循环2的0starting index = 0且大于n7(-2)。
  3. 此循环将从0开始运行两次,-1大于-2。
  4. 在该循环期间j(1)乘以两次乘以两次。或n6
  5. 第二个循环结束并返回第一个循环,再次运行,因为1等于1.
  6. 现在索引1 * 2 * 2成为循环2的起始索引。
  7. 此循环将运行三次,因为1,0和-1大于-2。
  8. 再次乘法:1
  9. 循环结束1(两次迭代)。
  10. 4 * 2 * 2 * 2 = 32。

    此函数在n6需要大于n的迭代次数上返回n7的2次幂,否则n8将不加修改地返回。< / p>


    由于这几乎是JavaScript,我们可以使用示例代码演示:

    n6
    function f3(n6, n7, n8) {
        let i, j;
    
        for(i = 0; i <= n8; i++) {
            for(j = i; j > n7; j--) {
                n6 *= 2;
            }
        }
    
        return n6;
    }
    
    document.querySelector("button").addEventListener("click", function(){
      const n6 = document.querySelector("input.n6").value;
      const n7 = document.querySelector("input.n7").value;
      const n8 = document.querySelector("input.n8").value;
      
      console.log(f3(n6, n7, n8));
    });
    label{
     display: block;
     margin: 2px;
    }
    
    label > input{
      display: block;
      width: 50px;
    }