第一周课后编程练习:
1、编写程序,求计算底边长为a、高为h的三角形的面积,并输出面积s。其中,a、h的值从键盘输入。
提示:
    (1)三角形面积计算公式为:s=a*h/2
    
    (2) a、h、s三个变量的数据类型最好使用float,用int也可以。
    
    package diyicike;
   
import java.util.Scanner;
    public class kehoubianchenglianxi {
    
   
 public static void main(String[] args) {
	 Scanner scan =new Scanner(System.in);
        System.out.println("输入三角形的三边");
        int a = scan.nextByte();
        int b = scan.nextByte();
        int c = scan.nextByte();
        float s =(a+b+c)/2f;
        float S = (float) Math.sqrt(s*(s-a)*(s-b)*(s-c));
        if (a+b>c && b+c>a && a+c>b){
            System.out.println(S);
        }
        else{
            System.out.println("不成立三角形");
        }
 
    }
    }
    
    Java Scanner 类
    
    java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
    
    下面是创建 Scanner 对象的基本语法:
    
    Scanner s = new Scanner(System.in);
    
    接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据:
    
    使用 next 方法:
    
    ScannerDemo.java 文件代码:
    
    import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 从键盘接收数据 // next方式接收字符串 System.out.println(“next方式接收:”); // 判断是否还有输入 if (scan.hasNext()) { String str1 = scan.next(); System.out.println(“输入的数据为:” + str1); } scan.close(); } }
    
    执行以上程序输出结果为:
    
    $ javac ScannerDemo.java
    
    $ java ScannerDemonext方式接收:
    
    runoob com输入的数据为:runoob
   
2、输入三个整数a、b、c,求它们的和及平均值,并输出结果。
    提示:平均值的数据类型最好使用float,用int也可以。
    
    import java.util.Scanner;
   
    public class class2_3 {
    
    
    public static void main(String args[]) {
    
    
    final Scanner in = new Scanner(System.in);
    
    int a = in.nextInt();
    
    int b = in.nextInt();
    
    int c = in.nextInt();
    
    double sum = a + b + c;
    
    double average = (sum)/3.0;
    
    System.out.println(“sum=”+sum);
    
    System.out.println(“average=”+average);
    
    }
    
    }
   
3、从键盘输入一元一次方程
ax+b=0的2个系数a、b,求方程的根并输出。
    提示:题目中所定义变量的数据类型最好使用float,用int也可以。
    
    package com.Squ.www; //创建一个Squ包
   
    import java.util.Scanner;//导入java.util包中的Scanner类(使用此类可以方便的完成输入流的输入操作)
    
    import java.math.BigDecimal;//导入java.math包中的BigDecimal(用来对超过 16位有效位的数进行精确的运算)
   
    //对一元二次方程中各系数的不同情况作讨论,列出不同情况下根的分布,最终求出存在的根
    
    public class Squ { //定义一个公共类—Squ
    
    public static void main(String[]args)
    
    {
    
    
    double X1,X2;//定义两个解
    
    System.out.println(“方程表达式为:ax^2+bx+c=0”);//显示台输出—方程表达式为:ax2+bx+c=0
    
    Scanner sc=new Scanner(System.in);//用Scanner类获取控制台的输入(即获得从键盘输入的数)
    
    System.out.println(“请输入a的值:”);//显示台输出提示—输入a的值
    
    //每一次从键盘输入值后回车执行后面的内容
    
    double a=sc.nextDouble();//接受控制台输入的数字给形参a赋值
    
    System.out.println(“请输入b的值:”);//显示台输出提示—输入b的值
    
    double b=sc.nextDouble();//接受控制台输入的数字给形参b赋值
    
    System.out.println(“请输入c的值:”);//显示台输出提示—输入c的值
    
    double c=sc.nextDouble();//接受控制台输入的数字给形参c赋值
    
    double t=b
    
     b-4
    
    a
    
     c;//定义一个变量t,且t=b
    
    b-4
    
     a
    
    c,此时t为方程根的判别式
   
	//用判断语句对方程的系数的不同情况作讨论,并得出根的分布情况
	//① 判断当a、b、c都为0时,方程变为等式0=0;方程不存在!
	if(a==0 && b==0 && c==0)
	{
		System.out.println("方程不存在!");//显示台输出
	}
	//② 当a、b都为0,而c不为0时,方程变为等式c=0,此中不含未知数,方程不存在!
	else if(a==0 && b==0 && c!=0)
	{
		System.out.println("方程不存在!");//显示台输出
	}
	//③ 当a为0,且b、c不为0时,方程变为一元一次方程bx+c=0,此时方程只有一个解
	else if(a==0 && b!=0 && c!=0)
	{
		System.out.println("此方程为一元一次方程");//显示台输出
		double x1 = (-1 * c) / b;//定义一个变量result存放方程的解;此时解为:-c/b
		System.out.println("方程的解为:" + resetValue(x1));
	}
	//④ 以上定义了t=b*b-4*a*c,若t>0,则t的开方为实数,此时方程有两个不同的实根,且两实根为相反数
	else if(t>0)
	{
		System.out.println("方程有两个实根");//显示台输出
		//第一根的算法:((-b) + Math.sqrt(t)) / 2 * a( Math.sqrt是指math方法中的sqrt类,即开方)
		X1= ((-b) + Math.sqrt(t)) / 2 * a;
		//第一根的算法:((-b) - Math.sqrt(t)) / 2 * a
		X2= ((-b) - Math.sqrt(t)) / 2 * a;
		//显示台输出两根的值
		System.out.println("X1="+resetValue(X1));
		System.out.println("X2="+resetValue(X2));
	}
	//⑤ 如果t<0,则t开方后产生虚数,此时方程有一对共轭副根
	else if(t<0)
	{
		//⑥ 如果b不等于0,则其根为共轭副根,根由虚部和实部组成
		if(b!=0)
		{
			X1=(-1*b)/(2*a);//根的实部
			X2=Math.sqrt(-1*t)/(2*a);//根的虚部
			System.out.println("方程有一对共轭复根:");//显示台输出
			//输出时toString()表示用科学计数法输出根的值;加i指虚部的表示法;其中的"+、-"连接根的实部和虚部,形成共轭
			System.out.println("X1="+resetValue(X1).toString()+"+"
					+resetValue(X2).toString()+"i");//输出第一个根的值
			System.out.println("X2="+resetValue(X1).toString() + "-"
					+ resetValue(X2).toString() + "i");//输出第二个根的值
		}
		//⑦ 若b=0,则此时根只有虚部没有实部,是一对共轭复根,实部为0
		else
		{
			X1=Math.sqrt(-1*t)/(2*a);//根中只有虚部
			System.out.println("方程有一对相反虚根:");//显示台输出
			//输出时toString()表示用科学计数法输出根的值;加i指虚部的表示法;其中的"+、-"连接根的实部和虚部,形成共轭,此时实部为0
			System.out.println("X1=0-"+resetValue(X1).toString()+"i");
			System.out.println("X2=0+"+resetValue(X1).toString()+"i");
			
		}
	}
	//⑧ 若t=0,则方程有一个实根
	else if(t==0)
		{
			X1=(-1*b)/2*a;//根的计算
			System.out.println("方程有一个实根");//显示台输出
			System.out.println("方程的解为:"+resetValue(X1));//显示台输出方程的解
		}
		
	}
	
//使用静态方法将定义的值由double类型转换为BigDecimal类型(声明)
private static BigDecimal resetValue(double n) {
	// TODO 自动生成的方法存根
	BigDecimal bd=new BigDecimal(n);//将n的值赋给形参bd
	//返回的值保留两位小数,默认用四舍五入方式 (ROUND_HALF_UP表示遇5进1;setScale规定要保留的小数位数)
	return bd.setScale(2,BigDecimal.ROUND_HALF_UP);
}
}