结构体的应用
问题描述:
实现两个分数的加法和减法运算,负分数的分子为负数。
#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;
}