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

按照我的逻辑,这个提示应该打印 9 颗星,因为 ++i 是第一个操作,在检查条件之前使 i=1。所以然后从 i = 1 一直到 i = 9,它将打印 *'s 这将是 9 个 *'s。正确的?

4

6 回答 6

7

它会打印 10 颗星,因为您从09.. 计数,即 10 次迭代

第一次迭代将i=01

++i一旦 for 循环中的内容被执行,就会执行

for循环的步骤:

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

  2. 操作循环内的命令

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

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

  5. 再次循环内的动作命令

  6. 再次应用递增/递减

  7. 重复 4-7

问题:

为什么OP的这个问题被否决了?

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

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

于 2013-10-25T06:34:53.927 回答
7

按照我的逻辑,这个提示应该打印 9 颗星,因为 ++i 是第一个操作,

在这里你错了。

for (a; b; c) d

相当于

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

所以c一开始不执行,但仅在第一次迭代之后执行。

因此,您有 10 次迭代。

于 2013-10-25T06:37:08.157 回答
3

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

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

您正在寻找的是;

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

所以等效的 for 循环将是:

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

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

于 2013-10-25T06:43:32.797 回答
0

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

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

于 2013-10-25T06:36:53.013 回答
0

for 循环像这样开始 for(i=0; i<10;++i)

第一个这里 i=0 被评估然后检查条件 i<10。然后在循环中执行操作,然后 i 将递增,即 ++i。然后它检查条件 i<10;像这样它将持续到 0 到 9 然后停止。

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

于 2013-10-25T06:39:09.817 回答
0

在进入每次迭代之前检查 for 循环条件,并在每次迭代后评估增量部分。在第一次迭代中,i 为 0,并且在 printf 之后递增;不是以前。使用 ++i 或 i++ 无关紧要。

于 2013-10-25T06:39:12.167 回答