一、有理数类的代码

packageBIgDecinal;public classRationalNumber {private int numerator;//分子

private int denominator;//分母

public intgetNumerator() {returnnumerator;

}public intgetDenominator() {returndenominator;

}public RationalNumber(int numerator, intdenominator) {int gcd =gcd(numerator,denominator);this.numerator = ((denominator > 0) ? 1 : -1) * numerator /gcd;this.denominator = Math.abs(denominator) /gcd;

}private static int gcd(int numerator, int denominator) {//约分

int m =Math.abs(numerator);int n =Math.abs(denominator);int temp = 1;while(n != 0) {

temp= m %n;

m=n;

n=temp;

}returnm;

}public RationalNumber add(RationalNumber number1,RationalNumber number2) {//加法运算

int n = number1.getNumerator() * number2.getDenominator() + number2.getNumerator() *number1.getDenominator();int d = number1.getDenominator() *number2.getDenominator();return newRationalNumber(n,d);

}public RationalNumber subtract(RationalNumber number1, RationalNumber number2) {//减法运算

int n = number1.getNumerator() * number2.getDenominator() - number2.getNumerator() *number1.getDenominator();int d = number1.getDenominator() *number2.getDenominator();return newRationalNumber(n,d);

}public RationalNumber multiply(RationalNumber number1, RationalNumber number2) {//乘法运算

int n = number1.getNumerator() *number2.getNumerator();int d = number1.getDenominator() *number2.getDenominator();return newRationalNumber(n, d);

}public RationalNumber divide(RationalNumber number1, RationalNumber number2) {//除法运算

int n = number1.getNumerator() *number2.getDenominator();int d = number1.getDenominator() *number2.getNumerator();return newRationalNumber(n, d);

}public boolean equal(RationalNumber number1,RationalNumber number2) {//判断两数是否相等

if(number1.getDenominator() == number2.getDenominator() && number1.getNumerator() ==number2.getNumerator())return true;else

return false;

}public double doubleValue() {//转double

return this.numerator * 1.0 / this.denominator;

}public long longValue() {//转long

return (long)doubleValue();

}public String toString() {//转string

return this.numerator+"/"+this.denominator;

}

}

二、测试代码

packagess;importjava.util.Scanner;importBIgDecinal.RationalNumber;public classMain {public static voidmain(String[] args) {

Scanner sc= newScanner(System.in);

System.out.println("输入第一个数的分子、分母,将以有理数形式输出:");int a = sc.nextInt(),b =sc.nextInt();

System.out.println("输入第个数的分子、分母,将以有理数形式输出:");int c = sc.nextInt(),d =sc.nextInt();

RationalNumber num1= newRationalNumber(a,b);

RationalNumber num2= newRationalNumber(c,d);

System.out.println("第一个数"+num1.getNumerator()+"/"+num1.getDenominator());

System.out.println("第二个数"+num2.getNumerator()+"/"+num2.getDenominator());//此处可展示约分功能

System.out.println("-----------------------------------------------");

System.out.print("相加得:");

System.out.println(num1.add(num1, num2));

System.out.print("相减得:");

System.out.println(num1.subtract(num1, num2));

System.out.print("相乘得:");

System.out.println(num1.multiply(num1, num2));

System.out.print("相除得:");

System.out.println(num1.divide(num1, num2));

System.out.print("两数是否相等:");if(num1.equal(num1, num2))

System.out.println("相等");elseSystem.out.println("不相等");

System.out.print("第一个数转换为长整型型:");

System.out.println(num1.longValue());

System.out.print("第一个数转换为双精度浮点型型:");

System.out.println(num1.doubleValue());

}

}

三、运行结果示例

四、讨论

1、问:描述与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

答:在使用C语言编写有理数代码过程中,注重的更多是完成这个功能,不要求功能与功能之间的联系,而面向对象编程则更加系统,不同的功能被不同的类,模块分隔的清楚,需要使用的时候只要使用我们所需的功能即可。

2、问:别人如何复用我的代码?

答:拷贝我的代码并命名如RationalNumber的类,然后就可以在编写代码过程中需要时或者建一个新类来输出时调用RationalNumber内的方法即可。

3、问:别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?

答:依赖,当我修改我的有理数类的属性时,会对他人调用我的代码时产生影响,其中可能包括入参、返回值等方面的改动产生的影响。

4、问:有理数类的public方法是否设置合适?为什么有的方法设置为private?

答:合适,使用public有助于其他类在使用有理数类的方法时能够直接有效的调用,而有的方法可以设置为private来限于自身访问。

c语言编程:有理数比较,有理数类的设计相关推荐

  1. 有理数加法要简化c语言编程,两个有理数相加(要求输入时以分数形式,输出时也以分数形式)...

    上大一,老师布置了一道题,内容就是:两个有理数相加(要求输入时以分数形式,输出时也以分数形式),这道题用了大概2个多小时吧(欢迎指导),废话不多说了,直接上程序: #include using nam ...

  2. 闹钟定时设计c语言编程,单片机定时闹钟(课程设计).docx

    单片机定时闹钟(课程设计) PAGE \* MERGEFORMAT10 绪 论 摘要: 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM.只读 ...

  3. 数字温度计的c语言编程,基于DS18B20数字温度计的设计(全文完整版)

    <基于DS18B20数字温度计的设计.doc>由会员分享,可免费在线阅读全文,更多与<基于DS18B20数字温度计的设计>相关文档资源请在帮帮文库(www.woc88.com) ...

  4. c语言编程存航线,C语言编程飞机订票系统如何设计?

    题目:编制一个航空客运订票系统,实现简单的机票操作 班级:计0702 姓名:学号: 完成日期:2008年12月20日 一. 实验内容: 1.问题描述: 航空客运订票的业务包括:查询航班.客票预订和办理 ...

  5. 如何用c语言制作飞机订票系统,C语言编程飞机订票系统如何设计?

    题目:编制一个航空客运订票系统,实现简单的机票操作 班级:计0702 姓名:学号: 完成日期:2008年12月20日 一. 实验内容: 1.问题描述: 航空客运订票的业务包括:查询航班.客票预订和办理 ...

  6. c语言编程字符串相似度,某课程设计---文件相似度判断

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //返回两个文件操作是否都成功 return ( result1 && result2 ); } //功能:将数据存储到文件内 //输入: ...

  7. c语言编程曹冲称象,《曹冲称象》教学设计

    第一课时 一.直接导入 1.板书课题,齐读.质疑. 2."曹"是个姓氏,我们身边有没有姓"曹"的同学或者小伙伴. 3.介绍曹操和曹冲两人物.曹操是魏国的君王,是 ...

  8. 信号发生器c语言编程,基于AT89C51的信号发生器的设计

    摘要:为了设计一款结构简单.性能优良的信号发生器.采用了AT89C51单片机为控制核心.在Proteus下仿真可以产生正弦波.方波.三角波.锯齿波,而且可以方便地设定输出信号的频率及幅度,得到的输出波 ...

  9. c语言竞赛算法编程题目,[C语言编程接龙竞赛]第一题 设计一个N!的算法

    献丑了,贴上我的算法.. #include #include /* -- Program detail ----------- Programmer : yuki Last modify date: ...

  10. 用java有理数类包含加减乘除,7.1 面向对象的简介 - VimL 语言编程指北路

    面向对象是一种编程思想,并不特指某种编程语言.所以不必惊讶用 VimL 也能以面向 对象的方式来写代码.本章先简单介绍一下面向对象的编程思想,再探讨如何利用 VimL 现有的特性实现面向对象编程.最后 ...

最新文章

  1. oracle包函数过程,oracle 函数,包,存储过程简单实例
  2. c# 网站在服务器上第一次请求都需要耗时很久,最.net面试题目.doc
  3. 用c语言大一个三角形图形,c语言图形,请高手修改,效果是一个三角形绕一点旋转一周...
  4. go不使用工具包将大写字符转成小写字符的方法
  5. C标准库和glibc(C运行库)的关系
  6. matlab用ezmesh绘制单位球,Matlab------------命令大全2
  7. HTML5 CSS3 Transform 笔记 (scale不起作用)
  8. 求数组里面的最大值和最小值
  9. 深入理解计算机系统视频版,绝对干货
  10. 标准RTSP消息的错误代码–转
  11. 问题解决:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1700”不匹配值“1800”
  12. Map集合之ConcurrentHashMap
  13. 介绍一款通过软件设置调节显示器亮度的工具:护眼宝
  14. Real-Time Rendering——5.3.3 Material Systems 材质系统
  15. 5.6版本GTID复制异常处理一例(转)
  16. AI读懂说话人情绪,语音情感识别数据等你Pick!
  17. cocoscreator的Bundle加载问题
  18. 浏览器开发者模式Headers没有FormData
  19. 五脏六腑等最喜欢的食物
  20. Sass快速入门笔记(将主要知识点截取出来,参考官方文档和一些网络教学视频)

热门文章

  1. 以存储为例说明设备busy的解决方法
  2. python tk/ttk制作 安卓群控助手,多台设备多任务多线程执行
  3. Win10下的外接显示器不能识别的解决方法
  4. 解密搭建平台赚钱的方法一:详解搭建网站收入的几个来源
  5. 海尔正式发布COSMO平台,世界智能制造将要去哪?
  6. 目标检测数据集格式转换(yolo→voc)
  7. 服务器c盘缓存文件夹,c盘存放缓冲文件的地方在哪里
  8. 初次打开QQ空间后IE卡死问题处理
  9. mac制作linux启动盘,Mac 下制作开机启动盘,做了一个Centos7 的系统U盘
  10. 2019 计蒜之道 初赛 第三场 阿里巴巴协助征战SARS(python做法,费马小定理+快速幂)