求助:设计实现抽象数据类型"有理数"

[复制链接]
查看11 | 回复8 | 2021-1-27 07:11:48 | 显示全部楼层 |阅读模式
用C语言设计实现抽象数据类型"有理数",基本操作包括有理数的加法,减法,乘法,除法,
要用最小公倍数,最大公约数。
会的帮忙看下谢谢哇
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层
要求以分子,分母输入
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层
用分数表示
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层
struct有理数{
int分子;
int分母;
}
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层

typedefstruct
{
inti;
intj;
}YouLiShu;
voidmain()
{
YouLiShua,b,c;
intmax;
inputtwoYouLiShu;
.....;
max=a[j]*b[j];
c=a*b[j]+b*a[j];
构造一个子程序求两个数的最大公约数并返回;
将c,c[j]同时除以最大公约数即可。
同样可实现减法。
乘法实现
c=a*b;
c[ij=a[j]*b[j];
再调用返回最大公约数的子程序,来将分子分母同是除以最大公约数。
除法实现
c=a*b[j];
c[j]=a[j]*b;
调用最大公约数子程序,同理..
}
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层
typedefstruct
{
//整数部分
longinteger;整数部分
//小数部分小数部分为0时分子为0分母为1,其他情况下分子分母为正整数且互素
unsignedlongnumerator;//分子
unsignedlongdenominator;//分母
}RationalNumber;
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层
改进下
typedefstruct
{
boolbflag;//标记小数部分是否为0
//整数部分
longinteger;整数部分
//小数部分小数部分为0时分子为0分母为1,其他情况下分子分母为正整数且互素
unsignedlongnumerator;//分子
unsignedlongdenominator;//分母
}RationalNumber;
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层

我觉得5楼的好
回复

使用道具 举报

千问 | 2021-1-27 07:11:48 | 显示全部楼层
/*随便写了一个,只求两个分数相加的*/
#include
#include
usingnamespacestd;
structRational
{
intnumerator;
intdenominator;
};
intGCD(inta,intb)
{
intc;
if(a<b)
swap(a,b);
while(b)
{
c=a%b;
a=b;
b=c;
}
returna;
}
intLCM(inta,intb)
{
return(a*b/GCD(a,b));
}
intmain()
{
Rationala,b;
intn,i;
charstr[100];
printf("Inputtworationalonebyone%cSample:1/21/3%c:\n",char(91),char(93));
for(intk=0;k<2;k++)
{
gets(str);
inttemp=0;
intlen=strlen(str);
for(i=0;str!='/';i++)
temp=temp*10+str-'0';
if(k==0)
a.numerator=temp;
elseb.numerator=temp;
temp=0;
for(i++;i<len;i++)
temp=temp*10+str-'0';
if(k==0)
a.denominator=temp;
elseb.denominator=temp;
}
intc=LCM(a.denominator,b.denominator);
n=c/a.denominator*a.numerator+c/b.denominator*b.numerator;
if(n%c==0)
printf("%d/%d+%d/%d=%d\n",a.numerator,a.denominator,b.numerator,b.denominator,n/c);
else
{
inttemp=GCD(n,c);
printf("%d/%d+%d/%d=%d/%d\n",a.numerator,a.denominator,b.numerator,b.denominator,n/temp,c/temp);
}
return0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行