【问题标题】:Primes in C: RunTime Error [closed]C中的素数:运行时错误[关闭]
【发布时间】:2018-04-26 16:40:42
【问题描述】:
#include <stdio.h>
int isPrime(int n){
    int ndiv = 0;
    int i;
    for(i=1;i<=n;i=i+1){
        if(n%i == 0){
            ndiv = ndiv+1;
        }
    }

    if(ndiv == 2){
        return 1;
    }
    else{
        return 0;
    }
}

int nextPrime(int n){}

int main(){
    int a = isPrime(7);
    printf(a);
    //printf(isPrime(4));

}

这段代码给了我一个运行时错误,我认为我在使用函数和 printf 命令时处理数据类型的方式存在问题,但我无法真正弄清楚。救命!

【问题讨论】:

标签: c function loops primes


【解决方案1】:
  • printf 中的 f 代表“格式”。您需要提供用于打印的格式字符串:printf("%d\n", a)
  • 您的isPrime 效率低下:您不需要一直尝试除以数字本身。一旦达到数字的平方根,您就可以停下来
  • 此外,您可以在看到数字不是素数时提前退出循环。

修复这些错误后,您的程序将开始运行并产生您期望的输出。

【讨论】:

  • 如果从检查 n%2==0 开始,效率会更高。 then if not loop for ( i=3; i &lt;= root; i+=2) 请注意,这仍然不是最有效的算法。
【解决方案2】:

这是一个如何使用printf 的小例子。您可以找到更多格式说明符here

#include <stdio.h>

int main()
{
    int a = 97;
    int b = 98;
    char hello[6] = "world";
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%s\n", hello);
    return 0;
}

【讨论】:

    【解决方案3】:

    这是因为您打印变量的方法是错误的。这是正确的。

    int main(){
      int a = isPrime(7);
      printf("%d",a);
    }
    

    【讨论】:

      【解决方案4】:

      我不是 C/C++ 专家,但请尝试

      printf("%d", a);
      

      %d 是一个格式占位符,本质上是一个整数。

      这看起来像是一个有趣的 isPrime 函数。根本不是很有效率,但与我过去看到的不同。您还可以遍历 1 和 n 之间的所有数字,如果找到任何除以 n 的数字,则返回 false(或 0)。或者查找更高效的算法。

      【讨论】:

        最近更新 更多