该程序产生此输出:
*******
*****
***
*
以下是代码:
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 5; i++)
{
for (j = 1; j < i;j++)
printf(" ");
for (; j <= 8 - i;j++)
printf("*");
printf("\n");
}
return 0;
}
for (; j <= 8 - i;j++)
的含义是什么?没有初始化步骤,也不理解为什么第二行只有五个*。
答案 0 :(得分:4)
For循环实际上不需要有初始化语句。许多循环选择包含一个,但它不是绝对必要的。因此,您可以将该循环视为&#34;我们不需要在此处执行任何特殊操作以进行初始化。&#34;
至于为什么第二行有五颗星,让我们来看看这部分代码:
for (j = 1; j < i;j++)
printf(" ");
for (; j <= 8 - i;j++)
printf("*");
在第二次迭代中,i
等于2.当第一个循环运行时,它将打印出一个空格字符。当j < i
不再为真时,循环停止运行,因此当它完成运行时,j
的值将为2.因此,第二个循环将运行j =
2,3, 4,5,6,j = 7
时停止。这就是你看到五颗星的原因。
希望这有帮助!
答案 1 :(得分:1)
for((j&lt; = 8 - i; j ++)的含义是什么?
那个取得程序中使用的j的最后一个(已知)值
答案 2 :(得分:0)
for (; j <= 8 - i;j++)
printf("*");
此处不需要j
的初始化,因为j
的值来自之前的for循环。
第一个案例i=1
和j=1
但循环中的条件为false,j
递增到2
。这个值在最内层循环中运行,直到j=7
。
答案 3 :(得分:0)
好的,相对于for循环,j在最外面的块中被初始化,所以现在可以从所有for循环(或任何其他循环)访问j。
它使用最外面的for循环修改(递增)值。
我想你现在可以搞清楚了。
通过使用复制笔找出它并为for循环变量创建一个矩阵。
它肯定会提高你的编程技巧。
快乐编码。
你可以试试这个:
答案 4 :(得分:0)
该循环正在使用直接位于其上方的for循环中的j
变量。它的每次迭代都缩短了2次;一个从一开始,一个从一开始。这就是它如何在屏幕上集中维护文本。
因此,i=1
的第一次迭代不会打印任何" "
。然后,它会从*
值1-7打印7 j
。
i=2
的第二次迭代将打印一个" "
,然后打印5 *,j
值为2-6。
每次迭代都遵循这种模式。
答案 5 :(得分:0)
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 5; i++) **1**
{
for (j = 1; j < i;j++) **2**
printf(" ");
for (; j <= 8 - i;j++) **3**
printf("*");
printf("\n");
}
return 0;
}
您会发现变量j不需要在循环3中初始化,因为它已在循环2中初始化,并且它在本地块的范围内(j存在于循环1中,并且需要&#39;在循环2)之后初始化。
关于您的第二个查询, 考虑loop1的第二次迭代,其中i = 2。当loop2此时完成执行时,j = 2。现在考虑loop3,其中j是2(如先前建立的)并且执行直到j小于或等于8-i(8-i = 8-2 = 6)。 所以它打印出j = 2,3,4,5,6 = 5星的星。
答案 6 :(得分:0)
替换
printf("*");
通过
printf("%d", j)
看看j的值是如何变化的。这可以解释它是如何工作的。