2.1上机练习
?基本题
1)编程观察如下输出语句:
System.out.println("hello test escape char");
在“escape”处换上各种转义字符测试输出效果。如何实现如下输出:
Hello "test"
Hello ‘\test’
2)设有如下代码段,考虑赋值转换问题:
int a=234;
byte b=a;
System.out.println("a=" a ",b=" b);
将a,b的类型以及数据进行各种替换,观察什么时候能赋值,什么时候需要使用强制转换,什么时候不能强制转换,什么时候强制转换会丢失数据。
3) 编写一个程序求半径R为10的圆的面积,结果保留2为有效小数。公式为:S=πR2
注:π可用Math类的常量PI表示(即Math.PI)。保留小数请查阅DecimalFormat类?提高题
1)设有一个边长为30的等边三角形,三角形内有一个内切圆,计算除内切圆外三角形内其它部分的面积。
【提示】先算三角形面积,再计算圆的面积,其差即为结果。h是等边三角形的高,内切圆的半径r=h/3,面积s=πh?/9。
2)调试分析以下程序的运行结果:
public class test {
public static void main(String a[]) {
int m=10,n=517;
System.out.println(n % m);
System.out.println(n / m);
System.out.println(m >> 2);
System.out.println(m & n);
System.out.println(Integer.toBinaryString(m));
System.out.println(Integer.toBinaryString(m >> 2));
}
}
注意:Integer.toBinaryString(int)用于将一个整数转化为二进制形式的数字串。在进行位运算
时,注意观察二进制的数据变化规律。
2.2上机练习
?基本题
1)从键盘输入4个学生的成绩,找出最高分和最低分。
【提示】引入两个变量分别存放最高分和最低分,根据比较改变这两个变量值。
2) 输入一个百分制分数,输出其对应的五分制成绩,包括:优、良、中、及格、不及格。
?提高题
1)设有一元二次方程如下:
aX2 bx c=0
试根据从键盘输入的a,b,c求解方程的根。
【提示】要考虑各种情形:一是a为0的情形,方程根为-c/b。还有就是根据判别式
Δ=b2 - 4ac进行判断,如果Δ.>0有两个实根;Δ=0,有一个实根;Δ<0,无实数解。
另外,求x的平方根可用Math.sqrt(x)方法。
2) 输入某人的应纳税所得额,计算个人所得税。税率表如下:
级数全月应纳税所得额税率%速算扣除法(元)
1不超过500元的50
2超过500元至2000元的部分10 25
3超过2000元至5000元的部分15 125
4超过5000元至20000元的部分20 375
5 超过20000元至40000元的部分251375
6 超过40000元至60000元的部分30 3375
7 超过60000元至80000元的部分356375
8 超过80000元至100000元的部分40 10375
9 超过100000元的部分45 15375
计算公式是:应纳个人所得税税额=应纳税所得额?适用税率-速算扣除数
例:王某当月应纳税所得额6400元。则应纳个人所得税税额=6400?20%-375=905元。
2.3.4上机练习
?基本题
1)写一个程序输入一个整数n,输出相应三角形。例如:N=4,则三角形如下:
#
##
###
####
2) 计算算式: 1-1/2 1/3-1/4 1/5-…-1/100
3)输出九九乘法表,格式如下:
1*1=1 1*1=2 1*3=3 ……
2*1=1 2*2=2 2*3=3 ……
……
9*1=1 9*2=18 9*3=27 ……
4)编写一个程序,用于输出Fibonacci数列的前20项。
5)编写一个程序,输出90度以内的各度的sin()函数值。
?提高题
1)编写一个猜数的应用程序,用随机函数产生一个10到99的随机数。根据猜中使用的次数x计算得分。每次猜完给出是大于还是小于的提示。
注:得分计算办法:110-x*10 ;(其中,x为猜的次数)
2)找出1~100之间拥有除数最多的数。
【提示】在一定范围内找目标数,所以总体上是一个循环问题。对于每个被检测的数,要统计出其拥有除数的个数,这又是个循环问题,也就是在外循环内有内循环。为了求出拥有除数最多的哪个数,还涉及比较问题,所以要引入两个变量记下符合条件的这个数以及最多拥有的除数个数,在每次考察一个数的除数个数后要与最多者进行比较,从而决定是否要修改最多者。
3)编写一个人与计算机对拿火柴的游戏程序。利用随机函数Math.random()产生火柴数量(20~50),每次最多拿3根,拿到最后一根为胜者。
要求:游戏过程要显示火柴总数,选择谁先拿;每步要显示剩余火柴数量,以及计算机拿的数量,并提示用户输入拿多少;结束时显示谁是胜者。
【解题算法提示】
(1) 产生火柴总数(amount);
(2) 决定随先拿(whoplay:1--人, 2--计算机);
(3) 定义一个变量保存剩余火柴数量(remain)=amount ;
(4) 当remain>0 循环
4.1 根据whoplay的值决定是计算机拿x根还是提示人拿x根;计算机拿时最好带有智能,人
拿时要限制输入数量。
4.2 修改 whoplay的值;
4.3 修改remain的值;
(5) 根据whoplay的值决定胜者
4)某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析: A、B至少有一人作案; A、E、F三人中至少有两人参与作案; A、D不可能是同案犯; B、C或同时作案,或与本案无关; C、D中有且仅有一人作案;如果D没有参与作案,则E也不可能参与作案。试编一程序,将作案人找出来。
2.4上机练习
?基本题
1)利用求n!的方法计算 2! 4! 5!的值。分别利用递归和非递归方法实现求n!。
2)编写根据三条边求三角形面积的方法。利用该方法求以下两个三角形面积。
(1)三条边分别为:3,4,5
(2)三条边分别为:5.3, 6.2, 8
3)从命令行参数获取两个整数,找出两个整数之间的所有素数,每行输出3个数。
?提高题
1)利用求素数的方法,就6~20之间的所有偶数验证歌德巴赫猜想:
任何一个大于6的偶数可以分解为两个素数之和。
2)分别编写一个方法求两个整数的最大公约数和最小公倍数,输入两个整数,计算这两个整的最大公约数和最小公倍数。
2.5上机练习
?基本题
1)利用随机函数产生20个学生的英语成绩存入一个数组中。
●输出数组所有元素,每行输出3个数;
●求最高分、最低分;
●求平均成绩。
2)产生Fibonacci数列的头20项存入一个一维数组中,按每行4个输出数组的元素。
3) 利用随机函数产生50~500之间的整数给一个6*6的矩阵赋值.
l 求第3行的元素之和;
l 求第2列的最小元素;
l 求主对角线上最大元素;
l 求数组所有元素之和。
4)利用随机函数产生36个10~30之间的整数给一个6*6的矩阵赋值.
●求最大元素值,指出其在矩阵中的所有出现位置;
●求该矩阵的转置矩阵。
5)利用数组元素间的关系输出含8行的杨辉三角形;
杨辉三角形特点:
(1)第1列元素为1,对角线元素为1;
(2)其他元素均为前一行的同一列位置元素和前一行的前一列元素之和。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
?提高题
1)产生20个范围为0~50之间的不重复随机整数存入到一个数组中,将数组中元素按由小到大输出,并求数组所有元素的平均值。
【提示】每产生一个整数要跟前面已产生的数进行比较,如果已存在,则不算,要重新产生,可以用一个循环来控制产生一个新数,只有产生的数未出现过,才能出循环。
2)利用随机函数产生36个随机整数给一个6*6的二维数组赋值。求出所有鞍点,鞍点的条件是该元素在所在行是最大值,在所在列是最小值。
【提示】先找出行上最大的元素,然后在判断该元素在所在的列上是否是最小的。
3)利用排序算法将一数组按由小到大排列,输入一个数据,查找在数组中是否存在,采用“折半查找”加快查找速度。
所谓“折半查找”就是先与中间位置元素进行比较,如果小于中间位置的元素,则在其上半部的中间位置继续查找,否则在下半部的中间位置查找,该过程反复进行,直到找到或发现不存在为止。
4)构造一个n阶方阵,方阵的大小从键盘输入,方阵的最外一圈元素为1,以后往内依次为2,3,....n。
例如:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
详细答案如下:
实验2.1
基本题
1)System.out.println("hello "test" escape char"); 输出结果是hello "test" System.out.println("hello '\test' escape char");输出结果是hello‘ est’
2)int a=234; byte b=a;在这种情况下,由于a是int型,b是byte型而int的级别比byte 高,故b不能被赋值,若要赋值必需利用强制转换如:byte b=(byte)a;当a的取值在其范围-128~127内时强制转换不会丢失数据,否则就会丢失数据。
通过各种数据类型的转换可知:当两个数据类型相同或将低级类型数据赋给高级类型时可以直接赋值;由于byte、short、char是平级的不能自动转换,必需使用强制转换,另外由高级到低级时就要用到强制转换;布尔类型不能与其他类型进行转换;在强制转换中,当某一数据超出它所声明的类型的长度范围就会导致溢出或者降低数据精度而丢失数据。3)程序如下:
import java.text.DecimalFormat;
public class Area
{
public static void main(String args[])
{
int R=10;
String S;
DecimalFormat a= new DecimalFormat("#0.00");
S=a.format(Math.PI*R*R);
System.out.println ("圆的面积为: " S);
}
}
结果截图:
?提高题
1)程序如下:
public class Area
{
public static void main(String s[])
{
double a1;
double a2;
double area;
a1=225*Math.sqrt(3);
a2=Math.PI*75;
area=a1-a2;
System.out.println("三角形的面积为:" a1);
System.out.println("内切圆的面积为:" a2);
System.out.print("余下部分的面积为:");
System.out.print(area);
}
}
结果截图:
2)调试结果如下:
实验2.2?基本题
1)程序如下:
import java.io.*;
public class MyDemo
{
public static void main(String[] args) throws NumberFormatException, IOException {
float[] score=new float[4];
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i System.out.println("请输入第" (i 1) "个成绩:"); score[i]=Float.parseFloat(in.readLine()); } float min=32768; float max=0; for(int i=0;i if(score[i]>max){ max=score[i]; } if(score[i] min=score[i]; } } System.out.println("最高分:" max " 最低分:" min); } } 结果截图: 2)程序如下: import java.util.*; public class GradeRank { public static void main(String str[]) { Scanner scanner = new Scanner(System.in); System.out.print("please input the grade:"); double grade = scanner.nextInt(); if (grade >= 90) { System.out.println("该成绩为优"); } else if (grade >= 80 && grade < 90) { System.out.println("该成绩为良"); } else if (grade >= 70 && grade < 80) { System.out.println("该成绩为中"); } else if (grade >= 60 && grade < 70) { System.out.println("该成绩及格"); } else { System.out.println("该成绩不及格"); } } }结果截图: 提高题 1)程序如下: import java.util.Scanner; public class fangcheng { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入a"); double a=input.nextDouble(); System.out.println("请输入b"); double b=input.nextDouble(); System.out.println("请输入c"); double c=input.nextDouble(); if(a==0) { System.out.println("对不起该方程不是一元二次方程"); } else if(b*b-4*a*c==0) {System.out.println((-b Math.sqrt(b*b-4*a*c))/(2*a)); } else if (b*b-4*a*c>0) { System.out.println("第一个答案为" (-b Math.sqrt(b*b-4*a*c))/(2*a)); System.out.println("第二个答案为" (-b-Math.sqrt(b*b-4*a*c))/(2*a)); } else {System.out.println("对不起没有答案"); } } } 截图如下: 2)程序如下: import java.util.Scanner; public class Tax { public static void main(String[] args) { double s; Scanner input = new Scanner(System.in); System.out.println("请输入所得税额t"); double t=input.nextDouble();; if(t==500) {System.out.println("应纳个人所得税税额为:25"); } else if(t<=2000) { s=0.1*t-25; System.out.println("应纳个人所得税税额为:" s); } else if (t<=5000) { s=0.15*t-125; System.out.println("应纳个人所得税税额为:" s);} else if (t<=20000) { s=0.2*t-375; System.out.println("应纳个人所得税税额为:" s);} else if (t<=40000) { s=0.25*t-1375; System.out.println("应纳个人所得税税额为:" s);} else if (t<=60000) { s=0.3*t-3375; System.out.println("应纳个人所得税税额为:" s);} else if (t<=80000) { s=0.35*t-6375; System.out.println("应纳个人所得税税额为:" s);} else if (t<=100000) { s=0.4*t-10375; System.out.println("应纳个人所得税税额为:" s);} else { s=0.45*t-15375; System.out.println("应纳个人所得税税额为:" s);} } } 结果截图: 实验2.3 基本题 1)程序如下: import java.io.*; public class Sanjiao { public static void main(String[] args) { int n=0; try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入一个整数:"); String r = in.readLine(); n = Integer.parseInt(r); } catch(Exception E){} System.out.print("相应三角形如下:"); for(int i=0;i<=n;i ) { for(int j=0;j {System.out.print("#");} System.out.println(); } } } 结果截图: 2)程序如下: public class sum { public static void main(String[] args) { float sum = 0F; for(int i = 1; i <=100; i ){ if(i % 2 == 0){ sum -= (float)1 / i; }else{ sum = (float)1 / i; } } System.out.println("1-1/2 1/3-1/4 1/5-1/6 ...-1/100 = " sum); } } 结果截图: 3)程序如下: public class chengfa { public static void main(String args[]) { int sum; for(int i=1;i<10;i ) { for(int j=1;j<10;j ) { sum=i*j; System.out.printf(i "*" j "=" sum " " " "); } System.out.println(); } } } 结果截图: 4)程序如下: public class Fib { public static void main(String[] args) { int c; int a=1; int x=1; int b=1; System.out.print(a " " b); while (x<=20) {c=a b; System.out.print(" " c); a=b; b=c; x =1; } } } 结果截图: 5)程序如下: import https://www.wendangku.net/doc/066115225.html,ng.*; import java.io.*; public class Sin { public static void main(String args[]) { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s = ""; double d = -10; System.out.println("请输入一个90度以内的角:"); try { s = br.readLine(); d = Double.valueOf(s); } catch (Exception e) {} System.out.println("该角度对应的正弦值为:"); double di = Math.toRadians(d); double dou = Math.sin(di); double d2 = (double)(Math.round(dou*1000))/1000; System.out.println(d2); } } 结果截图: 提高题 1)程序如下: import java.util.Random; import java.util.Scanner; public class GuessNum { public static final int EQUALS=0; public static final int GREATER_THAN=1; public static final int LITTLE_THAN=2; int count=0; private int generateNum(){ Random random = new Random(); return 10 random.nextInt(90); } private int getTotal(){ return 110-(count 1)*10; } public int compare(int guess, int random){ if(guess==random){ System.out.println("恭喜你,你猜对了"); System.out.println("你猜对了. 你的得分是:" getTotal()); return EQUALS; }else if(guess count ; System.out.println("你已经猜了" count "次了,你的数小了"); return LITTLE_THAN; }else{ count ; System.out.println("你已经猜了" count "次了,你的数大了"); return GREATER_THAN; } } public static void main(String[] args){ GuessNum gn = new GuessNum(); Scanner scan = new Scanner(System.in); int num = gn.generateNum(); int guess; do{ System.out.println("请输入一个10到99之间的数字"); guess = scan.nextInt(); } while(https://www.wendangku.net/doc/066115225.html,pare(guess, num)!=GuessNum.EQUALS); } } 结果截图: 2)程序如下: import java.util.*; public class count { public static void main(String[] args) { int count = 0; List int i = 1; while(i <= 100) { int temp = 0; for(int j = 1; j <= i; j ) { if(i %j == 0) { temp ;} } if(count < temp) { list.clear(); list.add(new Integer(i)); count = temp; } else if(count== temp) {list.add(new Integer(i));} i ; } for(int value: list) {System.out.println("除数最多的数是: " value ", 除数个数为:" count);} } } 结果截图: 3)程序如下: import java.io.*; import java.util.*; public class huochai { public static void main(String args[]) { System.out.print("请按enter键开始游戏"); byte[] buf2=new byte[20]; String strTemp3=" "; try { System.in.read(buf2); } catch(IOException e){} strTemp3=new String(buf2); int a=(strTemp3.trim().compareTo("y")); int b=(strTemp3.trim().compareTo("Y")); int amount=0; amount=(int)(Math.random()*31 20); if(a==0||b==0) System.out.print("火柴数" amount); System.out.println(); System.out.print("谁先拿1--人,2--计算机(1或2)?"); byte[] whoplay=new byte[20]; String strTemp2=" "; try { System.in.read(whoplay); } catch(IOException e) {} strTemp2=new String(whoplay); int c=(strTemp2.trim().compareTo("1")); int d=(strTemp2.trim().compareTo("2")); int remain=amount; while(remain>=0) { if(c==0) { System.out.print("人拿火柴"); double x=0; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); try { String s= br.readLine(); x=Double.parseDouble(s); } catch(IOException e) { } if(x>=1&&x<=3) { remain-=(int)x; System.out.println("剩余火柴数:" remain); if(remain==0) { System.out.print("人赢!!");break; } if(remain<=3&&remain>0) { System.out.print("计算机拿" remain); System.out.println("计算机赢!!");break; } } else { System.out.println("最多只能拿三根!"); continue; } System.out.print("计算机拿"); int y=0; y=(int)(Math.random()*3 1); System.out.println("" y); remain-=y; System.out.println("剩余火柴数:" remain); if(remain==0) { System.out.print("人赢!!");break; } } if(d==0) { System.out.print("计算机拿"); int y=0; y=(int)(Math.random()*3 1); remain-=y; System.out.println("" y); System.out.println("剩余火柴数:" remain); if(remain==0) { System.out.print("计算机赢!!"); break; } /* while(remain>=0) { System.out.print("人拿火柴"); double x=0; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); try { String s= br.readLine();