第一周课后编程练习:
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);
}
}