[英]Floating Point Exception of my Excercise (C language)
我剛剛制作了一個實現二項式函數(n!/k!*(nk)!)
。
我可以編譯程序,沒有任何問題,但是當我掃描2 int(n和k)時,它顯示“ Floating Point Exception”。
我已經嘗試了多種方法來解決它,但是我找不到問題,因為我對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;
}
您的factorial
函數對於任何輸入總是返回0
,因為基本情況是錯誤的。 您的基本情況返回0
,乘以該值便得到0
。
結果,您要在stringa_binomiale
除以0
,這將導致浮點異常。
基本情況應為n == 1
,並且應返回1
。
什么可以提供FPE? :)
提示:嘗試打印“階乘”函數的輸出。
解決方案:“階乘”函數始終返回0,並且其返回值用於除法運算。 n! 如果n為0,則為1:更改該行即可。
您的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 ..
整數除以零也會得到報告為“浮點異常”。 不知道為什么,可能有歷史原因。
如果您的C編譯器足夠新,則應使用“ -fsanitize = undefined”進行編譯。 對於很多C錯誤(包括此錯誤),您將獲得運行時消息,而不是奇怪的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.