java经典编程题二及详细解答.docx_第1页
java经典编程题二及详细解答.docx_第2页
java经典编程题二及详细解答.docx_第3页
java经典编程题二及详细解答.docx_第4页
java经典编程题二及详细解答.docx_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java经典编程题二及详细答案2.1上机练习,基本题) 编程观察如下输出语句: 1System.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的类型以及数据进行各种替换,观察什么时候能赋值,什么时候需要使用强制转换,什么时候不能强制转换,什么时候强制转换会丢失数据。 23) 编写一个程序求半径R为10的圆的面积,结果保留2为有效小数。公式为:S=R 注:可用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) 设有一元二次方程如下: 2 aX bx c=0 试根据从键盘输入的a,b,c求解方程的根。 【提示】要考虑各种情形:一是a为0的情形,方程根为-c/b。还有就是根据判别式 2=b - 4ac进行判断,如果.0有两个实根;=0,有一个实根;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的取值在其范围-128127内时强制转换不会丢失数据,否则就会丢失数据。 通过各种数据类型的转换可知:当两个数据类型相同或将低级类型数据赋给高级类型时可以直接赋值;由于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 float4; BufferedReader in=new BufferedReader(new InputStreamReader(System.in); for(int i=0;iscore.length;i ) System.out.println(请输入第 (i 1) 个成绩:); scorei=Float.parseFloat(in.readLine(); float min=32768; float max=0; for(int i=0;imax) max=scorei; if(scorei= 90) System.out.println(该成绩为优); else if (grade = 80 & grade = 70 & grade = 60 & grade 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;ji;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;i10;i ) for(int j=1;j10;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 java.lang.*; 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(guessrandom) 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(pare(guess, num)!=GuessNum.EQUALS); 结果截图: 2)程序如下: import java.util.*; public class count public static void main(String args) int count = 0; List list = new ArrayList(); int i = 1; while(i = 100) int temp = 0; for(int j = 1; j = i; j ) if(i %j = 0) temp ; if(count =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(remain0) 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(); 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(remain0) System.out.print(计算机拿 remain); System.out.println(); System.out.println(计算机赢); break; else System.out.println(最多只能拿三根); continue; System.out.print(计算机拿); y=(int)(Math.random()*3 1); System.out.println( y); remain-=y; System.out.println(剩余火柴数: remain); if(remain=0) System.out.println(人赢); break; break;*/ c=0; d=1; 结果截图: 4)程序如下: public class zhencha public static void main(String args) String persons = A, B, C, D, E, F ; for (int i = 0; i = 0; j-) / 换成二进制数,保存在一个6个元素的一维数组中 if (t / 2 0) numj = t % 2; t = t / 2; else numj = t; break; / num0-num5代表A-F / 代表AB至少有一个人作案 if (num0 num1 = 1) / AEF 至少2个人作案 if (num0 num4 num5 = 2) / AD 不是同案犯。但可能都没作案或其中一个作案 if (num0 num3 = 1) / BC 同时作案,或者同时没作案 if (num1 num2 = 0 | num1 num2 = 2) / CD肯定有一个人作案了 if (num2 num3 = 1) / 如果D没作案且E也没作案,或者 D作案了了 if (num3 = 0 & num4 = 0 | num3 = 1) for (int index = 0; index num.length; index ) if (numindex = 1) System.out.println(作案人有: personsindex); 结果截图: 实验2.4 , 基本题 1)程序如下: public class jiecheng public static void main(String args) int two = 2; int four = 4; int five = 5; int sum = calcFac(two) calcFac(four) calcFac(five); System.out.println(2! 4! 5! = sum); static int calcFac(int number) if(number = 1) return 1; else return calcFac(number - 1) * number; 结果截图: 递归求n! import java.util.*; public class dgjc public static void main(String args) System.out.print(请输入N值:); Scanner input = new Scanner(System.in); int N = input.nextInt(); System.out.print(factor(N); public static int factor(int n) if(n1) return 1; int s=n*factor(n-1); return s; 非递归求n! import java.util.*; public class fdgjc public static void main(String args ) System.out.print(请输入N值:); Scanner input = new Scanner(System.in); int N= input.nextInt(); int s= 1; for (int i = 1; i =N; i ) s = s * i; System.out.println(则N!= s); 2)程序如下: public class mianji private double a; private double b; private double c; public mianji(double a, double b, double c) this.a = a; this.b = b; this.c = c; public static void main(String args) mianji triple = null; triple = new mianji(3, 4, 5); double area1 = triple.calcArea(); triple = new mianji(5.3, 6.2, 8); double area2 = triple.calcArea(); System.out.println(三条边分别为3,4,5的三角形面积是: area1); System.out.println(三条边分别为5.3, 6.2, 8的三角形面积是: area2); public double calcArea() double p = (a b c) / 2; return Math.sqrt(p * (p - a) * (p- b) * (p - c); 结果截图: 3)程序如下: import java.util.*; public class sushu public static void main(String args) Scanner scan = new Scanner(System.in); System.out.print(请输入一个整数:); int x = scan.nextInt(); System.out.print(请输入一个整数:); int y = scan.nextInt(); int minNum = Math.min(x, y); int maxNum = Math.max(x, y); System.out.println(这两个整数间的素数有:); for(int i=minNum, count =0; imaxNum; i ) boolean isPrimeNumber = true; for(int j = 2; j i; j ) if(i % j = 0) isPrimeNumber = false; if(count = 3) System.out.println(); count = 0; if(isPrimeNumber) System.out.print(i ); count ; 结果截图: , 提高题 1)程序如下: public class bahe / function:判断temp是否为素数 public boolean checkPrime(int temp) boolean flag=true; int i=(int)Math.sqrt(temp); for(int j=2;j=i;j ) if(temp%j!=0) continue; else flag=false; j=i 1; return flag; /function:将temp分解为两个素数之和并打印 public void ChangeInt(int temp) int i=(int)(temp/2); for(int j=2;j=i;j ) if(checkPrime(j) int k=temp-j; if(checkPrime(k) System.out.println(整数temp temp 被分解为素数 j 和素数 k 之和); break; else continue; public static void main(String args) bahe ch=new bahe(); for(int i=6;i n) int h = m; m = n; n = h; if (n % m = 0) System.out.println(最大公约数为: m); else for (int i = n / 2; i 1; i-) if (m % i = 0 & n % i = 0) System.out.println(最大公约数为: i); break; public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论