#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
?
答案 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;
}