2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言比较两个分数的大小

时间:12-29来源:作者:点击数:88

问题描述

比较两个分数的大小。

问题分析

人工方式下比较分数大小最常用的方法是:进行分数的通分后比较分子的大小。通分的步骤可描述如下:

(1) 先求出原来几个分数(式)的分母的最简公分母。

(2) 根据分数(式)的基本性质,把原来分数(式)化成以最简公分母为分母的分数(式)。

例如比较分数的过程为:

(1) 两分数的分母没有公约数,所以通分后最简分母为两分母之积:12*7=84

(2) 分子为最简公分母除以原来分数的分母再乘以分子,两分数的分子分别为84/12*7、84/7*5通分后两分数分别为,故

若两分数的分母有公约数,则应求出通分后的最简公分母,即两分母之积/分母的最大公约数。

算法分析

要求通分后的最简公分母,即求两分母的最小公倍数。求最小公倍数的前提是求出两数的最大公约数,最大公约数的求解采用辗转相除的方法,步骤如下:

(1) 用较大的数m除以较小的数n,得到的余数存储到变量b中;b=m%n;

(2) 上一步中较小的除数n和得出的余数b构成新的一对数,并分别赋值给m和n, 继续做上面的除法;

(3) 若余数为0,其中较小的数(即除数)就是最大公约数,否则重复步骤(1)和(2)。

通分后的分子为:通分后的分母/原分数分母*原分数分子,两分数的分母分别用变量j、l表示,分子用变量i、k表示。求解分子的代码如下:

  • m=zxgb(j,i)/j*i; /*求出第一个分数通分后的分子*/
  • n=zxgb(j,l)/l*k; /*求出第二个分数通分后的分子*/

只需比较变量m、n的值即可,若m>n,则第一个分数大于第二个分数,若m=n,则两分数相等,否则第一个分数小于第二个分数。

程序流程图:

下面是完整的代码:

  • #include<stdio.h>
  • int zxgb(int a, int b); /*函数声明*/
  • int main()
  • {
  • int i, j, k, l, m, n;
  • printf("Input two FENSHU:\n");
  • scanf("%d/%d,%d/%d", &i, &j, &k, &l); /*输入两个分数*/
  • m=zxgb(j, l)/j*i; /*求出第一个分数通分后的分子*/
  • n=zxgb(j, l)/l*k; /*求出第二个分数通分后的分子*/
  • if(m>n) /*比较分子的大小*/
  • printf("%d/%d>%d/%d\n", i, j, k, l);
  • else
  • if(m == n)
  • printf("%d/%d=%d/%d\n", i, j, k, l); /*输出比较的结果*/
  • else
  • printf("%d/%d<%d/%d\n", i, j, k, l);
  • return 0;
  • }
  • int zxgb(int a, int b)
  • {
  • long int c;
  • int d;
  • /*若a<b,则交换两变量的值*/
  • if(a<b)
  • {
  • c=a;
  • a=b;
  • b=c;
  • }
  • /*求分母a、b的最大公约数*/
  • for(c=a*b; b!=0; )
  • {
  • d=b;
  • b=a%b;
  • a=d;
  • }
  • return (int)c/a;
  • }

运行结果:

4/5,5/6↙︎
4/5<5/6
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门