c - 嵌套for循环的解释

标签 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 在此代码演示中的作用是什么?循环决定将什么放入行中,将什么放入列中?请尽可能详细地解释整个循环,顺便说一句,我是新来的!谢谢!

最佳答案

让我们从外而内地工作。

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

操作顺序如下:

  1. 初始化i5 ( i = 5 );
  2. 如果i >= 1为真则转到 3,否则转到 6;
  3. 执行 loop-body
  4. 减去1来自 i ( i-- )
  5. 转到 2;
  6. 退出循环。

因此, 中的语句序列 loop_body 被执行了 5 次——每次循环执行时,i从 5 到 4、到 3、到 2、到 1、到 0。当 i达到 0 , 条件 i >= 1不再为真,循环在该点退出。

进一步分解:

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

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

  1. 初始化i5 ;
  2. 如果i >= 1为真则转到 3,否则转到 7;
  3. 执行 inner-loop ;
  4. 写一个换行符到标准输出;
  5. 减去1来自 i ;
  6. 转到 2;
  7. 退出循环。

直接跳到终点:

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

我们现在的操作顺序是:

  1. 初始化i5 ;
  2. 如果i >= 1为真则转到 3,否则转到 10;
  3. 初始化j1 ;
  4. 如果j <= i为真,则转到 5,否则转到 8;
  5. 写一个*字符到标准输出;
  6. 添加1j ( j++ );
  7. 转到 4;
  8. 向标准输出写一个换行符;
  9. 转到 2;
  10. 退出循环;

调用 printf("*");连续五次导致 *****被写入标准输出。连续调用它四次会导致 ****被写入。如果您调用 printf("\n");在这两者之间,你得到

*****
****

关于c - 嵌套for循环的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210675/

相关文章:

从单个客户端套接字 C 连接到多个服务器

c++ - 确定性随机数生成器为同一种子提供不同的随机数

c - 面向 C/C++ 开发人员的 Eclipse IDE : breakpoints not working

c - 什么是值语义和引用语义及其区别

c - 如何在Ubuntu上使用 `c-cpp-reference`?

c - 用 malloc/calloc 初始化的二维数组

c - 测试信号量如何工作

c - 将程序直接重定向到 eclipse 控制台

c - 即使条件成立,wait_event_interruptible 也不会返回

c - 使用 c 将二进制文件附加到另一个文件