**** *** ** *
/*code for this pattern*/
#include<stdio.h>
int main()
{
int i, j;
for (i = 4 ; i >= 1 ; --i) {
for (j = 1 ; j <= i; ++j) { /*why does j<=i?*/
printf("*");
}
printf("\n");
}
}
那么为什么j <= i
?第一个for循环负责行。而第二个for循环负责每行中的星数。再次,i
不理解条件的逻辑 - j <= i
。
编辑:C是我曾经尝试过的第一种语言。我想这个问题非常清楚。我不明白for循环的条件组件。就这样。有些人明白我在问什么。感谢
EDIT2:好像我不明白我的问题。我想知道为什么j必须小于或等于i。为什么我可以小于或等于j?我无法看到i,行数和j,每行中的星数之间的关系。
由于
答案 0 :(得分:0)
正如你所说,外部for循环是针对行数。内部for循环用于打印*
n次,其中n是该行必须在该行中打印的次数。
即)在第一次迭代中:i = 4,因此,j = 1; j <= 4执行4次,因此您打印4 *
。
在第二次迭代中:i = 3,因此j = 1; j <= 3执行三次,因此您打印3 *
答案 1 :(得分:0)
i开始为高电平并递减,而i为&gt; = 1. j从1开始低电平,并在j为&lt; = i时递增。
这意味着虽然我是一个更大的值,但j会增加更多次,这意味着我们希望从一开始就打印更多的&#39; &#39>。在每个换行符后,慢慢缩小&#39; 的那一段。
内部循环基本上是执行printf()调用的次数。因此,您在第一次迭代时最终得到4&#39; *,对于下一次迭代,最终得到3,然后是1.在新行上。
答案 2 :(得分:0)
每行上的星数以及剩余要打印的行数(包括当前行)都等于i
。因此i
用于倒计时要打印的行数,也用作每行打印的星数。在第一行i == 4
,所以你想打印四颗星,所以你有一个循环:
for(j = 1; j<=4; ++j) {
printf("*")
}
下次i
将为3,因此内部循环将为:
for(j = 1; j<=3; ++j) {
printf("*")
}
等等。
答案 3 :(得分:0)
你问:
for(j = 1; j<=i; ++j){ /*why does j<=i?*/
当i
等于4
时,您需要打印四个*
。
当i
等于3
时,您需要打印三个*
。
支票j <= i
确保了这一点。
答案 4 :(得分:0)
对于每个循环,您应该考虑迭代次数。 如你所说,在第一个for循环中,
i >= 1
此for循环在i
时迭代,意味着4 -> 3 -> 2 -> 1
更改为i
(即4次=行数)。
对于每一行,您要打印*
个i
个,这意味着您要为每一行重复打印过程for(j = 1; j <= i; ++j){ ...
次。在嵌套循环中,
j
j <= i
会在1 -> 2 -> ... -> i
时进行迭代,这意味着i
(即每行for(j = 0; j < i; ++j) {...
次)。这与
i
也会迭代{{1}}次。