资源简介
关于抽象数据类型--有理数,实现有理数的加减乘除运算
代码片段和文件信息
#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
相关资源
- 实验七 多类型数据的存储与应用
- 迷宫的数据结构课程设计报告
- 东北大学数据结构实验及代码
- 西北工业大学数据结构及实验答案.
- 最小生成树实习报告.doc
- 数据结构课程设计停车场管理实验报
- 数据结构综合课设关键路径问题.doc
- 数据结构综合课设二叉树的建立与遍
- 数据结构--稀疏矩阵课程设计.doc
- 数据结构课程设计——收藏夹和购物
- 数据结构实验报告11-内部排序-三种平
- 数据结构实验报告8-树-求二叉树先序
- 广工数据结构银行业务模拟课设
- 蓝桥杯《数据结构不难》、《计蒜客
- 数据结构课程设计-城市链表
- 数据结构线性表实验报告
- 数据结构实验报告-查找-B-树基本操作
- 数据结构_图的拓扑排序
- 北京科技大学数据结构实验
- 数据结构试验4-图实验报告及源码
- 数据结构与算法基础知识点
- 模拟停车场管理系统
- 数据结构习题集及答案
- 数据结构课程设计—利用栈求表达式
- 数据结构设计之医务室模拟
- 停车场管理实验报告--数据结构
- 数据结构约瑟夫问题实验报告
- 理发馆排队问题系统仿真
- 数据结构课程设计模板
- 数据结构银行业务模拟
评论
共有 条评论