Java语言程序设计第三章课后习题答案.docx
Java语言程序设计第三章课后习题答案Java语言程序设计(郑莉) 第三章课后习题答案 1.设N为自然数: n!=1*2*3*.*n 称为n的阶乘,并且规定0!=1.试编程计算2!,4!,6!he 10!.并将结果输出到屏幕上。 答: public class Mul public static void main(String args) int i,n; float s; for(n=0;n<=10;n=n+2) if(n=0) System.out.println("0!=1n"); else s=1; for(i=1;i<=n;i+) s=s*i; System.out.println(n+"!="+s+"n"); 2.编写程序,接收用户从键键盘上输入的三个整数x,y,z.从中选出最大和最小者,并编程实现。 答:public class Math public static void main(String args) int IntArg = new intargs.length; for(int i=0;i<args.length;i+) IntArgi = Integer.parseInt(argsi); int max,min; max=IntArg0>IntArg1?IntArg0:IntArg1; max=max>IntArg2?max:IntArg2; min=IntArg0<IntArg1?IntArg0:IntArg1; min=min<IntArg2?min:IntArg2; System.out.println("max="+max); System.out.println("min="+min); 3.求出100一枚的宿舍,并将这些数在屏幕上5个乙杭地显示出来。 答: public class Su public static void main(String args) int n,i,k=0,y; for(n=2;n<=100;n+) y=1; for(i=2;i<n;i+) if(n%i=0) y=0;break; if(y=1) k+; System.out.print(n+" "); if(k%5=0) System.out.print("n"); 4.使用java.lang.Math类,生成100个0-99之间的随机整数,找出他们之中的最大值和最小值,并统计大于50的整数个数。 public class Random public static void main(String args) int MinNum,MaxNum,n=0; int array=new int100; array0=(int)(Math.random*100); MinNum=array0; MaxNum=array0; System.out.println("数列为:"); System.out.print(array0+" "); for(int i=0;i<100;i+) arrayi=(int)(Math.random*100); if(arrayi>50) n+; if(arrayi>=MaxNum) MaxNum=arrayi; if(arrayi<=MinNum) MinNum=arrayi; System.out.print(arrayi+" "); System.out.println; System.out.println("MinNum="+MinNum); System.out.println("MaxNum="+MaxNum); System.out.println("大于50的整数个数有:"+n); 5.接收用户从键盘上输入的两个整数,求两个数的最大公约数和最小公倍数,并输出。 public class Test2 public static void main(String args) int I = new intargs.length; for(int i=0;i<args.length;i+) Ii = Integer.parseInt(argsi); int m,n,temp,t; if(I0<I1) temp=I0; I0=I1; I1=temp; m=I0; n=I1; t=m%n; while(t!=0) m=t; n=m; t=m%n; System.out.println("两个数的最大公约数为:"+n); System.out.println("两个数的最小公倍数为:"+I0*I1/n); 6. 从键盘上输入一件物品的价格,假设用户支付了一张5元纸币,请列出一种找零的方案,使得纸币及硬币的个数最少。如3.68元,应为两元一张、一元一张、五角一个、一角一个、五分一个、二分一个、一分一个。 / Price类 import java.io.*; public class Price public static void main(String args) System.out.println("enter a number(0.01-5.00):"); float a=Keyboard.getFloat; int c=(int)(a*100); int b=500-c; System.out.println("找零如下:"); if(b/200!=0)System.out.println(b/200+"张2元");b-=(b/200)*200; if(b/100!=0)System.out.println(b/100+"张1元");b-=(b/100)*100; if(b/50!=0)System.out.println(b/50+"张5角");b-=(b/50)*50; if(b/20!=0)System.out.println(b/20+"张2角");b-=(b/20)*20; if(b/10!=0)System.out.println(b/10+"张1角");b-=(b/10)*10; if(b/5!=0)System.out.println(b/5+"个5分");b-=(b/5)*5; if(b/2!=0)System.out.println(b/2+"个2分");b-=(b/2)*2; if(b!=0)System.out.println(b+"个1分"); / Keyboard类 import java.io.*; public class Keyboard static BufferedReader inputStream =new BufferedReader(new InputStreamReader(System.in); public static int getInteger try return(Integer.valueOf(inputStream.readLine.trim).intValue); catch(Exception e) e.printStackTrace; return 0; public static String getString try return(inputStream.readLine); catch(IOException e) return"0" public static float getFloat String s="" try BufferedReader in = new BufferedReader(new InputStreamReader(System.in); s=in.readLine; return(Float.parseFloat(s); catch(IOException e) System.out.println("输入非法!"); return(0.0f); 运行结果: 7.什么是异常?解释抛出、捕获的含义。 答:异常又称为例外,是特殊的运行错误对象,在程序中可以强制编译器来处理程序运行中的发生的并非由程序本身所造成的错误; 抛出异常:把生成异常对象并提交的过程称为抛出异常; 抛出异常是java中一个程序处理动作,检查异常时要么在方法中声明一个异常抛出,用try-catch语句捕获异常,并进行处理。 8.简述Java的异常处理机制。 答:java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。每当java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。 9.系统定义的异常与用户自定义的异常有何不同?如何使用这两类异常? 答:系统定义的特定情况出现的问题,而此时用来对可能遇到的问题进行处理。用户定义的是自己觉得可能会出现问题时,需要处理的。这样避免程序中断或是出现未知错误。 系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不补货或者抛出就会编译不通过。运行时异常编译可以通过,但是运行时才显露出来。 10.用户如何自定义异常?编程实现一个用户自定义异常。 定义mytest import java.io.*; public class mytest public static void main(String args) int number1=0,number2=0, result=0; try System.out.println("输入第一个数字:"); number1=Integer.valueOf(Keyboard.getString).intValue; System.out.println("输入第二个数字:"); number2=Integer.valueOf(Keyboard.getString).intValue; result=quotient(number1,number2); catch(NumberFormatException e) private static int quotient(int number,int denominator)throws DivideByZeroException if(denominator=0) throw new DivideByZeroException; return(number/denominator); System.out.println(e.toString); System.exit(-1); System.out.println(number1+"/"+number2+"="+result); 定义DivideByZeroException public class DivideByZeroException extends ArithmeticException 定义Keyboard import java.io.*; public class Keyboard static BufferedReader inputStream=new BufferedReader(new InputStreamReader(System.in); public static int getInteger try return (Integer.valueOf(inputStream.readLine.trim).intValue); catch(Exception e) e.printStackTrace; return 0; public DivideByZeroException super("除数不能为0!"); public static String getString try return(inputStream.readLine); catch(IOException e)return "0"