1.题目
在实际应用中,有很多时候我们希望计算机给出的结果是分数而不是小数,本实例在这个前提下产生,具体要求如下:如果用户输入形式是1 2 + 1 3则代表1/2+1/3,要求运算结果以分数形式体现。
2.代码
#include<stdio.h>
int gys(int x, int y) //定义求最大公约数函数
{
return y ? gys(y, x % y) : 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 jia(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 cheng(int a, int b, int c, int d) //定义乘法函数
{
int u1, u2;
u1 = a * c;
u2 = b * d;
yuefen(u1, u2);
}
void jian(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 chu(int a, int b, int c, int d) //定义除法函数
{
int u1, u2;
u1 = a * d;
u2 = b * c;
yuefen(u1, u2);
}
int main(void)
{
char op;
int a, b, c, d;
scanf("%d %d %c %d %d", &a, &b, &op, &c, &d);
switch (op)
{
case '+':
jia(a, b, c, d);
break;
case '*':
cheng(a, b, c, d);
break;
case '-':
jian(a, b, c, d);
break;
case '/':
chu(a, b, c, d);
break;
}
return 0;
}
3.输出结果截图