实例二十五:结构体的应用(*)

结构体的应用

问题描述:
实现两个分数的加法和减法运算,负分数的分子为负数。

#include<stdio.h>
#include<math.h>
struct fenshu
{
	int fm;
	int fz;
};
int gcd(int m,int n)										//求两个数的最大公约数
{
	int t,r;
	if(n>m)
	{
		t=n;n=m;m=t;
	}
	while((r=m%n)!=0)
	{
		m=n;n=r;
	}
	return n;
}
fenshu add(struct fenshu1,struct fenshu2)						//计算两个分数的和
{
		struct fenshu f;
		int x,y;
		x=f1.fm*f2.fm;											//求和的分母
		y=f1.fz*f2.fm+f2.fz*f1.fm;								//就和的分子
		f.fm=x/gcd(x,abs(y));									//通分
		f.fz=y/gcd(x,abs(y));
		return f;
}
struct mus(struct fenshu f1,struct fenshu f2)					//计算两个分数的差
{
	struct fenshu f;
	int x,y;
	x=f1.fm*f2.fm;
	y=f1.fz*f2.fm-f2.fz*f1.fm;
	f.fm=x/gcd(x,abs(y));
	f.fz=y/gcd(x,abs(y));
	return f;
}
int main(void)
{
	struct fenshu f1,f2,fadd,fmus;
	printf("Please input the fraction f1's numerator and denominator:");
	scanf("%d,%d",&f1.fz,&f1.fm);
	printf("Please input the fraction f2's numerator and denominator:");
	scanf("%d,%d",&f2.fz,&f2.fm);
	fadd=add(f1,f2);
	fmus=mus(f1,f2);
	printf("The add is : %d/%d\n",fadd.fz,fadd.fm);
	printf("The mus is : %d/%d\n",fmus.fz,fmus.fm);
	return 0;
}

算法思路:

  • 学会使用结构体的方法;。
  • 通分时需要分子、分母同时除以它们的最大公约数,这里就用到了前面的求最大公约数的算法。

程序心得:

  • 对于结构体变量 struct fenshu f1,f2,一般是对其成员 f1.fz , f1.fm , f2.fz , f2.fm进行操作,若要直接对结构体变量操作,必须是相同的结构体类型。

思考拓展:

在此基础上试增加分数乘法和除法的函数。

提示:没有什么提示。

#include<stdio.h>
#include<math.h>
struct fenshu
{
	int fm;
	int fz;
};
int gcd(int m,int n)										//求两个数的最大公约数
{
	int t,r;
	if(n>m)
	{
		t=n;n=m;m=t;
	}
	while((r=m%n)!=0)
	{
		m=n;n=r;
	}
	return n;
}
fenshu add(struct fenshu1,struct fenshu2)						//计算两个分数的和
{
		struct fenshu f;
		int x,y;
		x=f1.fm*f2.fm;											//求和的分母
		y=f1.fz*f2.fm+f2.fz*f1.fm;								//就和的分子
		f.fm=x/gcd(x,abs(y));									//通分
		f.fz=y/gcd(x,abs(y));
		return f;
}
struct mus(struct fenshu f1,struct fenshu f2)					//计算两个分数的差
{
	struct fenshu f;
	int x,y;
	x=f1.fm*f2.fm;
	y=f1.fz*f2.fm-f2.fz*f1.fm;
	f.fm=x/gcd(x,abs(y));
	f.fz=y/gcd(x,abs(y));
	return f;
}
int main(void)
{
	struct fenshu f1,f2,fadd,fmus;
	printf("Please input the fraction f1's numerator and denominator:");
	scanf("%d,%d",&f1.fz,&f1.fm);
	printf("Please input the fraction f2's numerator and denominator:");
	scanf("%d,%d",&f2.fz,&f2.fm);
	fadd=add(f1,f2);
	fmus=mus(f1,f2);
	printf("The add is : %d/%d\n",fadd.fz,fadd.fm);
	printf("The mus is : %d/%d\n",fmus.fz,fmus.fm);
	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值