C中的函数用于使用结构减少有理数

时间:2011-12-22 21:18:56

标签: c data-structures

#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;     
}  

好的,这是一个减少有理数的代码。它基于欧几里德的算法 我的问题是,如果所有数据都通过outrat存储在变量中,那么使用指向结构intrat的指针是什么(当然,在主函数中)。 为什么使用语句outrat->numerator/=a; outrat->denominator/=a; 如果实际值是通过intrat指针操纵的,为什么使用outrat

2 个答案:

答案 0 :(得分:2)

我对算法知之甚少,但查看代码,inrat是输入,outrat是输出有理数。

通过inrat操纵值 inrat的值用于计算除数,然后将其应用于outrat。所以实际操作的是outrat的值。

为清楚起见,该函数应该已使用inrat声明为const

答案 1 :(得分: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;
}