为什么要打印10颗星?

时间:2013-10-25 06:33:35

标签: c

for(i = 0; i<10 ; ++i)
  printf("*");

根据我的逻辑,这个提示应该打印9星,因为++ i是第一个操作,在检查条件之前使i = 1。那么从i = 1到i = 9,它将打印出* * 9。正确?

6 个答案:

答案 0 :(得分:7)

它会打印10颗星,因为你从0计算到9 ..这是10次迭代

第一次迭代将使用i=0而不是1

一旦for循环中的内容被执行了

++i就会被执行

for循环的步骤:

  1. 使用启动条件(i=0)启动循环并检查终止条件

  2. 操作循环中的命令

  3. 操作增量/减量条件(++i) - 除非循环内的命令已被执行,否则不会执行此操作

  4. 检查终止条件(i<9) - 如果条件不满足则退出循环

  5. 再次在循环内执行操作命令

  6. 再次应用递增/递减

  7. 重复4-7

  8. <强>问题:

    为什么OP的这个问题被低估了?

    对我来说,这个问题对于从编程开始的人来说似乎非常真实。为什么我们不能更加鼓励和乐于助人,而不是因为某人提出真正的问题而失去动力?

    我知道这个问题对于大多数人来说可能太微不足道了,但这并不是阻止某人提出这些问题的理由(特别是如果他们不熟悉编程)

答案 1 :(得分:7)

  

根据我的逻辑,此提示应打印9颗星,因为++ i是第一个操作,

这里你错了。

for (a; b; c) d

相当于

a;
while (b) {
    d;
    c;
}

所以c首先不执行,但仅在第一次迭代后执行。

因此,您有10次迭代。

答案 2 :(得分:3)

如果将其转换为等效于while循环,则为:

i = 0;
while (i<10) {
  printf("*");
  ++i;
}

你在寻找的是什么;

i = 0;
while (++i<10) {
  printf("*");
}

所以循环的等价物是:

for (i = 0; ++i < 10;) {
    printf("*");
}

在逻辑检查步骤中增加变量的位置。

答案 3 :(得分:0)

  

引用:因为++ i是第一个操作,在检查条件之前使i = 1

那是你出错了。 ++ i是循环的最后一个操作。

答案 4 :(得分:0)

For循环就像这样开始 for(i = 0; i&lt; 10; ++ i)

此处评估i = 0,然后检查条件i <10。 然后在循环中进行操作然后我将增加,即++ i,然后它检查条件i <10; 像这样它会一直持续到0到9然后停止。

所以第一次i = 0并不重要++ i或i ++,因为它将在循环内的执行语句结束时进行评估。

答案 5 :(得分:0)

在进入每次迭代之前检查for循环条件,并在每次迭代后计算增量部分。在第一次迭代时,i为0,并且在printf之后递增;不是之前。使用++ i或i ++并不重要。