#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define TURE 1
#define FLASE 0
typedef int Status;
typedef int ElemType;
typedef ElemType *Rational;
Status InitRational(Rational &Q,ElemType v1, ElemType v2) {
Q=(ElemType*)malloc(2*sizeof(ElemType));
if(!Q || v2==0)
return ERROR;
else
Q[0]=v1;
Q[1]=v2;
if(Q==NULL)
exit(OVERFLOW);
else
return OK;
}
Status Rationaladd(Rational &Q,Rational Q1,Rational Q2)
{
if(Q1==NULL || Q2==NULL)
exit(OVERFLOW);
else
Q=(ElemType*)malloc(2*sizeof(ElemType));
Q[0]=(Q1[0]*Q2[1]+Q1[1]*Q2[0]);
Q[1]=Q1[1]*Q2[1];
return OK;
}
Status Rationalsubtraction(Rational &Q,Rational Q1,Rational Q2) {
if(Q1==NULL || Q2==NULL)
exit(OVERFLOW);
else
Q=(ElemType*)malloc(2*sizeof(ElemType));
Q[0]=(Q1[0]*Q2[1]-Q1[1]*Q2[0]);
Q[1]=Q1[1]*Q2[1];
return OK;
}
Status Rationalmul(Rational &Q,Rational Q1,Rational Q2) {
if(Q1==NULL || Q2==NULL)
exit(OVERFLOW);
else
Q=(ElemType*)malloc(2*sizeof(ElemType));
Q[0]=(Q1[0]*Q2[1])*(Q1[1]*Q2[0]);
Q[1]=Q1[1]*Q2[1];
return OK;
}
Status Rationaldiv(Rational &Q,Rational Q1,Rational Q2) {
if(Q1==NULL || Q2==NULL)
exit(OVERFLOW);
else
Q=(ElemType*)malloc(2*sizeof(ElemType));
Q[0]=Q1[0]*Q2[1];
Q[1]=Q1[1]*Q2[0];
return OK;
}
Status Rationalprint(Rational &Q)
{
if(Q==NULL)
exit(OVERFLOW);
else
printf("%d/%d",Q[0],Q[1]);
return TURE;
}
int main()
{
Rational Q,curR1,curR2;
ElemType v1,v2;
int i;
printf("请分别输入有理数的分母和分子:\n");
scanf("%d%d",&v1,&v2);
InitRational(curR1,v1,v2);
printf("请再分别输入有理数的分母和分子:\n");
scanf("%d%d",&v1,&v2);
InitRational(curR2,v1,v2);
printf("请输入你的选择:\n");
for(;;)
{
printf("1.加法\n2.减法\n3.乘法\n4.除法\n");
scanf("%d",&i);
switch(i)
{
case 1:
printf("进行有理数的加法:\n");
Rationaladd(Q,curR1,curR2);
printf("所得的结果是:\n");
Rationalprint(Q);
printf("\n");
break;
case 2:printf("进行有理数的减法:\n");
Rationalsubtraction(Q,curR1,curR2);
printf("所得的结果是:\n");
Rationalprint(Q);
printf("\n");
break;
case 3:printf("进行有理数的乘法:\n");
Rationalmul(Q,curR1,curR2);
printf("所得的结果是:\n");
Rationalprint(Q);
printf("\n");
break;
case 4:printf("进行有理数的除法:\n");
Rationaldiv(Q,curR1,curR2);
printf("所得的结果是:\n");
Rationalprint(Q);
printf("\n");
break;
}
printf("是否继续??是,输入1,否,输入0\n");
scanf("%d",&i);
if(i)
{
system("cls");
continue;
}
else
break;
}
return 0;
}。