【问题标题】:How do I correctly reinitialize a loop variable in C?如何正确重新初始化 C 中的循环变量?
【发布时间】:2019-10-15 18:41:45
【问题描述】:

我想知道我的代码中的错误逻辑在哪里,我怀疑它在于我的循环在打印素数之前完全运行失败,但我似乎无法修复它。我每次都尝试将变量 fcount 重新初始化为 0,但生成的“素数”不正确。我的程序目标是让用户输入数字 N,我可以从 1 循环到 N 并打印其间的所有素数。如果有人能帮助指出我的逻辑错误以及任何可能的解决方案,我将不胜感激。

#include <stdio.h>

int main(void) {
    int i,j,n, fcount = 0;
    printf("Enter number n:\n");
    scanf("%d",&n);
    printf("prime numbers are:\n");
    for (i=1; i < n; i++)
        {
          for (j = i; j > 0; j--)
              {

                if (i%j == 0)
                    {
                      fcount++;     
                      // at some point every number will have fcount =2
                      fcount = 0;
                    }

              }

        }

         if (fcount == 2)
            {
                printf("%d\n",i);
            } 
            return 0;
}

【问题讨论】:

  • 要重新初始化 fcount,在代码中您希望将其设置为零的位置将其设置为零 - 就在获得 i 的新值之后和开始计算ji 的因数。然后,要测试一个数字 i 是否有两个因数,请在完成对因数的计数之后并在继续使用新值 i 之前测试 fcount

标签: c loops nested-loops


【解决方案1】:

这不是测试素数的一种非常有效的方法,但该方法有效。但是,您有两个错误:

  • 对于每个 ifcount 必须从 0 开始,因此 fcount = 0 应该是该循环中的第一件事。
  • 您必须为每个i 测试fcount == 2,而不是最后一次,因此将该测试移到i 上的循环中。

对您的代码的一些观察:

  • 如果您正确格式化代码,这些错误可能会更容易被发现:请养成在大括号中缩进每个块的习惯,以便代码结构清晰。
  • 最好在需要的地方声明变量。这意味着fcount 可以在i 上的循环中是本地的。循环变量ij可以直接在循环头中声明。

把所有这些放在一起:

#include <stdio.h>

int main(void)
{
    int n;

    printf("Enter number n:\n");
    scanf("%d",&n);
    // Should test for input errors ...

    printf("prime numbers are:\n");

    for (int i = 1; i < n; i++) {
        int fcount = 0;

        for (int j = i; j > 0; j--) {
            if (i % j == 0) {
                fcount++;
            }
        }

        if (fcount == 2) {
            printf("%d\n", i);
        }
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多