要求:
输入1 2 + 1 3代表 1/2 + 1/3,运算结果以分数显示
思路:
1.自定义函数,求两个数的最大公约数
int gys (int x,int y)
{
return y?gys(y,x%y):x; //如果y为非0,再次执行,否则返回x
}
2.自定义函数,求两个数的最小公倍数
int gbs(int x,int y)
{
return x*y/gys(x,y);
}
3.自定义函数,实现两个数约分
void yuefen(int fz,int fm)
{
int s = gys(fz,fm);
fz /= s;
fm /= s;
printf ("结果是 %d/%d\n",fz,fm);
}
4.自定义加减乘除的函数,以便实现函数调用
void add(int a,int b,int c,int d)
{
int u1,u2,v = gbs(b,d),fz1,fm1;
u1=v/b*a;
u2=v/d*c;
fz1=u1+u2;
fm1=v;
yuefen(fz1,fm1);
}
void mul(int a,int b,int c,int d)
{
int u1,u2;
u1=a*c;
u2=b*d;
yuefen(u1,u2);
}
void sub(int a,int b,int c,int d)
{
int u1,u2,v=gbs(b,d),fz1,fm1;
u1=v/b*a;
u2=v/d*c;
fz1=u1-u2;
fm1=v;
yuefen(fz1,fm1);
}
void div(int a,int b,int c,int d)
{
int u1,u2;
u1=a*d;
u2=b*c;
yuefen(u1,u2);
}
运行结果如下
完整代码如下
#include <stdio.h>
int gys (int x,int y)
{
return y?gys(y,x%y):x; //如果y为非0,再次执行,否则返回x
}
int gbs(int x,int y)
{
return x/gys(x,y)*y;
}
void yuefen(int fz,int fm)
{
int s = gys(fz,fm);
fz /= s;
fm /= s;
printf ("结果是 %d/%d\n",fz,fm);
}
void add(int a,int b,int c,int d)
{
int u1,u2,v = gbs(b,d),fz1,fm1;
u1=v/b*a;
u2=v/d*c;
fz1=u1+u2;
fm1=v;
yuefen(fz1,fm1);
}
void mul(int a,int b,int c,int d)
{
int u1,u2;
u1=a*c;
u2=b*d;
yuefen(u1,u2);
}
void sub(int a,int b,int c,int d)
{
int u1,u2,v=gbs(b,d),fz1,fm1;
u1=v/b*a;
u2=v/d*c;
fz1=u1-u2;
fm1=v;
yuefen(fz1,fm1);
}
void div(int a,int b,int c,int d)
{
int u1,u2;
u1=a*d;
u2=b*c;
yuefen(u1,u2);
}
int main()
{
char op;
int a,b,c,d;
scanf("%d %d %c %d %d",&a,&b,&op,&c,&d);
switch(op)
{
case '+':
add(a,b,c,d);
break;
case '*':
mul(a,b,c,d);
break;
case '-':
sub(a,b,c,d);
break;
case '/':
div(a,b,c,d);
break;
}
return 0;
}