簡體   English   中英

我的練習浮點異常(C語言)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM