0

我刚刚制作了一个实现二项式函数的程序(n!/k!*(n-k)!)

我可以毫无问题地编译我的程序,但是当我扫描 2 int(n 和 k)时,它显示“浮点异常”。

我尝试了很多方法来解决它,但我找不到问题,因为我不擅长 c 编程:( 我正在学习。有人可以帮助我吗?非常感谢。

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

int factorial( int n ){
    int result;
    if( n == 0 ){
        result = 0;
    } else {
        result = n * factorial((n - 1));
    }
    return result;
}

char *stringa_binomiale(int n, int k){

    char *s;
    s=malloc(sizeof(char)*20);

    int b;

    b = factorial(n)/(factorial(k)*factorial(n-k));

    sprintf(s,"%i su %i fa %i",n ,k ,b);

    return s;
}

int main (void){

    int n;
    int k;
    char *s;
    s=malloc(sizeof(char)*20);

    printf("n:");
    scanf("%i",&n);
    printf("k:");
    scanf("%i",&k);

    s= stringa_binomiale(n,k);
    printf("%s \n", stringa_binomiale(n, k));

    free(s);
    return 0;
}
4

4 回答 4

1

您的factorial函数总是返回0任何输入,因为基本情况是错误的。你的基本情况返回0,当你乘以这个你得到0

结果,您将除以0in stringa_binomiale,这会导致浮点异常。

基本情况应该是n == 1并且应该返回1

于 2014-07-09T10:44:56.020 回答
0

你的factorial函数总是返回,因此0除以0floating point exception

factorial功能应该是

int factorial( int n ) {
  int result;
  if( n == 0 ){
    result = 1;
  } else {
    result = n * factorial((n - 1));
  }
  return result;
 }

这是链接http://ideone.com/CTKDyX ..

于 2014-07-09T10:45:16.550 回答
0

整数除以零也会报告为“浮点异常”。不知道为什么会这样,可能有历史原因。

如果您的 C 编译器足够新,您应该使用“-fsanitize=undefined”进行编译。对于很多 C 错误,包括这个错误,您将收到运行时消息而不是奇怪的行为。

于 2014-07-09T10:45:25.613 回答
0

什么可以给 FPE?:)

提示:尝试打印“阶乘”函数的输出。

解决方案:“阶乘”函数总是返回 0,并且它的返回值用于除法。嗯!如果 n 为 0,则为 1:更改该行就可以了。

于 2014-07-09T10:37:20.773 回答