【C语言每日一练】【第1天】C程序实现分数计算器

一、实现目标

输入两个分数,中间是四则运算符(+,-,*,/),程序输出分数形式的运算结果。
样例输入:1,2,+,1,3
样例输出:5/6 (1/2+1/3)

二、实现步骤

1、求最大公约数
定义一个函数,求两个输入参数的最大公约数。函数如下:

int gys(int x, int y)
{
    return y ? gys (y, x % y) : x;  # 递归,y不为0则计算gys(y, x%y)
}

在主函数中调用并测试这个函数:
求32和128的最大公约数:

printf("%d", gys(32, 128));

输出:
在这里插入图片描述

2、求最小公倍数
定义一个函数,求两个输入参数的最小公倍数。函数如下:

int gbs(int x, int y)
{
    return x * y / gys(x, y);  # 使用定理:两数的乘积等于它们的最小公倍数乘以最大公约数
}

在主函数中调用并测试这个函数:
求32和128的最小公倍数:

printf("%d", gbs(32, 128));

输出:
在这里插入图片描述

3、两数约分
定义一个函数,将两个输入参数进行约分。函数如下:

void yuefen(int fz, int fm)
{
	int s = gys(fz, fm);
	fz /= s;
	fm /= s;
	printf("the result is %d/%d\n", fz, fm);
}

在主函数中调用并测试这个函数:
将32/128进行约分:

yuefen(32, 128);

输出:
在这里插入图片描述

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);
}

在主函数中调用并测试加法函数:

add(1, 3, 2, 4);  // 计算1/3 + 2/4的值

输出:
在这里插入图片描述

减法运算实现:

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);
}

在主函数中调用并测试减法函数:

sub(1, 2, 1, 6);  // 计算1/2 - 1/6的值

输出:
在这里插入图片描述
乘法运算实现:

void mul(int a, int b, int c, int d)
{
	int u1, u2;
	u1 = a * c;
	u2 = b * d;
	yuefen(u1, u2);
}

在主函数中调用并测试乘法函数:

mul(5, 6, 2, 3);  // 计算5/6 * 2/3的值

输出:
在这里插入图片描述

除法运算实现:(原理和乘法相同)

void div(int a, int b, int c, int d)
{
	int u1, u2;
	u1 = a * d;
	u2 = b * c;
	yuefen(u1, u2);
}

在主函数中调用并测试除法函数:

div(5, 6, 2, 3);  // 计算5/6 ÷ 2/3的值

输出:
在这里插入图片描述
5、主函数
按照要求的格式输入,使用switch-case语句判断运算类型:

int main()
{
    // printf("%d", gys(32, 128));
    // printf("%d", gbs(32, 128));
    // add(1, 3, 2, 4);
    // sub(1, 2, 1, 6);
    // mul(5, 6, 2, 3);
    // div(5, 6, 2, 3);
    char op;
    int a, b, c, d;
    scanf("%ld,%ld,%c,%ld,%ld", &a, &b, &op, &c, &d);
    switch(op)
    {
    	case '+': add(a, b, c, d);
    	case '-': sub(a, b, c, d);
    	case '*': mul(a, b, c, d);
    	case '/': div(a, b, c, d);
	}
    return 0;
}

三、程序测试

加法测试:
在这里插入图片描述

减法测试:
在这里插入图片描述
乘法测试:
在这里插入图片描述

除法测试:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值