• 中国MOOC_面向对象程序设计——Java语言_第1周 类与对象_1分数


    第1周编程题

    返回
     

    我们在题目说明中给出了一部分代码,你需要在这部分代码的基础上,按照题目说明编写代码,然后将两部分代码一起提交。

    依照学术诚信条款,我保证此作业是本人独立完成的。

    温馨提示:

    1.本次作业属于Online Judge题目,提交后由系统即时判分。

    2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

    1
    分数(10分)

    题目内容:

    设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。

    这个类的构造函数是:

    Fraction(int a, int b)

        构造一个a/b的分数。

    这个类要提供以下的功能:

    double toDouble();

        将分数转换为double

    Fraction plus(Fraction r);

        将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。

    Fraction multiply(Fraction r);

        将自己的分数和r的分数相乘,产生一个新的Fraction的对象。

    void print();

        将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。

    注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。

    你写的类要和以下的代码放在一起,并请勿修改这个代码:

    import java.util.Scanner;

    public class Main {

    public static void main(String[] args) {

    Scanner in = new Scanner(System.in);

    Fraction a = new Fraction(in.nextInt(), in.nextInt());

    Fraction b = new Fraction(in.nextInt(),in.nextInt());

    a.print();

    b.print();

    a.plus(b).print();

    a.multiply(b).plus(new Fraction(5,6)).print();

    a.print();

    b.print();

    in.close();

    }

    }

     

    注意,你的类的定义应该这样开始:

    class Fraction {

     

    也就是说,在你的类的class前面不要有public。

    输入格式:

    程序运行时会得到四个数字,分别构成两个分数,依次是分子和分母。

    输出格式:

    输出一些算式。这些输入和输出都是由Main类的代码完成的,你的代码不要做输入和输出。

    输入样例:

    2 4 1 3

    输出样例:

    1/2

    1/3

    5/6

    1

    1/2

    1/3

    时间限制:500ms内存限制:32000kb
     
    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		Fraction a = new Fraction(in.nextInt(), in.nextInt());
    		Fraction b = new Fraction(in.nextInt(), in.nextInt());
    		a.print();
    		b.print();
    		a.plus(b).print();
    		a.multiply(b).plus(new Fraction(5, 6)).print();
    		a.print();
    		b.print();
    		in.close();
    	}
    
    }
    
    class Fraction {
    	private int a_;// 分子
    	private int b_;// 分母
    
    	public Fraction(int a, int b) {// 构造函数
    		while (b % a == 0 && a != 1) {// 化简分数为最简形式
    			b /= a;
    			a /= a;
    		}
    
    		a_ = a;
    		b_ = b;
    	}
    
    	public int getA() {// 得到分子
    		return a_;
    	}
    
    	public int getB() {// 得到分母
    		return b_;
    	}
    
    	public Fraction plus(Fraction r) {// 将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。
    		int a_1 = a_;// 第一个分子
    		int b_1 = b_;// 第一个分母
    		int a_2 = r.getA();// 第二个分子
    		int b_2 = r.getB();// 第二个分母
    		int c = b_1 * b_2;
    		int gongBeiShu = 0;
    
    		if (b_1 < b_2) {
    			int temp = b_1;
    			b_1 = b_2;
    			b_2 = temp;
    		}
    
    		while (true) {
    			int temp = b_1 % b_2;
    
    			if (temp == 0) {
    				gongBeiShu = c / b_2;
    				break;
    			} else {
    				b_1 = b_2;
    				b_2 = temp;
    			}
    		}
    
    		if (b_1 != gongBeiShu) {
    			int beiShu = gongBeiShu / b_;
    			a_1 = beiShu * a_;
    			b_1 = beiShu * b_;
    		}
    
    		if (b_2 != gongBeiShu) {
    			int beiShu = gongBeiShu / (r.getB());
    			a_2 = beiShu * r.getA();
    			b_2 = beiShu * r.getB();
    		}
    
    		return new Fraction(a_1 + a_2, b_1);
    	}
    
    	public Fraction multiply(Fraction r) {// 将自己的分数和r的分数相乘,产生一个新的Fraction的对象。
    		return new Fraction(a_ * (r.getA()), b_ * (r.getB()));
    	}
    
    	public void print() {// 将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
    		while (b_ % a_ == 0 && a_ != 1) {// 化简分数为最简形式
    			b_ /= a_;
    			a_ /= a_;
    		}
    
    		if (a_ == 1 && b_ == 1) {
    			System.out.println(1);
    		} else {
    			System.out.println(a_ + "/" + b_);
    		}
    	}
    }
    
  • 相关阅读:
    Android开发如何定制framework层服务
    Intellij IDEA通过SVN导入基于Springboot的maven项目以及对已有项目做更新
    intelliJ IDEA 怎么添加本地的idea web项目
    Android热修复之AndFix使用教程
    iOS友盟分享的使用总结
    iOS 传感器集锦
    IOS CALayer的属性和使用
    Swift使用Alamofire实现网络请求
    Android踩坑随笔Fragment中onActivityResult方法不被调用
    上周热点回顾(4.30-5.6)团队
  • 原文地址:https://www.cnblogs.com/denggelin/p/6810160.html
Copyright © 2020-2023  润新知