#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;
}
输出:
*****
****
***
**
*
我想知道 i
和 j
在此代码演示中的作用是什么?循环决定将什么放入行中,将什么放入列中?请尽可能详细地解释整个循环,顺便说一句,我是新来的!谢谢!
最佳答案
让我们从外而内地工作。
for ( i = 5; i >= 1; i-- )
{
<em>loop-body</em>
}
操作顺序如下:
- 初始化
i
至5
(i = 5
); - 如果
i >= 1
为真则转到 3,否则转到 6; - 执行
loop-body
- 减去
1
来自i
(i--
) - 转到 2;
- 退出循环。
因此, 中的语句序列 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")
将换行符写入标准输出 - 在此之后的任何输出都将写入新行。所以现在我们的顺序是
- 初始化
i
至5
; - 如果
i >= 1
为真则转到 3,否则转到 7; - 执行
inner-loop
; - 写一个换行符到标准输出;
- 减去
1
来自i
; - 转到 2;
- 退出循环。
直接跳到终点:
for ( i = 5; i >= 1; i-- )
{
for ( j = 1; j <= i; j++ )
{
printf("*");
}
printf("\n");
}
我们现在的操作顺序是:
- 初始化
i
至5
; - 如果
i >= 1
为真则转到 3,否则转到 10; - 初始化
j
至1
; - 如果
j <= i
为真,则转到 5,否则转到 8; - 写一个
*
字符到标准输出; - 添加
1
至j
(j++
); - 转到 4;
- 向标准输出写一个换行符;
- 转到 2;
- 退出循环;
调用 printf("*");
连续五次导致 *****
被写入标准输出。连续调用它四次会导致 ****
被写入。如果您调用 printf("\n");
在这两者之间,你得到
*****
****
关于c - 嵌套for循环的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210675/