資源簡介
關于抽象數據類型--有理數,實現有理數的加減乘除運算

代碼片段和文件信息
#include
using?namespace?std;
/*定義抽象數據類型有理數Q*/
struct?Q
{
int?fzfm;
};
/*求最小公倍數和最大公約數,
??用參數select作為選擇開關,來選擇
??此方法的功能是求最小公倍數還是求
??最大公約數。*/
int?min_max(int?aint?bint?select)
{
int?aabbct;?
aa=a;?
bb=b;?
if(a {?
t=a;?
a=b;?
b=t;?
}?
c=a%b;?
while(c!=0)?
{?
a=b;?
b=c;?
c=a%b;?
}??
if(select==1)
return?aa*bb/b;??//返回最小公倍數
else
return?b;????????//返回最大公約數
}
/*分數初始化*/
Q?fen_init()
{
Q?q;
do //對分數進行初始化,分子分母分別賦值
{
cout<<“請分別輸入分子和分母(分母不能是零!):“< cin>>q.fz>>q.fm;
}while(q.fm==0); //等于零則報錯并進行重新輸入
return?q;
}
/*整數初始化*/
Q?zheng_init()
{
Q?q;
q.fm=1; //講分子直接賦值為1
cout<<“請輸入一整數,然后回車:“< cin>>q.fz;
return?q;
}
/*兩數加法*/
Q?plus(Q?q1Q?q2)
{
Q?q;
int?x_min=min_max(q1.fmq2.fm1); //求出兩個有理數的分母的最小公倍數
int?fz=(x_min/q1.fm)*q1.fz+(x_min/q2.fm)*q2.fz; //將兩個數通分并實現分子相加
int?fm=x_min;
q.fz=fz;
q.fm=fm;
return?q;
}
/*兩數減法*/
Q?reduse(Q?q1Q?q2)
{
Q?q;
int?x_min=min_max(q1.fmq2.fm1);
int?fz=(x_min/q1.fm)*q1.fz-(x_min/q2.fm)*q2.fz;
int?fm=x_min;
q.fz=fz;
q.fm=fm;
return?q;
}
/*兩數乘法*/
Q?multiply(Q?q1Q?q2)
{
Q?q;
int?fz=q1.fz*q2.fz; //分子直接相乘
int?fm=q1.fm*q2.fm; //分母直接相乘
q.fz=fz;
q.fm=fm;
return?q;
}
/*兩數除法*/
Q?divide(Q?q1Q?q2)
{
Q?q;
if(q2.fz==0) //判斷除數是否為零
{cout<<“輸入有誤!?除數不能是零“< exit(0);}
else
{
int?fz=q1.fz*q2.fm; //實現分子分母交叉相乘
int?fm=q1.fm*q2.fz;
q.fz=fz;
q.fm=fm;
return?q;
}
}
/*約分并輸出*/
/*此方法的功能是將分數最簡化,
??實現約分并將最簡化的有理數打
??印出來實現規格化輸出*/
void?display(Q?q)
{
if(q.fz!=0) //判斷分子是否為零,如果為零則結果直接輸出零即可。
{
if(q.fz==q.fm) //判斷分子分母是否相等,相等則直接輸出1即可。
cout<<“結果是:“<<1< else
{
int?y_max=min_max(q.fzq.fm2); //求出分子分母的最大公約數
int?fz=q.fz/y_max; //分子和分母分別除以最大公約數
int?fm=q.fm/y_max;
if(fm==1)
cout<<“結果是:“< else?if(fm==-1)
cout<<“結果是:-“< else?if(fz>0&&fm<0)
cout<<“結果是:-“< else
cout<<“結果是:“< }
}
else
cout<<“結果是:“<<0< }
/*此方法實現多個數的加減乘除運算
??參加運算的有理數的個數有外界輸入
??*/
Q?calculate(char?select1char?select2)
{
Q?qqq[100];
int?n;
cout<<“請輸入參加運算的個數(至少為2):“;
cin>>n;
while(n<2||n>100)
{
cout<<“輸入個數的值錯誤!請重新輸入:“;
cin>>n;
}
for(int?i=0;i {
if(select1==‘z‘)
q[i]=zheng_init();
else
q[i]=fen_init();
}
switch(select2)
{
case?‘+‘:?qq=plus(q[0]q[1]);
??for(i=2;i qq=plus(qqq[i]);
??break;
case?‘-‘:?qq=reduse(q[0]q[1]);
??for(i=2;i qq=reduse(qqq[i]);
??break;
case?‘*‘:?qq=multiply(q[0]q[1]);
??for(i=2;i qq=multiply(qqq[i]);
??break;
case?‘/‘:?qq=divide(q[0]q[1]);
??for(i=2;i qq=divide(qqq[i]);
??break;
}
return?qq;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????110592??2008-09-28?10:49??有理數(數據結構)\Debug\vc60.pdb
?????文件?????548923??2008-09-28?10:49??有理數(數據結構)\Debug\有理數.exe
?????文件?????259037??2008-09-28?10:49??有理數(數據結構)\Debug\有理數.obj
?????文件????1098752??2008-09-28?10:49??有理數(數據結構)\Debug\有理數.pdb
?????文件???????5045??2008-09-11?20:59??有理數(數據結構)\有理數?(2).txt
?????文件???????4361??2008-09-15?21:36??有理數(數據結構)\有理數?(3).txt
?????文件???????3508??2008-09-10?21:27??有理數(數據結構)\有理數(1).txt
?????文件???????4245??2008-09-15?21:56??有理數(數據結構)\有理數(4).txt
?????文件???????3955??2008-09-17?12:34??有理數(數據結構)\有理數(5).txt
?????文件???????3403??2008-09-28?10:08??有理數(數據結構)\有理數.dsp
?????文件????????520??2008-09-28?10:52??有理數(數據結構)\有理數.dsw
?????文件??????50176??2008-09-28?10:52??有理數(數據結構)\有理數.ncb
?????文件??????48640??2008-09-28?10:52??有理數(數據結構)\有理數.opt
?????文件????????740??2008-09-28?10:49??有理數(數據結構)\有理數.plg
?????文件???????5125??2008-09-11?20:51??有理數(數據結構)\有理數.txt
?????文件???????4812??2008-09-28?10:49??有理數(數據結構)\有理數bb.cpp
?????目錄??????????0??2008-11-20?18:27??有理數(數據結構)\Debug
?????目錄??????????0??2008-11-20?18:27??有理數(數據結構)
-----------?---------??----------?-----??----
??????????????2151834????????????????????18
評論
共有 條評論