有人可以解释为什么我的for循环停在错误的地方

时间:2015-07-18 03:20:46

标签: c

对不起,如果这是一个愚蠢的错误,我只是一个初学者。我正在回答“C编程现代方法”一书中的一个问题。这要求打印1和给定数字之间的所有偶数平方。

这是我的原始代码:

#include <stdio.h>

int main(void)
{
  int n, i;

  printf("Enter a number: ");
  scanf ("%d", &n);

  for (int i = 2; i <= n ; i += 2) {
    printf("%d %d\n", i * i, n);
  }

  return 0;
}

问题是它只会在一万次击中时停止,所以我在for循环中划分了“n”:

for (int i = 2; i <= n / 10 ; i += 2) {
  printf("%d %d\n", i * i, n);
}

任何人都可以解释为什么会发生这种情况

2 个答案:

答案 0 :(得分:1)

如果您希望广场在i * i <= n

之前停止,则

循环检查应为n

  for (int i = 2; i * i <= n ; i += 2) {

答案 1 :(得分:0)

此代码打印从2n的每个偶数的平方。例如,让我们循环几次:

  1. i = 2n = 100
  2. i = 4n = 100
  3. i = 6n = 100
  4. ...

    1. i = 96n = 100
    2. i = 98n = 100
    3. i = 100n = 100
    4. 在第51次添加2 i时,它将为102,大于n,因此循环将退出。

      要打印所有偶数方格,直到n,你想做更多的事情:

      for(auto i = 2, j = i * i; n >= j; i += 2; j = i * i){
          printf("%d %d\n", j, n);
      }
      

      请注意,条件中的for允许我执行多个初始化和多个增量,因此我将i踩到2并{{1只是重新分配j每个增量的平方。