第一章习题及思考题1、Java程序是由什么组成的?一个程序中必须有public类吗?Java源文件的命名规则是怎样的?2、怎样区分应用程序和小应用程序?应用程序的主类和小应用程序的主类必须用public修饰吗?3、开发与运行Java程序需要经过哪些主要步骤和过程?4、安装JDK之后如何设置JDK系统的PATH,CLASSPATH?他们的作用是什么?5、Java语言特点是什么?6、简述面向过程问题求解和面向对象问题求解的异同。
试列举出面向对象和面向过程的编程语言各两种。
第二章习题及思考题1. 试分析基本数据类型和引用数据类型的基本特点?2. 请使用异或运算符^, 实现两个整数的交换。
3. 下列哪个是合法的标识符:( )。
A、a=bB、_HelloC、2ndD、Chong qing4. 下列哪些是合法的标识符()。
A、newB、classC、intD、const25. 如果定义有变量double d1, d2=4.0则下列说法正确的是:A、变量d1,d2均初始化为4.0B、变量d1没有初始化,d2初始化为4.0C、变量d1,d2均未初始化D、变量d2没有初始化,d1初始化为4.06. 判断题:所有的变量在使用前都必须进行初始化。
()7. 内部数据类型byte的取值范围是:( )A、0~65, 535B、(-128)~127C、(-32,768)~32,767D、(-256)~2558. 下列哪些是不能通过编译的语句:()A、int i = 32;B、float f = 45.0;C、double d = 45.0;D、char a=‘c’;9. 判断题:Java中数据类型的长度与具体使用的机器相关。
()10. 如果定义有double x;float y;int m,则表达式x*y-m的类型为():A、doubleB、floatC、intD、short11. 如果定义有short s;byte b;char c,则表达式s*b+c的类型为():A、charB、shortC、intD、byte12. 已知int i= 2147483647; ++i;则i的值等于多少()A -2147483648B 2147483647C 214748364813. 已知byte i= 127; ++i;则i的值等于多少()A -128B 127C 12814. 已知byte i= 127; i=i+1;这两行语句能否编译成功?()15. 执行以下程序段int a=5,b; b=++a*3后b的值为:()A、17B、18C、16D、1516. 如果x=3,y=5,则表达式x|y的值为:()A、15B、8C、1D、717. 如果int a=3,b=2,则执行a*=b+8后a的值为:()A、20B、14C、30D、1618. 若所用变量都已正确定义,以下选项中,非法的表达式是:()A、a!=4||b==1B、'a'%3C、'a'=1/2D、'A'+3219. 设有定义语句int a[]={1,1,2}; 则以下对此语句的叙述错误的是( )。
A、定义了一个名为a的一维数组B、a数组有3个元素C、a数组的下标为1~3D、数组中的每个元素是整型20. 以下数组初始化形式正确的是:( )A、int t1[][]={{1,2},{3,4},{5,6}}B、int t2[][]={1,2,3,4,5,6}C、int t3[3][2]={1,2,3,4,5,6}D、int t4[][];t4={1,2,3,4,5,6}第三章习题及思考题1、编写一个程序,用选择法对数组a[]={20,10,55,40,30,70,60,80,90,100}进行从大到小的排序2、求两个整数的最大公约数3、请打印出如下九九乘法表* | 1 2 3 4 5 6 7 8 9-------|------------------------------------1 | 12 | 2 43 | 3 6 94 | 4 8 12 165 | 5 10 15 20 256 | 6 12 18 24 30 367 | 7 14 21 28 35 42 498 | 8 16 24 32 40 48 56 649 | 9 18 27 36 45 54 63 72 814、求一元二次方程ax2+bx+c=0的根,要求a、b、c从控制台输入。
5、求前40个Fibonacci数列。
Fibonacci数列:1,1,2,3,5,8,13,21,34,…从数列看到:F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n≥3)6、已知公鸡5元1只,母鸡3元一只,小鸡1元3只,要求用100元刚好买100只鸡,问有多少种采购方案。
7、判断一个字符串是否是回文,例如“rotor“反转之后还是”rotor“,所以是回文。
需查阅String类的一些方法。
8、求2-1000内的所有素数9、在一个循环中使用break,continue和return有什么不同?10、结构化程序设计有哪三种流程?他们分别对应Java中那些语句第四章习题及思考题1.什么是类?什么是对象?对象和类是什么关系?2、什么是方法?方法的结构是怎样的?设计方法应考虑哪些因素?3.创建一个有两个方法的类,其中第一个方法两次调用第二个方法,第一次不使用this,第二个使用this。
4、创建一个类,该类还有int和char类型的成员变量且未被初始化,然后编程输出这些成员变量的值,查看java是否执行了默认的初始化操作。
5、创建一个类,该类含有的成员变量和成员方法,创建一个该类的对象,察看当时图访问这些成员时,编译程序会给出那些信息(注意:在同一目录下的类都属于一个默认的包)。
6、下面给出了一个矩形类Rectangle,其中含有多个构造方法。
上机编译并运行此程序,观察运行结果,体会其中不同构造方法的设计和使用。
import java.io.*;class Rectangle //矩形类{private int width; //矩形的宽度private int length; //矩形的长度Rectangle() //矩形的不带参数的构造函数,缺省的给出长(30)和宽(20){length=30;width=20;}Rectangle(int l,int w) //矩形的带参数的构造函数{length=l;width=w;}Rectangle(Rectangle r) //此构造方法以另一个Rectangle作为参数{width=r.width(); //通过对象调用函数并附值给相应变量length=r.length();}int width() //返回宽度{return width;}int length() //返回长度return length;}}public class CRctngle{public static void main (String args[ ]){Rectangle x1=new Rectangle(); //声明类的对象并实例化Rectangle x2=new Rectangle(50,40); //声明类的对象并初始化Rectangle x3=new Rectangle(x1);System.out.println(x1.length());System.out.println(x1.width());System.out.println(x2.length());System.out.println(x2.width());System.out.println(x3.length());System.out.println(x3.width());}}运行结果:3020504030207、下面给出了一个计算阶乘的类Fact和使用该类计算阶乘的程序Check1。
编译并运行该程序,观察运行结果,体会方法的参数的传递和返回值的用法。
在调用时改变参数的个数和类型,看看编译时会得到什么信息。
class Fact{float fact (int n) //定义计算n!的方法{int i;float x =1;for(i=1;i<n;i++)x=x*n;return x;}}public class Check1{public static void main (String args[ ])Fact x =new Fact( );System.out.println(x.fact(10)); //计算10!System.out.println(x.fact(15)); //计算15!}}运行结果:1.0E92.91929271E168、编译并运行下面的程序,观察分析运行结果,体会程序中super和this的用法,进一步理解变量隐藏和方法重写的概念。
import java.io.*;class SuperClss //定义父类{int x;SuperClss( ) //父类的构造方法{x=10;}void doClss( ){System.out.println("SuperClss.doClass()");}}class SubClss extends SuperClss //定义子类{int x;SubClss( ) //子类的构造方法{super( ) ; //调用父类的构造方法x =100;}void doClss( ) //重写父类的doClss方法{System.out.println("SubClss.doClss()");}void doDemo( ) //演示super和this的方法{int x;x=1000;super.doClss( ); //调用父类的doClss方法doClss( ); //调用本类的doClss方法System.out.println("super.x="+super.x); //父类的xSystem.out.println("this.x="+this.x); //本类的xSystem.out.println("x="+x); //本方法的x}}public class SuperDemo{public static void main(String args[ ]) //主方法{SubClss s = new SubClss();s.doDemo();}}运行结果:SuperClss.doClass()SubClss.doClss()super.x=10this.x=100x=10009、编译并运行下面的程序,分析运行结果,体会其中方法重载的用法,进一步理解方法重载的概念。