2011-12-22 27 views
0
#define TRUE 1 

#define FALSE 2 

struct rational{   
    int numerator;  
    int denominator;  
}  
void reduce(struct rational *inrat,struct rational *outrat)  
{  
    int a,b,rem;   
    if(inrat->numerator>inrat->denominator)  
    { 
     a=intrat->numerator; 
     b=inrat_>denominator;  
    }   
    else  
    {  
     b=intrat->numerator; 
     a=intrat->denominator; 
    } 
    while(b!=0) 
    { 
     rem=a%b; 
     a=b; 
     b=rem; 
    } 
    outrat->numerator/=a;  
    outrat->denominator/=a;  
} 

好吧,這是一個減少有理數的代碼。它基於歐幾里德算法。
我的問題是,如果所有的數據都通過intrat(當然在主函數中)存儲在變量中,那麼使用指向結構outrat的指針是什麼。 爲什麼使用語句outrat->numerator/=a; outrat->denominator/=a; 如果通過intrat指針操縱實際值,爲什麼使用outrat在C中使用結構減少理性數的函數

+1

哇。這是非常難以閱讀。您可以花幾分鐘時間查看格式準則並解決此問題,以便我們可以閱讀它? – 2011-12-22 21:20:21

+5

'#define TRUE 1 #define FALSE 2' * ::打擊渴望自己的眼睛出去:: *你爲​​什麼要那樣做? C提供了一個內置的解釋0 - > false,所有其他值 - > true。打破這隻會混淆追隨你的程序員。包括你未來的自我。 – dmckee 2011-12-22 21:22:16

+0

@dmckee基於這個問題我猜這不是用戶的代碼,這更加可怕。我冒昧地將它格式化一下,因爲用戶在這裏是新的。第一個人的免費:) – JoeFish 2011-12-22 21:24:18

回答

2

我對算法瞭解不多,但看代碼,inrat是輸入,outrat是輸出有理數。

值爲而不是通過inrat操縱。 inrat的值用於計算除數,然後將其應用於outrat。所以這是outrat的實際操作的值。

爲了清楚起見,確實該函數應該已經用inrat作爲const來聲明。

0

這裏是減少的有理數的C++代碼,嘗試用C相同的邏輯:

#include<iostream> 
using namespace std; 
struct rational { 
     int numerator; 
     int denominator; 
}; 
/*struct rational *inputrational : Actual rational number to be reduced 
struct rational *outputrational : Variable to store the rational number in its lowest form */ 
void reduce(struct rational *inputrational, struct rational *outputrational) { 
    //Write your solution code below this line 
    int n,m,i=2,min; 
    n=inputrational->numerator; 
    m=inputrational->denominator; 
    min=n>m?m:n; 
    for(i=m;i>0;i--){ 
      if(n%i==0 && m%i==0){ 
      n=n/i; 
      m=m/i; 
      break; 
      } 
     } 

    outputrational->numerator=n; 
    outputrational->denominator=m; 


    } 

int main(){ 
    rational n1,s1; 
    n1.numerator=13; 
    n1.denominator=6; 
    reduce(&n1,&s1); 
    cout<<s1.numerator<<" "<<s1.denominator; 
}