【问题标题】:Logic of for loop in CC中for循环的逻辑
【发布时间】:2015-10-17 23:05:32
【问题描述】:
****
***
**
*
/*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 &lt;= i?第一个 for 循环负责行。而第二个 for 循环负责每行中的星数。同样,i 不理解条件的逻辑-j &lt;= i。 编辑:C 是我尝试过真正学习的第一门语言。这个问题很清楚,我想。我不明白 for 循环的条件组件。就这样。不过,有些人明白我在问什么。谢谢

EDIT2:似乎我对我的问题不清楚。我想知道为什么 j 必须小于或等于 i。为什么我可以小于或等于 j?我无法看到 i(行数)和 j(每行中的星数)之间的关系。

谢谢

【问题讨论】:

  • 您的问题不清楚。你想做什么 ?学习 C ?还是解决实际问题?
  • 使用调试器或铅笔和纸,看看发生了什么。
  • 你是什么意思,“为什么 j
  • 您有什么特别不明白的地方?很高兴您有一个非常简短的示例,但我不知道该说什么,除了“这是创建运行 i 次的循环的方法之一”
  • 在第一个 i 循环中,i==4 所以j 循环将打印 4 颗星。在第二个i 循环中,i==3 所以j 循环将打印 3 颗星,依此类推。

标签: c loops for-loop


【解决方案1】:

正如您所说,外部 for 循环用于行数。内部的 for 循环是将* 打印 n 次,其中 n 是该字符必须在该行中打印的次数。

i.e) 在第一次迭代中:i = 4,因此,j = 1;j*。

在第二次迭代中:i = 3,所以 j = 1;j*

【讨论】:

    【解决方案2】:

    i 从高开始,当 i >= 1 时递减。j 从低 1 开始,当 j

    这意味着虽然 i 是一个更大的值,但 j 将增加更多次,这意味着我们希望从一开始就打印更多的 '',然后在每个换行符之后,慢慢地缩小那条''的范围。

    内部循环本质上是为了执行该 printf() 调用恰好 i 次。因此,第一次迭代得到 4 个 '*',下一次迭代得到 3 个,然后是 2,然后是 1。每个都在新的一行。

    【讨论】:

      【解决方案3】:

      每行的星数和剩余要打印的行数(包括当前行)都等于i。所以i 既用于倒计时剩余打印的行数,也用于每行打印的星数。在第一行i == 4,所以你想打印四颗星,所以你有一个循环:

      for(j = 1; j<=4; ++j) {
           printf("*")
      }
      

      下一次i 将是 3,所以内部循环将是:

      for(j = 1; j<=3; ++j) {
           printf("*")
      }
      

      等等。

      【讨论】:

        【解决方案4】:

        你问:

        for(j = 1; j<=i; ++j){ /*why does j<=i?*/
        

        i 等于4 时,您要打印四个*s。
        i 等于3 时,您要打印三个*s。

        检查j &lt;= i 可以确保这一点。

        【讨论】:

          【解决方案5】:

          对于每个循环,您应该考虑它被迭代了多少次。 正如你所说,在第一个 for 循环中,

          for(i = 4; i >=1; --i){ ...
          

          此 for 循环在 i &gt;= 1 时进行迭代,这意味着 i 更改为 4 -&gt; 3 -&gt; 2 -&gt; 1(即 4 次 = 行数)。

          对于每一行,您想要打印* 的数量i,这意味着您想要为每一行重复打印过程i 次。在嵌套循环中,

          for(j = 1; j <= i; ++j){ ...
          

          jj &lt;= i 时迭代,表示1 -&gt; 2 -&gt; ... -&gt; i(即每行i 次)。顺便说一句,实际上与

          for(j = 0; j < i; ++j) {...
          

          它也会迭代i 次。

          【讨论】:

            猜你喜欢
            • 2018-01-10
            • 1970-01-01
            • 2014-10-03
            • 1970-01-01
            • 2022-11-04
            • 2014-01-05
            • 1970-01-01
            • 1970-01-01
            • 2011-06-05
            相关资源
            最近更新 更多