参考上机样例“复数ADT的实现”,上机有理数ADT进行实现,程序的框架如下所示,主要实现各有理数的操作函数: /* 有理数:整数,小数(包括有限小数,有限循环小数和无限循环小数)有理数均可表示为两整数的分数形式 无理数:无法表示为两整数的分数形式 */ /*包含头文件*/ #include
#include
/*定义常量*/ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define MAXSIZE 100 /*定义ElemType类型和使用到的物理数据类型*/ typedef int ElemType; typedef struct{ //有理数结构体 ElemType num;//分子 ElemType den;//分母 }Rational; /*声明物理数据类型的操作(函数)和使用到的其他功能函数*/ void InitRational(Rational *a); //有理数初始化 void RSum(Rational a,Rational b,Rational *c); //有理数加法 void RSub(Rational a,Rational b,Rational *c); //有理数减法 void RMul(Rational a,Rational b,Rational *c); //有理数乘法 int RDiv(Rational a,Rational b,Rational *c); //有理数除法,函数返回值表示是否完成除法,注意被0除 void RND(Rational a,ElemType *b,ElemType *c); //求有理数分子分母 void RPrint(Rational a); //有理数打印 void RNorm(Rational *a); //分子分母约分 /*定义物理数据类型的操作(函数)和使用到的其他功能函数*/ void RNorm(Rational *a){ } void InitRational(Rational *a){ } void RSum(Rational a,Rational b,Rational *c){ } void RSub(Rational a,Rational b,Rational *c){ } void RMul(Rational a,Rational b,Rational *c){ } int RDiv(Rational a,Rational b,Rational *c){ } void RND(Rational a,ElemType *b,ElemType *c){ } void RPrint(Rational a){ } /*定义主函数,通过主函数调用各物理数据类型的操作和功能函数*/ void main(){ Rational m,n,s; InitRational(&m); RPrint(m); InitRational(&n); RPrint(n); RSum(m,n,&s); /* RSub(m,n,&s); RMul(m,n,&s); if(!RDiv(m,n,&s)){ puts("Error!"); return 1; } */ RPrint(s); }