有理数的四则运算(C语言) 急用!!!

[问题描述]
设计一个可进行有理数运算的演示程序。
[基本要求]
实现两个有理数相加、相减、相乘、相除的运算。

您真的急用哦。要不要我给你啊。我刚刚写完的啊。呵呵 还有抽象类型的题目呢
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int GONGYUESHU(int m,int n)//*求最大公约数*//
{
int x,y,z;
if(m<n)
{z=m;m=n;n=z;}
x=m;y=n;
while(y!=0)
{
z=x%y;
x=y;
y=z;
}
return(x);
}

Exit()//*退出*//
{
getchar();
getchar();
}

int fen_Add(int q,int w,int v,int h)//*分数加法*//
{
int o,i,l,k,j;
o=w*h;
i=q*h+w*v;
l=GONGYUESHU(o,i);
k=o/l;
j=i/l;
printf("分数之和为%d/%d\n",j,k);
}

float Add(float a,float b)///*有理数加法*/
{
float sum;
int q,w,v,h,j,x;
char m;
loop1:printf("******************************* 加 法 运 算 ************************************\n");
printf(" 1、整数、小数加法 2、分数加法 3、退出 \n");
printf("请选择1、2或3:");
scanf("%d",&x);
if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");
switch(x)
{
case 1:
{
printf("请输入第一个数据:");
scanf("%f",&a);
printf("请输入第二个数据:");
scanf("%f",&b);
sum=a+b;
printf("a+b=%f",sum);
getchar();
getchar();
break;
}
case 2:
{
printf("输入第一个数的分子: ");
scanf("%d",&q);
printf("输入第一个数的分母: ");
scanf("%d",&w);
printf("输入第二个数的分子: ");
scanf("%d",&v);
printf("输入第二个数的分母: ");
scanf("%d",&h);
fen_Add(q,w,v,h);
break;
}
case 3:
{
Exit();
break;
}
default :
{
printf("输入有误!\n");
goto loop1;
break;
}
}
if(x!=3)goto loop1;
}

int fen_Sub(int q,int w,int v,int h)///*分数减法*/
{
int o,i,l,k,j;
o=w*h;
i=q*h-w*v;
l=GONGYUESHU(o,i);
k=o/l;
j=i/l;
printf("分数之差为%d/%d\n",j,k);
}

float Sub(float a,float b)//*有理数减法*//
{
float result;
int q,w,v,h,j,x;
char m;
loop1:printf("******************************* 减 法 运 算 ************************************\n");
printf(" 1、整数、小数减法 2、分数减法 3、退出 \n");
printf("请选择1、2或3:");
scanf("%d",&x);
if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");
switch(x)
{
case 1:
{
printf("请输入第一个数据:");
scanf("%f",&a);
printf("请输入第二个数据:");
scanf("%f",&b);
result=a-b;
printf("a-b=%f",result);
getchar();
getchar();
break;
}
case 2:
{
printf("输入第一个数的分子: ");
scanf("%d",&q);
printf("输入第一个数的分母: ");
scanf("%d",&w);
printf("输入第二个数的分子: ");
scanf("%d",&v);
printf("输入第二个数的分母: ");
scanf("%d",&h);
fen_Sub(q,w,v,h);
break;
}
case 3:
{
Exit();
break;
}
default :
{
printf("输入有误!\n");
goto loop1;
break;
}
}
if(x!=3)goto loop1;
}

int fen_Mul(int q,int w,int v,int h)//*分数乘法*//
{
int o,i,l,k,j;
o=w*h;
i=q*v;
l=GONGYUESHU(o,i);
k=o/l;
j=i/l;
printf("分数之积为%d/%d\n",j,k);
}

float Mul(float a,float b)//*有理数乘法*//
{
float result;
int q,w,v,h,j,x;
char m;
loop1:printf("******************************* 乘 法 运 算 ************************************\n");
printf(" 1、整数/小数乘法 2、分数乘法 3、退出 \n");
printf("请选择1、2或3:");
scanf("%d",&x);
if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");
switch(x)
{
case 1:
{
printf("请输入第一个数据:");
scanf("%f",&a);
printf("请输入第二个数据:");
scanf("%f",&b);
result=a*b;
printf("a*b=%f",result);
getchar();
getchar();
break;
}
case 2:
{
printf("输入第一个数的分子: ");
scanf("%d",&q);
printf("输入第一个数的分母: ");
scanf("%d",&w);
printf("输入第二个数的分子: ");
scanf("%d",&v);
printf("输入第二个数的分母: ");
scanf("%d",&h);
fen_Mul(q,w,v,h);
break;
}
case 3:
{
Exit();
break;
}
default :
{
printf("输入有误!\n");
goto loop1;
break;
}
}
if(x!=3)goto loop1;
}

int fen_Div(int q,int w,int v,int h)//*分数除法*//
{
int o,i,l,k,j;
o=w*v;
i=q*h;
l=GONGYUESHU(o,i);
k=o/l;
j=i/l;
printf("分数之积为%d/%d\n",j,k);
}

float Div(float a,float b)///*有理数除法*/
{
float result;
int q,w,v,h,j,x;
char m;
loop1:printf("******************************* 除 法 运 算 ************************************\n");
printf(" 1、整数/小数除法 2、分数除法 3、退出 \n");
printf("请选择1、2或3:");
scanf("%d",&x);
if(x!=1&&x!=2&&x!=3)printf("非法输入,请重新输入!");
switch(x)
{
case 1:
{
printf("请输入第一个数据:");
scanf("%f",&a);
printf("请输入第二个数据:");
scanf("%f",&b);
result=a/b;
printf("a/b=%f",result);
getchar();
getchar();
break;
}
case 2:
{
printf("输入第一个数的分子: ");
scanf("%d",&q);
printf("输入第一个数的分母: ");
scanf("%d",&w);
printf("输入第二个数的分子: ");
scanf("%d",&v);
printf("输入第二个数的分母: ");
scanf("%d",&h);
fen_Div(q,w,v,h);
break;
}
case 3:
{
Exit();
break;
}
default :
{
printf("输入有误!\n");
goto loop1;
break;
}
}
if(x!=3)goto loop1;
}

float feng(float z)//*求分子分母运算*//
{
int f,k,j,x;
float elem=1000000;
loop1:printf("***************************** 求 分 子 分 母 运 算 *****************************\n");
printf(" 1、输入数据 2、退出 \n");
printf("请选择1或2:");
scanf("%d",&x);
if(x!=1&&x!=2)printf("非法输入,请重新输入!");
if(x==1)
{
printf("请输入一个有理数:");
scanf("%f",&z);
z=z*elem;
f=GONGYUESHU(z,elem);
j=elem/f;
k=(int)z/f;
printf("分子是%d,分母是%d\n",k,j);
goto loop1;
}
if(x==2)Exit();
}

main()//*主程序*//
{
int x;
float a,b,z;
printf("\n**************************** 有 理 数 四 则 运 算 ******************************\n");
printf(" 1、加法运算 2、减法运算 \n");
printf(" 3、乘法运算 4、除法运算 \n");
printf(" 5、求分子分母运算 6、退出 \n");
loop3:printf("请选择运算类型:");
scanf("%d",&x);
printf("\n");
switch(x)
{
case 1:
{
Add(a,b);
break;
}
case 2:
{
Sub(a,b);
break;
}
case 3:
{
Mul(a,b);
break;
}
case 4:
{
Div(a,b);
break;
}
case 5:
{
feng(z);
break;
}
case 6:
{
Exit();
break;
}
default :
{
printf("输入有误!请重新选择:\n");
goto loop3;
break;
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-26
/*
如输入: math f=x+(- * /) y

input a express(for example 5+(- * /)6):
6+9
结果
6.00 + 9.00 = 15.00

continue enter 1; break,enter 0

*/
#include <stdio.h>
#include <stdlib.h>
void main(){
double x,y,f=0;
char c;
int p=1;
while(p){
printf("\t\t\tmath f=x+(- * /) y\n");
printf("\n\t\tinput a express(for example 5+(- * /)6):\n\t\t");
scanf("%lf%c%lf",&x,&c,&y);
switch(c){
case '+':f=x+y;break;
case '-':f=x-y;break;
case '*':f=x*y;break;
case '/':f=x/y;break;
default:break;
}
printf("\n\t\t%4.2lf %c %4.2lf = %4.2lf\n",x,c,y,f);
printf("\n\t\tcontinue enter 1; break,enter 0\n\t\t");
scanf("%d",&p);
system("cls");
}
}本回答被提问者采纳