【问题标题】:How to fix Floating point exception: 8 in C code如何修复浮点异常:C 代码中的 8
【发布时间】:2020-11-22 01:19:25
【问题描述】:

我正在尝试编写一个程序来列出给定参数中的所有素数。我的终端不会输出任何东西,即使我在程序末尾有打印功能。

您能否让我知道 x 和 g 变量是否是必要的,或者我是否可以坚持使用 i。

这是我的代码:

#include <stdio.h>

#define MAX_SIZE 1000
int main(){

    int N , i, x, g, a[MAX_SIZE];

    scanf("%d", &N);

    a[0] = 2;

    for (i = 1; i < N - 2; i++)
    {
        a[i] = (a[i-1]) + 1;
    }

    for (x = 0; x < N - 2; x++){
        for (i = 1; i < N - 2; i++){
            if (a[i] % a[x] == 0) {
                for (g = i; g < N - 2; g++){
                    a[g] = a[g+1];
                }
            }
        }
    }


    for (i = 0; i < N - 2; i++){
        printf("%d \n", a[i]);
    }

   return 0;
}

【问题讨论】:

  • 如果你在没有任何浮点数学运算的代码中得到一个浮点异常,它只能意味着一件事:除以 0。
  • 算法不是很了解,错误原因是a[i] % a[x]处被零除。
  • 你应该使用缩进让你的代码更容易阅读。

标签: c primes


【解决方案1】:

你这里有一个错误:

for (g = i; g < N - 2; g++){
  a[g] = a[g+1];

}

g = N - 2 - 1时,使用a[N - 2]的值,但元素没有初始化,值不确定。

您应该检查并修复您的算法,不要读取未初始化的元素。


您的代码对我来说太复杂了。这是我的代码示例,用于打印所有 N 或更少的素数:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int N;
    int* primes;
    int prime_count;
    int i, j;
    if (scanf("%d", &N) != 1) return 1;
    primes = malloc(sizeof(*primes) * N);
    if (primes == NULL) return 2;

    prime_count = 0;
    for (i = 2; i <= N; i++) {
        int is_prime = 1;
        for (j = 0; j < prime_count; j++) {
            if (i % primes[j] == 0) {
                is_prime = 0;
                break;
            }
        }
        if (is_prime) primes[prime_count++] = i;
    }

    for (i = 0; i < prime_count; i++) {
        printf("%d\n", primes[i]);
    }

    free(primes);
    return 0;
}

【讨论】:

  • 但是不让 g = i 给 g 一个值吗?反正我觉得你指的是g,我只是个初学者XD
  • @ChrisThomas 它给g 一个值,但它没有给a[N-2] 一个值。
  • 在什么阶段分配数组位置 N - 2 ?另外,我需要使用该版本代码的原因是因为我的讲师指定了我们的算法应该如何工作
  • @ChrisThomas 我的猜测是元素不应该被分配,条件g &lt; N - 2应该被替换为g + 1 &lt; N - 2
  • @ChrisThomas g 循环正在从数组中删除一个元素。去掉元素后,数组短了1,N也要相应调整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多