【有理数】的定义和实现

来源:互联网 发布:淘宝店铺的风格 编辑:程序博客网 时间:2024/05/01 13:55

/*
ADT Rational_Num{
    数据对象:D={e1,e2|e1,e2∈Z}
    数据关系:R={<e1,e2>|e1为分子,e2为分母}
    基本操作:
      InitRational_Num(&T,e1,e2)
        操作结果: 构造一个有理数
      DestroyRational_Num(&T)
        初始条件: 有理数T已经存在
        操作结果: 销毁有理数T
      PrintRational_Num(T)
        初始条件: 有理数T已经存在
        操作结果: 打印T中的数据
      GetRational_Num(T,i,&e)
        初始条件: 有理数T已经存在,i∈{1,2}
        操作结果: 用e返回有理数T的分子或分母,i=1返回分子
      PutRational_Num(&T,i,e)
        初始条件: 有理数T已经存在,i∈{1,2}
        操作结果: 用e修改有理数T的分子或分母,i=1修改分子
      AddRational_Num(&T,T1,T2)
        初始条件: 有理数T,T1,T2存在
        操作结果: 有理数T1,T2相加,结果存入T3中
      SubRational_Num(&T,T1,T2)
        初始条件: 有理数T,T1,T2存在
        操作结果: 有理数T1,T2相减,结果存入T3中
      MulRational_Num(&T,T1,T2)
        初始条件: 有理数T,T1,T2存在
        操作结果: 有理数T1,T2相乘,结果存入T3中
      DivRational_Num(&T,T1,T2)
        初始条件: 有理数T,T1,T2存在
        操作结果: 有理数T1,T2相除,结果存入T3中
}ADT Rational_Num
*/

#include "stdio.h"
#include "conio.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int ElemType;

typedef struct {
   ElemType e1;
   ElemType e2;
}Rational;

void InitRational_Num(Rational *T,ElemType e1,ElemType e2)
{
   if(e2==0)
       exit(0);
   T->e1=e1;
   T->e2=e2;
}

void DestroyRational_Num(Rational *T)
{
   free(T);
}

void PrintRational_Num(Rational T)
{
   printf("E1:%d E2:%d/nE1/E2:%f/n",T.e1,T.e2,(float)(T.e1/T.e2));
}

void GetRational_Num(Rational T,int i,ElemType *e)
{
   if(i<1||i>2)
      exit(0);
   *e=(i==1)?(T.e1):(T.e2);
}

void PutRational_Num(Rational *T,int i,ElemType e)
{
   if(i<1||i>2)
      exit(0);
   if(i==1)
      T->e1=e;
   else T->e2=e;
}

void AddRational_Num(Rational *T,Rational T1,Rational T2)
{
   T->e1=T1.e1*T2.e2+T2.e1*T1.e2;
   T->e2=T1.e2*T2.e2;
}

void SubRational_Num(Rational *T,Rational T1,Rational T2)
{
   T->e1=T1.e1*T2.e2-T2.e1*T1.e2;
   T->e2=T1.e2*T2.e2;
}

void MulRational_Num(Rational *T,Rational T1,Rational T2)
{
   T->e1=T1.e1*T2.e1;
   T->e2=T1.e2*T2.e2;
}

void DivRational_Num(Rational *T,Rational T1,Rational T2)
{
   if(T2.e1==0)
      exit (0);
   T->e1=T1.e1*T2.e2;
   T->e2=T1.e2*T2.e1;
}

原创粉丝点击