我刚刚创建了一个实现二项式函数的程序(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;
}
答案 0 :(得分:1)
对于任何输入,您的factorial
函数始终返回0
,因为基本情况是错误的。您的基本案例会返回0
,当您乘以此基础时,您会获得0
。
因此,您在0
中除以stringa_binomiale
,这会导致浮点异常。
基本情况应为n == 1
,并且应返回1
。
答案 1 :(得分:0)
什么能给FPE? :)
提示:尝试打印“阶乘”功能的输出..
解决方案:“factorial”函数始终返回0,并且其返回值用于除法。 N!如果n为0,则为1:改变该行,你就没事了。
答案 2 :(得分:0)
您的factorial
函数始终返回0
,因此除以0
正在提供floating 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 ..
答案 3 :(得分:0)
整数除以零也会将报告作为“浮点异常”。不知道为什么会这样,可能有历史原因。
如果您的C编译器足够新,则应使用“-fsanitize = undefined”进行编译。对于很多C错误,你会得到运行时消息而不是奇怪的行为,包括这个错误。