嵌套for循环的解释

时间:2017-02-13 18:09:23

标签: c

#include <stdio.h>

int main()
{
  int i,j;
  for(i=5; i>=1;i--)
  {
    for(j=1; j<=i; j++)
    {
      printf("*");
    }
    printf("\n");
  }
  return 0;
}

输出:

*****
****
***
**
*

我想知道ij在此代码中的作用是什么,循环决定放入行中的内容以及列中的内容?请在每个细节上解释整个循环,因为我是新来的!谢谢!

3 个答案:

答案 0 :(得分:3)

让我们在外面工作。

for ( i = 5; i >= 1; i-- )
{
  loop-body
}

操作顺序如下:

  1. i初始化为5i = 5);
  2. 如果i >= 1为真,则转到3,否则转到6;
  3. 执行 loop-body
  4. 1i
  5. 中减去i--
  6. 转到2;
  7. 退出循环。
  8. 因此, loop_body 中的语句序列执行5次 - 每次循环执行时,i从5到4变为3,变为2 ,当1 i到达0时,条件i >= 1不再为真,并且循环在此时退出。

    稍微分解一下:

    for ( i = 5; i >= 1; i-- )
    {
      inner-loop
      printf("\n");
    }

    printf("\n")将换行符写入标准输出 - 此后的任何输出都将写入新行。所以现在我们的序列是

    1. i初始化为5;
    2. 如果i >= 1为真,则转到3,否则转到7;
    3. 执行 inner-loop ;
    4. 将换行符写入标准输出;
    5. 1;
    6. 中减去i
    7. 转到2;
    8. 退出循环。
    9. 直接跳到终点:

      for ( i = 5; i >= 1; i-- )
      {
        for ( j = 1; j <= i; j++ )
        {
          printf("*");
        }
        printf("\n");
      }

      我们现在的操作顺序是:

      1. i初始化为5;
      2. 如果i >= 1为真,则转到3,否则转到10;
      3. j初始化为1;
      4. 如果j <= i为真,则转到5,否则转到8;
      5. *字符写入标准输出;
      6. 1添加到jj++);
      7. 转到4;
      8. 将新行写入标准输出;
      9. 转到2;
      10. 退出循环;
      11. 连续五次调用printf("*");会导致*****被写入标准输出。连续四次调用会导致****被写入。如果您之间致电printf("\n");,则会获得

        *****
        ****
        

答案 1 :(得分:0)

首先,外部循环将i设置为5。然后内部循环重复5次,从15。因此打印*****。在内循环之后,打印'\n'。这意味着我们继续第二排 外循环将i递减到4,这意味着内循环分别仅重复4次。因此它会打印****,之后会跟随'\n'。我们继续下一行 外循环将i递减到3,这意味着内循环分别仅重复3次。因此它会打印***,之后会跟随'\n'。这一直持续到i1。这意味着,最后一个循环只打印*。之后,循环完成,程序结束 所以基本上ij正在确定循环重复的频率。

答案 2 :(得分:0)

当你使用循环时,你需要一个“计数器”,基本上是一个在发生某些事情时会改变的变量,如果计数器达到一定数量,循环就会终止。 ij是您的柜台。这是一个非常通用的定义,你应该研究编程循环。

int i,j;初始化名为ij的变量,而不给它们赋值。

for(i=5; i>=1;i--)说:i等于5,而i大于或等于1,将i减1(这是i--的意思)。

在此循环中有for(j=1; j<=i; j++)循环,其中:j等于1,而j小于或等于i(最初为5,但会减少)而外循环迭代),增量 j,或增加一(j++意味着增加1)。

每个循环都有一个printf语句,用于打印“*”或新行(\n)作为外循环和内循环迭代。

return 0终止程序

相关问题