java实训2-4

2 、(5分)简单的四则运算

请你编写程序实现能处理两个数的+、-、*、/、%的表达式程序。数据的输入/输出全部使用标准输入/输出,输入数据的第一行为你需要计算表达式的个数,从第2行开始,每一行为你计算的一个表达式,每行数据中没有空格,除%运算外的输入数据皆为float数,除%运算结果为整数外,其他都保留两位小数,每个表达式的结果使用一行输出。
输入测试用例:
4
1+2
3.12*4
7%3
1/3
用例输出结果:
3.00
12.48
1
0.33
import java.util.*;

public class Test022 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String tmp = sc.nextLine();
		for(int i=0;i<n;i++) {
			String str = sc.nextLine();
			char[] arr = str.toCharArray();
			int flag = 0;
			for(char a: arr) {
				if(a=='+')flag=1;
				if(a=='-')flag=2;
				if(a=='*')flag=3;
				if(a=='/')flag=4;
				if(a=='%')flag=5;
			}
			if(flag==1) {
				String[] str1 = str.split("[+]");
				float f1 = Float.parseFloat(str1[0]);
				float f2 = Float.parseFloat(str1[1]);
				System.out.printf("%.2f\n",f1+f2);
			}
			if(flag==2) {
				String[] str1 = str.split("[-]");
				float f1 = Float.parseFloat(str1[0]);
				float f2 = Float.parseFloat(str1[1]);
				System.out.printf("%.2f\n",f1-f2);
			}
			if(flag==3) {
				String[] str1 = str.split("[*]");
				float f1 = Float.parseFloat(str1[0]);
				float f2 = Float.parseFloat(str1[1]);
				System.out.printf("%.2f\n",f1*f2);
			}
			if(flag==4) {
				String[] str1 = str.split("[/]");
				float f1 = Float.parseFloat(str1[0]);
				float f2 = Float.parseFloat(str1[1]);
				System.out.printf("%.2f\n",f1/f2);
			}
			if(flag==5) {
				String[] str1 = str.split("[%]");
				int f1 = Integer.parseInt(str1[0]);
				int f2 = Integer.parseInt(str1[1]);
				System.out.printf("%d\n",f1%f2);
			}
		}
	}
}
3 、(5分)球的相关计算问题
   球的相关计算涉及到球的体积和球的表面积以及过直径的截面积等,我们知道,以上计算仅需要知道球的半径就可以利用计算公式计算出来,计算中用到的圆周率使用3.14进行计算。
   输入:
       标准输入一个浮点数r(r>0),代表需要计算的球的半径.
   输出:
       标准输出,根据输入的球半径r,依次输出球表面积、圆球体积和直径的侧面积大小,数据间由一个空格隔开,结果保留2位有效数字。
   测试用例输入:
   3
   测试用例输出:
   113.04 113.04 28.26
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;

public class Test3 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		float a = sc.nextFloat();
		float b,c,d;
		b = (float) (3.14f*4.0f*a*a);
		c = 3.14f*4f/3f*a*a*a;
		d = 3.14f*a*a;
		DecimalFormat df = new DecimalFormat("0.00");
		df.setRoundingMode(RoundingMode.HALF_UP);
		String b1 = df.format(b);
		String c1 = df.format(c);
		String d1 = df.format(d);
		System.out.print(b1+" "+c1+" "+d1+" ");
	}
}
4 、(5分)异常处理设计问题

    我们能够通过海伦公式计算已知一个三角形三边长度的三角形面积,如果三角形的三边长为a,b,c,三角形的面积计算公式描述如下:

 

      要求你完成MyMath对象中的trianglearea法的实现,如果参数a,b,c的值不能构成一个三角形,使用异常进行处理,产生无效三角形异常,如果a,b,c中有负数,产生参数无效异常,根据题目要求请你完成异常类型和MyMath类型的设计。MyMath设计代码如下:

import java.util.*;
public class MyMath
{
 public static double trianglearea(double a,double b,double c)
  throws NotTriAngleException,NegativeArgementsException{
        //判定a,b,c是否全为正数

  //判定a,b,c是否能构成三角形

  //计算三角形面积
  double s;
 }
 public static void main(String[] args)
 {
  double a,b,c;
  int N;
  Scanner sc= new Scanner(System.in);
  N = sc.nextInt();
  for(int i=0;i<N;i++){
   a=sc.nextDouble();
   b=sc.nextDouble();
   c=sc.nextDouble();
   System.out.printf("%.2f\n",MyMath.trianglearea(a,b,c));
  }
 }
   
}

class NotTriAngleException extends Exception
{
}

class NegativeArgementsException extends Exception
{
}

  输入:
      输入的第一行为一个正整数N(N>0),表示以下有N行数据,每行为一个三角形边的输入信息,原则上是由空格隔开的三个浮点数,但也可能由于输入错误产生非正常情况。
  输出:
      如果某行三角形边数据能读入三个浮点数,输出方法trianglearea计算结果,保留2位小数,如果发生异常直接输出异常信息;每个三角形计算信息使用一行输出;如果某行三角形边数据读入出现问题,直接退出程序的运行。
  测试1输入:
     3
  3 4 5.0
  1 1 2
     -2 4.0 3


  测试1输出:
     6.00
    Not TriAngle
     Negative Argements


  测试2输入:    
  3
  3 4 5.0
  1a 1 2
   -2 4.0 3

  测试2输出:
     6.00

import java.util.*;
import java.math.*;
public class MyMath
{
 public static double trianglearea(double a,double b,double c)
		 throws NotTriAngleException,NegativeArgementsException{
        //判定a,b,c是否全为正数
	 	if(a<0||b<0||c<0) {
	 		throw new NegativeArgementsException("Negative Argements");
	 	}
  //判定a,b,c是否能构成三角形
	 	if(a+b>c&&a+c>b&&b+c>a) {
	 	}
	 	else {
	 		throw new NotTriAngleException("Not TriAngle");
	 	}
  //计算三角形面积
	 	double p = (a+b+c)/2d;
	 	double s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
	 	
	 	return s;
 }
 public static void main(String[] args) 
 {
  double a,b,c;
  int N;
  Scanner sc= new Scanner(System.in);
  N = sc.nextInt();
  for(int i=0;i<N;i++){
try {
   a=sc.nextDouble();
   b=sc.nextDouble();
   c=sc.nextDouble();
   System.out.printf("%.2f\n",MyMath.trianglearea(a,b,c));
   } catch (NotTriAngleException e1) {
	   //System.out.println("Not TriAngle");
	   System.out.println(e1.getMessage());
	   
   } catch (NegativeArgementsException e2) {
	// TODO Auto-generated catch block
	System.out.println(e2.getMessage());
   } catch (Exception e) {
	   System.exit(0);
   }
  }
 }
   
}

class NotTriAngleException extends Exception
{
	public NotTriAngleException(String message) {
		super(message);
		//System.out.println("Not TriAngle");
	}
}

class NegativeArgementsException extends Exception
{
	public NegativeArgementsException(String message) {
		super(message);
		//System.out.println("Negative Argements");
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值