现在的位置: 首页 > 综合 > 正文

有理数的四则运算 C、java

2013年01月10日 ⁄ 综合 ⁄ 共 4464字 ⁄ 字号 评论关闭

 

题目:用C语言、java语言实现有理数的四则运算,输入整数或小数,输出结果用分数和小数两种形式输出。

 


 

 

首先想到的是:有理数如何表示?

拼命、拼命回忆到了初中的数学知识——任何有理数都可以表示为分数的形式,2个整数,一个分子,一个分母。

所以表示为


//结构体 用于存储一个有理数 包含分子和分母 
typedef struct Rational{
        int fenzi;
        int fenmu;
}Rat


还有一个问题是如何将舒服的分数或小数转化为有理数结构Rat?

如下方法getRat():

/**
*  接收一个整数或小数,转化为分数形式返回  
*/
Rat getRat()
{
    float num ;
    Rat f;
    scanf("%f",&num);  
    f.fenzi = (int)num;
    f.fenmu = 1;
    while(num != (int)num) 
    {
        f.fenmu *= 10;
        num *= 10; 
        f.fenzi = (int)num;
    }    
    return f; 
}   

getRat()的作用是接受一个从键盘键入的float数值,然后将其转化为一个Rat结构返回,但不会进行化简,如输入0.5会返回的结构体分子为5分母为10.

在中间计算过程中可以有5/10这样的分数存在,但最后输出结果时肯定是要输入最简结果的,所以还必须有一个用于化简的函数——

Rat huajian(Rat n)
{
    //1111111111111111111 
    int x = n.fenzi;
    int y = n.fenmu;
    if(x < y)
    {//使x>y 
        int temp = x;
        x = y;
        y = temp;
    } 
    int r = 1;
    while (r)
    {
          r = x % y;
          x = y;
          y = r;
    }    
    //2222222222222222222
    /* 返回n分子分母同除以最大公约数的结果,即化简*/
    Rat num;
    num.fenzi = n.fenzi/x;
    num.fenmu = n.fenmu/x;
    return num;
    //3333333333333333333
} 

从//11111111 到//22222222之间的部分是一个求最大公约数的算法,执行完之后的x值即是n.fenzi和n.fenmu的最大公约数, 然后到//3333333的部分是返回化简后的Rat结构……


然后就是四则运算的函数了,如加法

/**
*  加法 
*/
Rat jia(Rat a, Rat b)
{
    Rat n;
    n.fenzi = a.fenzi * b.fenmu  +  b.fenzi * a.fenmu;
    n.fenmu = a.fenmu * b.fenmu;
    return huajian(n);
}

 


 


完整代码如下: 由于编译器对C标准的支持问题,所以后缀名用了cpp。

英语不好,所以函数名暂时都是用的拼音,未及修改。

 

结果示例: 

]{`~@HYE2R8VKRB%$K]PE_K


 


 

java代码与此相似,完整代码为:Main.java

 

结果示例:

%(7VMG572$~$IIVZ`8NF%%E

 


 


ps: 此为帮通信的那几个小朋友写的作业,

昨日耕至深夜,而知其必不知所惜,故为此篇,纪之。




 



抱歉!评论已关闭.