Java实验2

实验内容

(1)有理数四则运算

编写一个Java应用程序,实现两个有理数的四则运算,要求操作数用分子和分母的形式表示。结果要求最简形式,用“分子/分母”的形式表示、如果分母为1,则结果以整数表示。

(2)最终得分

声明一个Average接口,其中约定求平均值的方法(参数为一个数组,该数组元素是无序的)void avg(int[] score);声明First、Second类实现Average接口,分别给出求平均值的方法实现。

A.类First中的功能为全部数值相加后求平均值。

B.类Second中的功能为去掉一个最高分和一个最低分,再将总分求平均值。

注:数据是整数类型,有可能是负数,且数据至少为3个,但计算结果要求保留小数点2位。

实验结果

有理数四则运算

最终得分

源代码

有理数四则运算

Lab.java

package lab2;
import java.util.Scanner;
public class Lab
{
	public static void main(String[] args)
	{
		Calculate ans = new Calculate();
		Scanner t = new Scanner(System.in);
		System.out.println("输入第一个数的分子和分母(形式:分子 分母)");
		ans.x1=t.nextInt();
		ans.y1=t.nextInt();
		System.out.println("输入第二个数的分子和分母(形式:分子 分母)");
		ans.x2=t.nextInt();
		ans.y2=t.nextInt();
		t.close();
		ans.Add();
		ans.Sub();
		ans.Mul();
		ans.Div();
	}
}

Calculate.java

package lab2;
public class Calculate
{
	public int x1,y1,x2,y2;
	int fun(int a,int b)//求最大公约数
	{return b!=0 ? fun(b, a % b) : a;}
	void Add()
	{
		int fz=x1*y2+x2*y1;
		int fm=y1*y2;
		int	yue=fun(fz,fm);
		fz/=yue;
		fm/=yue;
		if(fm<0)
		{
			fm=-fm;
			fz=-fz;
		}
		if(fm==1)
			System.out.println("加法结果是:"+fz);
		else
			System.out.println("加法结果是:"+fz+"/"+fm);
	}
	void Sub()
	{
		int fz=x1*y2-x2*y1;
		int fm=y1*y2;
		int	yue=fun(fz,fm);
		fz/=yue;
		fm/=yue;
		if(fm<0)
		{
			fm=-fm;
			fz=-fz;
		}
		if(fm==1)
			System.out.println("减法结果是:"+fz);
		else
			System.out.println("减法结果是:"+fz+"/"+fm);
	}
	void Mul()
	{
		int fz=x1*x2;
		int fm=y1*y2;
		int	yue=fun(fz,fm);
		fz/=yue;
		fm/=yue;
		if(fm<0)
		{
			fm=-fm;
			fz=-fz;
		}
		if(fm==1)
			System.out.println("乘法结果是:"+fz);
		else
			System.out.println("乘法结果是:"+fz+"/"+fm);
	}
	void Div()
	{
		int fz=x1*y2;
		int fm=y1*x2;
		int	yue=fun(fz,fm);
		fz/=yue;
		fm/=yue;
		if(fm<0)
		{
			fm=-fm;
			fz=-fz;
		}
		if(fm==1)
			System.out.println("除法结果是:"+fz);
		else
			System.out.println("除法结果是:"+fz+"/"+fm);
	}
}

最终得分

Grade.java

package lab2;
import java.util.Scanner;
interface Average
{
	 public float avg(int[] score);
}
class First implements Average
{
	int x=0;
	float sum=0;
	public float avg(int[] score)
	{
		for(int arr : score)
		{
			sum+=arr;
			x++;
		}
		return sum/x;
	}
}
class Second implements Average
{
	int max=-1000;
	int min=1000;
	int x=0;
	float sum=0;
	public float avg(int[] score)
	{
		for(int arr : score)
		{
			if(arr>max)
				max=arr;
			if(arr<min)
				min=arr;
			sum+=arr;
			x++;
		}
		x-=2;
		sum=sum-min-max;
		return sum/x;
	}
}
public class Grade
{
	public static void main(String[] args)
	{
		Scanner scanner=new Scanner(System.in);
		First F = new First();
		Second S = new Second();
		System.out.println("请输入分数的个数:");
		int i=scanner.nextInt();
		int[] score=new int[i];
		System.out.println("请输入对应的分数:");
		for (int j = 0; j < i; j++) {
			score[j]=scanner.nextInt();
		}
		System.out.println();
		float a = F.avg(score);
		float b = S.avg(score);
		System.out.printf("First类计算结果:%.2f\n",a);
		System.out.printf("Second类计算结果:%.2f",b);
	}
}

感谢大家的观看

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值