• 大小: 369KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-22
  • 语言: 其他
  • 标签: 数据结构  

资源简介

关于抽象数据类型--有理数,实现有理数的加减乘除运算

资源截图

代码片段和文件信息

#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


评论

共有 条评论