资源简介
关于抽象数据类型--有理数,实现有理数的加减乘除运算
![](http://www.nz998.com/pic/31280.jpg)
代码片段和文件信息
#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
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- Fundamentals of Data Structure in C
- 北京邮电大学数据结构历年考研真题
评论
共有 条评论