一、实验目的:1、掌握 Java 基本数据类型、运算符与表达式、数组和字符串的使用方法。
2、掌握各种变量的声明方式。
3、理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法。
4、通过以上内容,掌握 Java 语言的编程规则。
5、了解Java程序文件名和类名的说明方法。
二、实验内容(或步骤)提要1、输入一个学生的成绩,给出相应的等级(分别用if和switch语句实现)。
85分及以上为A级;70分及以上为B级; 60分及以上为C级;60分以下为D级。
【参考程序1】public class Score{public static void main(String args[]){int s=Integer.parseInt(args[0]);if(s<60)System.out.println("D");else if(s<70)System.out.println("C");else if(s<85)System.out.println("B");elseSystem.out.println("A");}}【参考程序2】public class Score{public static void main(String args[]){int s=Integer.parseInt(args[0]);int x=s/10;switch (x) {case 0: case 1: case 2: case 3: case 4:case 5: System.out.println("D");break;case 6: System.out.println("C");break;case 7:case 8: if (s <85) { System.out.println("B"); break; }case 9:case 10: System.out.println("A");}}}2、输入某人的应纳税所得额,计算个人所得税。
税率表如下:计算公式是:应纳个人所得税税额=应纳税所得额×适用税率-速算扣除数例:王某当月应纳税所得额6400元。
则应纳个人所得税税额=6400×20%-375=905元。
【参考程序】import java.util.Scanner;public class TaxCompute {public static void main(String[] args) {double tax, salary;Scanner reader = new Scanner(System.in);System.out.print("please input your salary:");salary = reader.nextDouble();if (salary <= 500)tax = salary * 0.05;else if (salary <= 2000)tax = salary * 0.1 - 25;else if (salary <= 5000)tax = salary * 0.15 - 125;else if (salary <= 20000)tax = salary * 0.20 - 375;else if (salary <= 40000)tax = salary * 0.25 - 1375;else if (salary <= 60000)tax = salary * 0.30 - 3375;else if (salary <= 80000)tax = salary * 0.35 - 6375;else if (salary <= 100000)tax = salary * 0.40 - 10375;elsetax = salary * 0.45 - 15375;System.out.println("个人所得税=" + tax);}}/*Output:please input your salary:6400个人所得税=905.0*/3、计算算式: 1+21+22+23+…+2n(注:n由键盘输入)【参考程序1】public class Twoadd {public static void main(String args[]) {int n=Integer.parseInt(args[0]);long sum=1;for (int k=1;k<=n;k++) {sum = sum +(long)Math.pow(2,k); //用Math类的pow方法求2k}System.out.println("result="+sum);}}【参考程序2】public class Twoadd {public static void main(String args[]) {int n=Integer.parseInt(args[0]); //从命令行输入nlong sum=1; //保存累加和long x=1; //被加项for (int k=1;k<=n;k++) {x=x*2; //求下一个被加项时,只要在前一项的基础上乘2sum=sum+x;}System.out.println("result="+sum);}}【说明】“参考程序1”最直观,但“参考程序2”比“参考程序1”要好,利用Math.pow(2,k)求每个累加项花费的时间长,为了完成计算,在pow方法内要执行一段计算程序。
而“参考程序2”求累加项则是一个乘法运算,这里利用了前后两个累加项的变化特点。
甚至简单写成x=x+x形式的加法运算更快,但可读性不如x=x*2。
【编程技巧】(1)用循环组织累加,在循环外给累加变量赋初值,在循环内将累加项加到累加变量上;(2)分析累加项的变化规律,尤其是前后项之间的关系。
(3)用Math类的pow方法求2的k次方,由于该方法返回为一个实数,所以要用强制转换为long型才能累加到sum上。
4、从键盘输入一个长整数,求其各位数字之和。
【分析】这里的关键的如何得到各位数字,注意到得到一个整数的最低位数字可用除10求余数的办法,而要得到该整数的除最低位外的数只要用除10取整即可。
因此,利用循环即可将一个整数的所有各位数字取出。
【参考程序】public class Fang {public static void main (String args[]) {int a,m=0;a=Integer.parseInt(args[0]); //从命令行输入awhile(a>0) {m+=a%10; //累加计算各位数字a=a/10;}System.out.print(a+"的各位数字之和="+m);}}【编程技巧】(4)如何取一个数的最低位;(5)如何计算去掉最低进后的数;(6)如何设置循环的条件。
5、找出1~100之间拥有除数最多的数。
【提示】在一定范围内找目标数,所以总体上是一个循环问题。
对于每个被检测的数,要统计出其拥有除数的个数,这又是个循环问题,也就是在外循环内有内循环。
为了求出拥有除数最多的哪个数,还涉及比较问题,所以要引入两个变量记下符合条件的这个数以及最多拥有的除数个数,在每次考察一个数的除数个数后要与最多者进行比较,从而决定是否要修改最多者。
【参考程序】public class Test{public static void main(String[] args) {int len = 100, thenumber=1, temp=0;for(int i = 1; i <= len; i ++){int num = 0;for(int j = 1; j <= i; j ++) {if(i % j == 0) {num ++;}}if(temp<num){ temp=num; thenumber=i;}}System.out.println(thenumber + " 除数个数: " + temp);}}6、运行下面的程序,理解String类常用方法的使用。
public class 2_4{public static void main (String args[]){String str=”I like java programming”;int i1=str.indexOf(‘J’);String s1=str.substring(i1);String s2=str.substring(i1,i1+4);int i2=stIndexOf(‘J’);String s3=str.substring(i2+5);System.out.println("s1="+s1);System.out.println("s2="+s2);System.out.println("s3="+s3);}}【参考程序】(略)。