作业帮 > 综合 > 作业

如何在c语言中实现分数相加,以分数形式输出,并化为最简

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/03 19:43:11
如何在c语言中实现分数相加,以分数形式输出,并化为最简
完整的C程序:#include "stdio.h"/* 分数结构 */typedef struct{\x09int numerator;\x09\x09/* 分子 */\x09int denominator;\x09\x09/* 分母 */} Fraction;int GCD(int a,int b);int LCM(int a,int b);Fraction Add(Fraction f1, Fraction f2);void main(){\x09Fraction f1, f2, f3;\x09f1.numerator = 1;\x09f1.denominator = 3;\x09f2.numerator = 1;\x09f2.denominator = 6;\x09\x09f3 = Add(f1, f2);\x09\x09printf("%d/%d + %d/%d = %d/%d\n", f1.numerator, f1.denominator, f2.numerator, f2.denominator, f3.numerator, f3.denominator);}/* 返回两个分数相加的结果 */Fraction Add(Fraction f1, Fraction f2){\x09Fraction retValue;\x09int lcm = LCM(f1.denominator, f2.denominator);\x09/* 计算最小公倍数 */\x09int gcd;\x09\x09retValue.denominator = lcm;\x09retValue.numerator = f1.numerator * lcm / f1.denominator + f2.numerator * lcm / f2.denominator;\x09gcd = GCD(retValue.numerator, retValue.denominator);\x09retValue.numerator /= gcd;\x09retValue.denominator /= gcd;\x09return retValue;}/* 返回两个整数的最大公约数 */int GCD(int a,int b){\x09int i,temp_gcd;\x09for(i=a;i>=1;i--)\x09{\x09\x09if(a%i==0)\x09\x09{\x09\x09\x09if(b%i==0)\x09\x09\x09{\x09\x09\x09\x09temp_gcd=i;\x09\x09\x09\x09return temp_gcd;\x09\x09\x09}\x09\x09}\x09}}/* 返回两个整数的最小公倍数 */int LCM(int a,int b){\x09int temp_lcm;\x09temp_lcm = a * b / GCD(a,b);\x09return temp_lcm;}运行测试: