2015-05-26 106 views
0

閱讀本書C Programming A Modern Approach。我有一個練習,我應該把分數降到最低。將分數降至最低

,提交給我的提示,那是我第一次可以計算GCD分子和分母,然後除以在GCD分子和分母。

這裏是我的程序:

#include <stdio.h> 


int main(void) 
{ 
    int frac1; 
    int frac2; 
    int gcd; 

    int a; 
    int b; 
    int c; 

    printf("Enter a fraction: "); 
    scanf("%d/%d", &frac1, &frac2); 
    b = frac1; 
    a = frac2; 

    //Calculate GCD 
    c = a % b; 

    while(gcd > 0) 
    { 
     a = b; 
     b = c; 
     c = a % b; 

     if(c <= 0) 
     { 
      gcd = b; 
      break; 
     } 
    } 


    //Divide the numerator and denominator with the GCD 
    frac1 /= gcd; 
    frac2 /= gcd; 

    printf("In lowest terms %d/%d\n", frac1, frac2); 
    return 0; 
} 

當我給6/12作爲輸入,我收到以下錯誤信息:浮點異常

我如何計算的分子和分母的GCD分別?

回答

2

在你的代碼中你永遠不會初始化gcd並且循環有點奇怪。 gcd何時會突然變爲零,所以會退出?我想你的意思

a = frac1; 
b = frac2; 

//Calculate GCD 
c = a % b; 

while(c > 0) 
{ 
    a = b; 
    b = c; 
    c = a % b; 
} 

gcd = b; 

所以,當你輸入的6/12,它會得到c = 6,進入一個循環中,切換到6/6,獲得c = 0,退出並設置gcd上述成B,這是6。

+0

@SamiKuhmonen:謝謝:) – Bryan

0
  1. 當你輸入6/12然後

    c = a % b; 
    

    使得c = 0,然後

    a = b; 
    b = c; 
    c = a % b; 
    

    a % b是除以0

  2. 您必須檢查scanf()做掃描兩個值inst假設EAD,例如

    if (scanf("%d/%d", &frac1, &frac2) != 2) 
    { 
        fprintf(stderr, "Wrong input!\n"); 
        return -1; 
    } 
    
  3. 你永遠不會用來初始化gcd所以while (gcd > 0)導致不確定的,因爲你不知道的gcd循環開始前的值。