#include<iostream>
using namespace std;
struct Q
{
int fz,fm;
};
/*球最小公倍数*/
int f_min(int a,int b)
{
int aa,bb,c,t;
aa=a;
bb=b;
if(a<b)
{
t=a;
a=b;
b=t;
}
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
return aa*bb/b;
}
/*求最大公约数*/
int f_max(int a,int b)
{
int aa,bb,c,t;
aa=a;
bb=b;
if(a<b)
{
t=a;
a=b;
b=t;
}
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
return b;
}
/*分数初始化*/
Q fen_init()
{
Q q;
do
{
cout<<"请分别输入分子和分母(分母不能是零!):"<<endl;
cin>>q.fz>>q.fm;
}while(q.fm==0);
return q;
}
/*整数初始化*/
Q zheng_init()
{
Q q;
q.fm=1;
cout<<"请输入一整数:"<<endl;
cin>>q.fz;
return q;
}
/*加法*/
void plus(Q q1,Q q2)
{
int x_min=f_min(q1.fm,q2.fm);
int fz1=(x_min/q1.fm)*q1.fz+(x_min/q2.fm)*q2.fz;
int fm1=x_min;
if(fz1!=0)
{
if(fz1==fm1)
cout<<"求和的结果是:"<<1<<endl;
else
{
int y_max=f_max(fz1,fm1);
int fz2=fz1/y_max;
int fm2=fm1/y_max;
if(fm2==1)
cout<<"求和的结果是:"<<fz2<<endl;
else
cout<<"求和的结果是:"<<fz2<<"/"<<fm2<<endl;
}
}
else
cout<<"求和的结果是:"<<0<<endl;
}
/*减法*/
void reduse(Q q1,Q q2)
{
int x_min=f_min(q1.fm,q2.fm);
int fz1=(x_min/q1.fm)*q1.fz-(x_min/q2.fm)*q2.fz;
int fm1=x_min;
if(fz1!=0)
{
if(fz1==fm1)
cout<<"求差的结果是:"<<1<<endl;
else
{
int y_max=f_max(fz1,fm1);
int fz2=fz1/y_max;
int fm2=fm1/y_max;
if(fm2==1)
cout<<"求差的结果是:"<<fz2<<endl;
else
cout<<"求差的结果是:"<<fz2<<"/"<<fm2<<endl;
}
}
else
cout<<"求差的结果是:"<<0<<endl;
}
/*乘法*/
void multiply(Q q1,Q q2)
{
int fz1=q1.fz*q2.fz;
int fm1=q1.fm*q2.fm;
if(fz1!=0)
{
if(fz1==fm1)
cout<<"求积的结果是:"<<1<<endl;
else
{
int y_max=f_max(fz1,fm1);
int fz2=fz1/y_max;
int fm2=fm1/y_max;
if(fm2==1)
cout<<"求积的结果是:"<<fz2<<endl;
else
cout<<"求积的结果是:"<<fz2<<"/"<<fm2<<endl;
}
}
else
cout<<"求积的结果是:"<<0<<endl;
}
/*除法*/
void divide(Q q1,Q q2)
{
if(q2.fz==0)
cout<<"输入有误! 除数不能是零"<<endl;
else
{
int fz1=q1.fz*q2.fm;
int fm1=q1.fm*q2.fz;
if(fz1!=0)
{
if(fz1==fm1)
cout<<"求商的结果是:"<<1<<endl;
else
{
int y_max=f_max(fz1,fm1);
int fz2=fz1/y_max;
int fm2=fm1/y_max;
if(fm2==1)
cout<<"求商的结果是:"<<fz2<<endl;
else
cout<<"求商的结果是:"<<fz2<<"/"<<fm2<<endl;
}
}
else
cout<<"求商的结果是:"<<0<<endl;
}
}
int main()
{
Q q1,q2;
bool exist=true;
int select,select2;
while(exist)
{
cout<<"请选择所要进行的操作"<<endl;
cout<<"1.加法"<<endl<<"2.减法"<<endl<<"3.乘法"<<endl<<"4.除法"<<endl<<"其他数字键退出......"<<endl<<endl;
cin>>select;
switch(select)
{
case 1: cout<<"请选择所要进行的操作"<<endl;
cout<<"1.整数加法"<<endl<<"2.分数加法"<<endl<<endl<<endl;
cin>>select2;
switch(select2)
{
case 1: cout<<"请输入被加数"<<endl;
q1=zheng_init();
cout<<"请输入加数"<<endl;
q2=zheng_init();
plus(q1,q2);
continue;
case 2: cout<<"请输入被加数"<<endl;
q1=fen_init();
cout<<"请输入加数"<<endl;
q2=fen_init();
plus(q1,q2);
continue;
default: continue;
}
case 2: cout<<"请选择所要进行的操作"<<endl;
cout<<"1.整数减法"<<endl<<"2.分数减法"<<endl<<endl<<endl;
cin>>select2;
switch(select2)
{
case 1: cout<<"请输入被减数"<<endl;
q1=zheng_init();
cout<<"请输入减数"<<endl;
q2=zheng_init();
reduse(q1,q2);
continue;
case 2: cout<<"请输入被减数"<<endl;
q1=fen_init();
cout<<"请输入减数"<<endl;
q2=fen_init();
reduse(q1,q2);
continue;
default: continue;
}
case 3: cout<<"请选择所要进行的操作"<<endl;
cout<<"1.整数乘法"<<endl<<"2.分数乘法"<<endl<<endl<<endl;
cin>>select2;
switch(select2)
{
case 1: cout<<"请输入被乘数"<<endl;
q1=zheng_init();
cout<<"请输入乘数"<<endl;
q2=zheng_init();
multiply(q1,q2);
continue;
case 2: cout<<"请输入被乘数"<<endl;
q1=fen_init();
cout<<"请输入乘数"<<endl;
q2=fen_init();
multiply(q1,q2);
continue;
default: continue;
}
case 4: cout<<"请选择所要进行的操作"<<endl;
cout<<"1.整数除法"<<endl<<"2.分数除法"<<endl<<endl<<endl;
cin>>select2;
switch(select2)
{
case 1: cout<<"请输入被除数"<<endl;
q1=zheng_init();
cout<<"请输入除数"<<endl;
q2=zheng_init();
divide(q1,q2);
continue;
case 2: cout<<"请输入被除数"<<endl;
q1=fen_init();
cout<<"请输入除数"<<endl;
q2=fen_init();
divide(q1,q2);
continue;
default: continue;
}
default: exist=false;
}
}
return 0;
}
关于抽象数据类型--有理数(数据结构)
4星 · 超过85%的资源 需积分: 24 163 浏览量
2008-11-25
12:15:30
上传
评论 4
收藏 369KB RAR 举报
biaosonya
- 粉丝: 2
- 资源: 8
最新资源
- AIS2024 valid
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈