Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程-浮点异常 matthewmpp@annrogers:~/Programming/C.progs/Personal$cat prime4.C /* *文件:main.c *作者:matthewmpp * *创建于2010年11月7日下午2:16 */ #包括 #包括 #包括 #包括 /* 素数。 版本4 应该知道一个数字是素数还是素数。 通过使用其他素数。 */ int输入函数() { 字符行[100]; int n_输入; 而(1){ printf(“请输入一个整数。\n”); fgets(生产线、尺寸(生产线)、标准DIN); sscanf(行、%d、&n_输入); 如果(n_输入>=0) 打破 返回(n_输入); } } int ifstatements\u func(n\u ifstate) int n_ifstate; { 如果(n_ifstate==0){ printf(“数字%d不是素数,没有因子。\n”,n_ifstate); 出口(1); } 如果(n_ifstate==1){ printf(“数字%d不是素数。\n”,n_ifstate); printf(“系数%d,为%d.\n”,如果状态为n,则状态为n); 出口(1); } 如果(n_ifstate==2){ printf(“数字%d是素数。\n”,n_ifstate); printf(“%d的因子为1和%d.\n”,n_ifstate,n_ifstate); 出口(1); } 如果(n_ifstate==3){ printf(“数字%d是素数。\n”,n_ifstate); printf(“%d的因子为1和%d.\n”,n_ifstate,n_ifstate); 出口(1); } 返回(n_ifstate); } 整数平方根函数(n_prmfnc) int n_prmfnc; { int i;//计数器 浮动平方根; int sq_root_i; 整数素数[100]; 整数长度_素数; 素数[0]=2;/*第一个素数是2*/ 素数[1]=3;/*第二个素数是3*/ 长度_素数=sizeof(素数); //printf(“n_prmfnc的before.sq_root.value=%d\n”,n_prmfnc); sq_root_f=sqrt(n_prmfnc); sq_root_i=sq_root_f; //printf(“prmfnc.after.sq_root\n”); //printf(“平方根的值=%.3f\n”,平方根); //printf(“平方根的值=%d\n”,平方根i); 返回(平方根); } 整数素数函数(平方根函数,n函数) int sq_root_pf,n_pf; { 整数素数计数器; 内部基本温度; int prime_标志=0; int素数_pf[100]; int i;//计数器 素数μpf[0]=2; 素数μpf[1]=3; 素数μpf[2]=5; printf(“之前用于in.pf”); 对于(i=0;i_C - Fatal编程技术网

C编程-浮点异常 matthewmpp@annrogers:~/Programming/C.progs/Personal$cat prime4.C /* *文件:main.c *作者:matthewmpp * *创建于2010年11月7日下午2:16 */ #包括 #包括 #包括 #包括 /* 素数。 版本4 应该知道一个数字是素数还是素数。 通过使用其他素数。 */ int输入函数() { 字符行[100]; int n_输入; 而(1){ printf(“请输入一个整数。\n”); fgets(生产线、尺寸(生产线)、标准DIN); sscanf(行、%d、&n_输入); 如果(n_输入>=0) 打破 返回(n_输入); } } int ifstatements\u func(n\u ifstate) int n_ifstate; { 如果(n_ifstate==0){ printf(“数字%d不是素数,没有因子。\n”,n_ifstate); 出口(1); } 如果(n_ifstate==1){ printf(“数字%d不是素数。\n”,n_ifstate); printf(“系数%d,为%d.\n”,如果状态为n,则状态为n); 出口(1); } 如果(n_ifstate==2){ printf(“数字%d是素数。\n”,n_ifstate); printf(“%d的因子为1和%d.\n”,n_ifstate,n_ifstate); 出口(1); } 如果(n_ifstate==3){ printf(“数字%d是素数。\n”,n_ifstate); printf(“%d的因子为1和%d.\n”,n_ifstate,n_ifstate); 出口(1); } 返回(n_ifstate); } 整数平方根函数(n_prmfnc) int n_prmfnc; { int i;//计数器 浮动平方根; int sq_root_i; 整数素数[100]; 整数长度_素数; 素数[0]=2;/*第一个素数是2*/ 素数[1]=3;/*第二个素数是3*/ 长度_素数=sizeof(素数); //printf(“n_prmfnc的before.sq_root.value=%d\n”,n_prmfnc); sq_root_f=sqrt(n_prmfnc); sq_root_i=sq_root_f; //printf(“prmfnc.after.sq_root\n”); //printf(“平方根的值=%.3f\n”,平方根); //printf(“平方根的值=%d\n”,平方根i); 返回(平方根); } 整数素数函数(平方根函数,n函数) int sq_root_pf,n_pf; { 整数素数计数器; 内部基本温度; int prime_标志=0; int素数_pf[100]; int i;//计数器 素数μpf[0]=2; 素数μpf[1]=3; 素数μpf[2]=5; printf(“之前用于in.pf”); 对于(i=0;i

C编程-浮点异常 matthewmpp@annrogers:~/Programming/C.progs/Personal$cat prime4.C /* *文件:main.c *作者:matthewmpp * *创建于2010年11月7日下午2:16 */ #包括 #包括 #包括 #包括 /* 素数。 版本4 应该知道一个数字是素数还是素数。 通过使用其他素数。 */ int输入函数() { 字符行[100]; int n_输入; 而(1){ printf(“请输入一个整数。\n”); fgets(生产线、尺寸(生产线)、标准DIN); sscanf(行、%d、&n_输入); 如果(n_输入>=0) 打破 返回(n_输入); } } int ifstatements\u func(n\u ifstate) int n_ifstate; { 如果(n_ifstate==0){ printf(“数字%d不是素数,没有因子。\n”,n_ifstate); 出口(1); } 如果(n_ifstate==1){ printf(“数字%d不是素数。\n”,n_ifstate); printf(“系数%d,为%d.\n”,如果状态为n,则状态为n); 出口(1); } 如果(n_ifstate==2){ printf(“数字%d是素数。\n”,n_ifstate); printf(“%d的因子为1和%d.\n”,n_ifstate,n_ifstate); 出口(1); } 如果(n_ifstate==3){ printf(“数字%d是素数。\n”,n_ifstate); printf(“%d的因子为1和%d.\n”,n_ifstate,n_ifstate); 出口(1); } 返回(n_ifstate); } 整数平方根函数(n_prmfnc) int n_prmfnc; { int i;//计数器 浮动平方根; int sq_root_i; 整数素数[100]; 整数长度_素数; 素数[0]=2;/*第一个素数是2*/ 素数[1]=3;/*第二个素数是3*/ 长度_素数=sizeof(素数); //printf(“n_prmfnc的before.sq_root.value=%d\n”,n_prmfnc); sq_root_f=sqrt(n_prmfnc); sq_root_i=sq_root_f; //printf(“prmfnc.after.sq_root\n”); //printf(“平方根的值=%.3f\n”,平方根); //printf(“平方根的值=%d\n”,平方根i); 返回(平方根); } 整数素数函数(平方根函数,n函数) int sq_root_pf,n_pf; { 整数素数计数器; 内部基本温度; int prime_标志=0; int素数_pf[100]; int i;//计数器 素数μpf[0]=2; 素数μpf[1]=3; 素数μpf[2]=5; printf(“之前用于in.pf”); 对于(i=0;i,c,C,“浮点异常”是一个用词不当的词。它只发生在整数除以零和其他一些与除法相关的操作上。发生的是除以零。您只初始化素数\u pf的前三个条目,但对它们进行迭代(实际上,您的循环甚至超过最后一个条目运行一次;请使用i

“浮点异常”是一个用词不当的词。它只发生在整数除以零和其他一些与除法相关的操作上。

发生的是除以零。您只初始化
素数\u pf
的前三个条目,但对它们进行迭代(实际上,您的循环甚至超过最后一个条目运行一次;请使用
i<100
而不是
i不确定我是否相信上面的答案

X=5.0; Y=0.0; Z=X/Y

这将产生一个浮点异常

问题似乎是素数只对3个元素进行了初始化,所以模正试图除以零。 顺便说一句,如果将\n添加到printf语句中,并添加额外的语句 fflush(stdout);
您更有可能在程序出错之前看到调试输出。

问题存在于
primes\u pf
变量中。您似乎已初始化此整数数组的前三个元素,但当迭代器
i
超过2时,
primes\u pf[i]
正在从未初始化的内存中读取数据,并与
sq_root_pf
进行比较;这不可能是正确的

我还没有花时间完全理解您的算法,但我最好的猜测是您忘记在for循环中的某个地方为
primes\u pf
指定一个新值

matthewmpp@annrogers:~/Programming/C.progs/Personal$ cat prime4.c
/*
 * File:   main.c
 * Author: matthewmpp
 *
 * Created on November 7, 2010, 2:16 PM
 */

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

/*
prime numbers.
version4
should tell whether a number is prime or not prime.
by using other prime numbers.
 */

int input_func ()
{
    char line[100];
    int n_input;

    while (1) {
        printf("Please enter a whole number.\n");
        fgets(line, sizeof (line), stdin);
        sscanf(line, "%d", &n_input);

        if (n_input >= 0)
            break;

        return (n_input);
    }
}

int ifstatements_func (n_ifstate)
int n_ifstate;
{
    if (n_ifstate == 0) {
        printf("The number, %d, is not prime and has no factors.\n", n_ifstate);
        exit(1);
    }

    if (n_ifstate == 1) {
        printf("The number, %d, is not prime.\n", n_ifstate);
        printf("The factors of %d, is %d.\n", n_ifstate, n_ifstate);
        exit(1);
    }

    if (n_ifstate == 2) {
        printf("The number, %d, is a prime.\n", n_ifstate);
        printf("The factors of %d, are 1 and %d.\n", n_ifstate, n_ifstate);
        exit(1);
    }
    if (n_ifstate == 3) {
        printf("The number, %d, is a prime.\n", n_ifstate);
        printf("The factors of %d, are 1 and %d.\n", n_ifstate, n_ifstate);
        exit(1);
    }
    return (n_ifstate);
}

int square_root_func (n_prmfnc)
int n_prmfnc;
{
    int i;  //counter

    float sq_root_f;
    int sq_root_i;

    int primes[100];
    int length_primes;

    primes[0] = 2; /*first prime is 2.*/
    primes[1] = 3; /*second prime is 3.*/
    length_primes = sizeof (primes);

    //printf ("before.sq_root.value of n_prmfnc=%d\n", n_prmfnc);
    sq_root_f = sqrt(n_prmfnc);
    sq_root_i = sq_root_f;
    //printf ("prmfnc.after.sq_root\n");
    //printf ("value of sq_root=%.3f\n", sq_root_f);
    //printf ("value of sq_root=%d\n", sq_root_i);

    return (sq_root_i);
}

int prime_func (sq_root_pf, n_pf)
int sq_root_pf, n_pf;
{
    int prime_counter;
    int prime_temp;
    int prime_flag=0;

    int primes_pf[100];
    int i;                  //counter

    primes_pf[0]=2;
    primes_pf[1]=3;
    primes_pf[2]=5;

    printf ("before.for.in.pf");
    for (i = 0; i <= 100; ++i) {
        printf ("after.for.in.pf");
        if (primes_pf[i] <= sq_root_pf) {
            printf ("before.modulus.in.pf");
            prime_temp = n_pf % primes_pf[i];
            printf ("after.modulus.in.pf");
            if (prime_temp == 0) {
                ++prime_counter;
                if (prime_counter == 0)
                    prime_flag = 1; /*yes, number is prime.*/
            }
        }
    }
    return (prime_flag);
}

int main() {
    int n_main1;    //number from input
    int n_main2;    //number after if statements
    int sq_root_main;    //square root of number from function
    int prime_flag_main;   //value of 1 if it is a prime

    n_main1 = input_func ();
    printf("main.after.input.function=%d.\n", n_main1);

    n_main2 = ifstatements_func (n_main1);
    printf ("main.after.ifstatments.function=%d\n", n_main2);

    sq_root_main = square_root_func (n_main2);
    printf ("main.after.square_root_func_func=%d\n", sq_root_main);

    prime_flag_main = prime_func (sq_root_main, n_main2);
    printf ("main.after.prime_func=%d\n", prime_flag_main);

    return (EXIT_SUCCESS);
}


OUTPUT:
matthewmpp@annrogers:~/Programming/C.progs/Personal$ cc -c prime4.c
matthewmpp@annrogers:~/Programming/C.progs/Personal$ cc -o prime4 prime4.c -lm
matthewmpp@annrogers:~/Programming/C.progs/Personal$ ./prime4
Please enter a whole number.
44
main.after.input.function=44.
main.after.ifstatments.function=44
main.after.square_root_func_func=6
Floating point exception
matthewmpp@annrogers:~/Programming/C.progs/Personal$ 
转换为双精度(双精度)n_prmfnc

我对这一点非常肯定!

你在这一点上大错特错了!它被零除了。
sqrt(x) needs x to be of type double, you have used int.