C中for循环的逻辑

时间:2015-10-17 23:05:33

标签: c loops for-loop

****
***
**
*
/*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,每行中的星数之间的关系。

由于

5 个答案:

答案 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}}次。