JAVA课后习题答案

前言学习网址 第一章Java语言基础1.指出Java语言的主要特点和ava程序的执行过程答:强类型 编译和解释 自动无用内存回收功能 面向对象 与平台无关 安全性 分布式计算 多线程2.说出开发与运行Java程序的主要步骤答:安装SUN的JDK,配置classpath编写源文件3.如何区分应用程序和小应用程序答:应用程序必须在一类中定义一个main()方法,该方法代表应用程序的入口 小应用程序不必定义main()方法,但是必须继承applet类4.说出Java源文件的命名规则答:和类命名规则一样,首字母大写5.选择一种上机环境,参照实例,编写一个输出“hello world!”字样的Java程序答:选择SUN的IDE,用UltraEdit-32编写如下: //HelloWorld.java /** *这是第一个程序 *@author 饶林 *@see */ class HelloWorld{ public static void main(String[] args) { System.out.println("Hello World!"); }}6.Java用什么字符集?共有多少个不同的字符?答:Java语言使用Unicode字符集,共有65535个字符。
7.Java语言标识符的命名规则是什么?答:由字母(包括英文字母、下划线、美元字符、文字字符)和数字字符组成 限定标识符的第一个字符不能是数字8.Java有哪些基本的数据类型,它们的常量又是如何书写的?答:基本的数据类型也称为原始数据类型,是系统预先规定的一些常用类型它们是:整数类型、浮点数(实数)类型、字符(文字)类型、逻辑类型(布尔型)9.指出下列内容那些事Java语言的整形常量,哪些是浮点数类型常量,那些两者都不是?1)E-4 2)A423 3)-1E-31 4)0xABCL 5).32E31 6)087 7)0x L8)003 9)0x12.5 10)077 11)11E 12)056L 13)0. 14).0答:整形常量:4,5,6,8,10,12 浮点型:1,3,9,13,14 两者都不是:2,7,11第二章运算和语句1.Java字符能参加算术运算吗?答:能,例如char类型a自加后变b2.占字节多的变量能直接赋给占字节少的变量吗?答:不能,需强制类型转换3.试用Java语言表达式描述以下数学计算式或逻辑条件:1) V=(4/3)*math.PI*math.pow(r,3);2)R=1/(1/R1+1/R2) 原式3)y=x5+x3+6 y=pow(x,5)+pow(x,3)+6;4)F=M1M2/R2 F=M1 *M2 /R*R5) Math.sin(x) / ax + Math.cos(π*x/2)>0 ? Math.cos(π*x/2) : - Math.cos(π*x/2);6) 0 < a <10 a > 0 && a < 107) 条件 x=1 与 y=2 有且只有一个成立 ( x == 1 && y != 2) || (x != 1 && y == 2)4.设再求以下表达式之前,整形变量a的值是4,试指出在求表达式之后变量a,b和c的值。
1)b=a*a++; b = 16, a = 5;2)c = ++a+a; c = 10, a = 5;5.编写一个程序示意前缀++和后缀++的区别,前缀—和后缀—的区别答:领悟第四题完全就可以理解前缀++后缀++ -- 亦如此6.若一个数恰好等于它的因子之和,则这个数称为“完全数”编写程序求1000之内的所有完全数解析:什么是数的因子?因子就是所有可以整除这个数的数,但是不包括这个数自身.//HelloWorld.java/** *这是第二个程序 *@author 饶林 *@see */public class Praxis2_6{ public static void main(String[] args) { int i,j,sum; for(i = 1; i <= 1000; i++){ //sum归0必须在此处 sum=0; for(j=1; j<= i/2; j++){ if((i%j)==0) sum = sum+j; } if(i == sum) System.out.print(i + " "); } }}7.编写输入正实数x,求平方不超过x的最大正整数n,并输出。
解析:/** *这是第三个程序 *@author 饶林 *@see */import java.util.*;public class Praxis2_7{ public static void main(String[]args) { Scanner consoleScanner = new Scanner( System.in ); System.out.print("请输入正实数X:" ); int x = consoleScanner.nextInt(); int y=(int)(Math.sqrt(x)); System.out.println("n = "+y); }}8.输入正整数n输出n行n列星号字符组成三角图案/** *这是第四个程序 *@author 饶林 *@see */import java.util.*;public class Praxis2_8{ public static void main(String[] args){ Scanner consoleScanner = new Scanner(System.in); System.out.print("请输入正整数x:"); int x = consoleScanner.nextInt(); for(int y=0; y< x; y++){ for(int m=x-y-1; m>0; m--){ System.out.print(" "); } for(int n=0; n< y+1; n++){ System.out.print("*"); } System.out.println(); } }}9.设有整形变量x和y的值分别为5和110.指出执行了下列语句后,变量x和y后的值分别是多少?1)while(x <= y) x*=2; X=160,y=110;2) do {x = y/x; y= y-x;} while (y > = 1); X=18,y=0;10.水仙花数是一个n( >= 3)位的数,它等于每个数字的n次幂之和。
例如,153是一个水仙花数,153=13+53+33,是编写一个程序,求小于999的所有水仙花数/** *这是第五个程序 *@author 饶林 *@see */public class Praxis2_10{ public static void main(String[] args){ int x,y,z; for(int m=100; m< 999; m++){ x = m/100; y = (m%100)/10; z = (m%100)%10; if(m== x*x*x+ y*y*y + z*z*z) System.out.print(m + " "); } }}11.编程序解百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡邹三,值钱一,百钱买百鸡,求鸡翁,鸡母,鸡邹各几何?/** *这是第六个程序 *@author 饶林 *@see */public class Praxis2_11{ public static void main(String args[]) { for(int i=0;i<=100;i++) for(int j=0;j<=100;j++) for(int k=0;k<=100;k+=3) //鸡雏的个数必须使3的倍数 { if(( (5*i+3*j+k/3)==100 )&& (i+j+k==100)) System.out.println("鸡翁:"+i+"; 鸡母:"+j+"; 鸡雏:"+k); } }}12.编写程序,按下面的公式计算自然对数底e的值:e = 1+1/1! + 1/2! + 1/3!....../** *这是第七个程序 *@author 饶林 *@see */public class Praxis2_12{ public static void main(String args[]) { int n=1000; //计算精度 double e=1.0; for(int i=1;i<=n;i++) { e=e+1.0/Praxis2_12.factorial(i); } System.out.println("e = "+e); } static double factorial(int a) //计算阶乘的静态方法 { double f=1.0; for(int j=1;j<=a;j++) f=f*j; return f; }} 13.编写程序,用如下公式计算圆周率的近似值:14.回文整数是正读反读相同的整数,编写一个程序,输入一个整数,判断是否为回文整数。
/** *这是第八个程序 *@author 饶林 *@see */import java.util.*;public class Praxis2_14 //输入整数,判断是否是回文整数{ public static void main(String args[]) { int a[]=new int[100]; int i=0; boolean b=true; Scanner consoleScanner = new Scanner( System.in ); System.out.print("请输入一个int型整数:" ); int x = consoleScanner.nextInt(); int test=x; while(test>0) //把整数的各个位上的数存到数组里 { a[i]=test%10; test=test/10; i++; } for(int j=0;j< i;j++) { if(a[j]!=a[i-j-1]) { b=false; break; } } if(b) System.out.println(x+"是回文整数"); else System.out.println(x+"并不是回文整数"); }}15.草地上有一堆野果,有一只猴子每天要吃掉一半又一个,五天后刚好吃完,问有多少个,猴子每天吃多少个?/** *这是第九个程序 *@author 饶林 *@see */public class Praxis2_15{ public static void main(String[] args){ int day,x1,x2; day = 5; x2= 0; while(day > 0){ x1 = (x2+1)*2; x2 = x1; day--; } System.out.println("共有"+ x2+"个桃子。
"); System.out.println("----------------------------"); for(int i=1; i< 6; i++){ int east; east = x2/2 + 1; x2 = x2/2-1; System.out.println("第" +i + " 天吃" + east + "个" ); } System.out.println("----------------------------"); }}第三章面向对象编程基础1.什么是面向对象技术?它有什么优点?答:程序设计者考虑的是对象的描述,对象间的关系,类的管理、什么时候什么地方调用对象的那一种方法 最大的优点是面向对象编程能有效地支持重用,是超大规模的程序也变得相对容易维护2.面向对象的程序设计与面向过程的程序设计有什么区别?答:面向过程的语言编程编程模式是: 程序 = 数据结构 + 算法编程时需要考虑的是程序做什么,怎么做,重点考虑每个实现的细节 面向对象的编程模式: 程序 = 对象 + 消息程序设计者考虑的是对象的描述、对象间的关系、类的管理、什么时候和什么地方调用对象的那一种方法。
3.在程序中对象有什么区别?答:类是对同一种对象的描述,类概括了同类对象的共有性质:数据和方法类的每个对象都有自己的标识,但它们具有相同的一组属性和提供相同的一组方法4.举例说明类方法和实例方法,以及类变量和实例变量的区别什么情况下用实例变量?什么情况下用类变量?答: 一般静态的数据和方法使用类变量5.子类能继承超类的那些成员变量和方法?超类子类PrivateNo(默认)YesProtectYesPublicYes6.子类在什么情况下能隐藏超类的成员变量和方法?答:重写7.在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?答:不应许,子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同例如:class R{ int add(){ int a=2; return a++; }}public class RR extends R{ float add(){ float a=2.0; return a; } public static void main(String[] args){ System.out.println(add()); }}8.试说出对象、类、继承和多态性的概念。
9.略10.接口与抽象类的区别答:抽象类:what can I do? 接口:I can do it.例子:就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现) 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))11.指出Applet的程序结构及各方法的作用答:Java API 的 Applet 类为您提供设计 applet 程序外观并管理 其动作时所需要的支持该类提供一种叫做 Panel(面板)的图形 用户界面(GUI)组件以及大量方法要创建一个 applet 程序,就需要扩展该 Applet 类(或创建子类)并实现您所需要的外观和动作12.以下程序的错误:Takecare.java:5: 无法从静态上下文中引用非静态 变量 a float c = a + b; ^13.试声明一个复数类Complex。
解析://样例大家扩展class Complex{ double a,b; Complex(){} Complex(double a, double b){ this.a = a; this.b = b; } public String Print(){ String result= new String(this.a + (b>0?"+":"") + (b!=0?this.b + "i" :"")); return result; } public Complex add(Complex val){ Complex result = new Complex(); result.a = this.a + val.a; result.b = this.b + val.b; return result; }}public class TestComplex{ public static void main(String[] args){ Complex complex1 = new Complex(1.0,2.0); Complex complex2 = new Complex(2.0,3.0); System.out.println(complex1.add(complex2).Print()); }}第四章数组和字符串1.举例说明如何声明、创建初始化数组。