Java語言程序設(shè)計劉衛(wèi)國課后參考答案_第1頁
Java語言程序設(shè)計劉衛(wèi)國課后參考答案_第2頁
Java語言程序設(shè)計劉衛(wèi)國課后參考答案_第3頁
Java語言程序設(shè)計劉衛(wèi)國課后參考答案_第4頁
Java語言程序設(shè)計劉衛(wèi)國課后參考答案_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第1章概論習題1一、選擇題1.Java語言的許多特點中,下列()特點是C++語言所不具備的。BA.高性能B.跨平臺C.面向?qū)ο驞.有類庫2.Java語言中,負責并發(fā)管理的機制是()。AA.多線程

B.虛擬機C.字節(jié)碼

D.垃圾回收3.在Java語言中,不允許使用指針體現(xiàn)出的Java特性是()。DA.可移植B.解釋執(zhí)行C.健壯性D.安全性4.下列描述中,錯誤的是()。AA.Java要求編程者管理內(nèi)存B.Java的安全性體現(xiàn)在多個層次上C.Applet程序要求在支持Java的瀏覽器上運行D.Java有多線程機制5.Java為移動設(shè)備提供的平臺是()。BA.JavaSE

B.JavaMEC.JavaEE

D.JDK66.下列敘述中正確的是()。CA.Java源文件名與程序類名不允許相同B.Java源文件中public類的數(shù)目不限C.對Java源程序進行編譯時,必須寫出該源文件的文件名,包括擴展名.javaD.對Java源程序進行編譯后,生成的文件是二進制可執(zhí)行文件。7.Java源文件中最多只能有一個()類,其他類的個數(shù)不限。BA.a(chǎn)bstractB.publicC.finalD.interface8.Java源文件和編譯后的文件擴展名分別為()。BA..class和.javaB..java和.classC..class和.classD..java和.java9.一個可以獨立運行的Java應(yīng)用程序()。DA.可以有一個或多個main方法B.最多只能有兩個main方法C.可以有一個或零個main方法D.只能有一個main方法10.Java程序的執(zhí)行過程中用到一套JDK工具,其中javac是指()。CA.Java文檔生成器B.Java解釋器C.Java編譯器D.Java類分解器二、填空題1.Java語言是對C++語言進行改進并重新設(shè)計的結(jié)果。2.Java源程序文件的擴展名是.java,Java源程序經(jīng)編譯后生成字節(jié)碼文件,其擴展名是.class。3.Applet程序是能夠嵌入HTML格式的文件中,并能在瀏覽器中運行的Java程序。4.類是Java程序中基本的結(jié)構(gòu)單位。5.在Java中,負責對字節(jié)代碼解釋執(zhí)行的是虛擬機。6.使用記事本或其他編輯軟件建立了Java程序文件jasmine.java,對源程序文件進行編譯時,在DOS命令窗口將當前文件夾轉(zhuǎn)換到Java源程序所在的文件夾,然后輸入javacjasmine.java形式的命令進行程序編譯。執(zhí)行程序時,在同樣的命令提示符下輸入javajasmine形式的命令執(zhí)行程序。完成了程序的開發(fā),查看相應(yīng)文件夾,其中應(yīng)該具有兩個文件,分別是jasmine.java和jasmine.class。三、問答題1.Java語言有哪些特點?答:面向?qū)ο?,可移植性,安全性,并發(fā)性,可視化和程序的健壯性等。2.比較JavaSE、JavaEE和JavaME的特點。答:JavaSE是Java各應(yīng)用平臺的基礎(chǔ),可分為4個主要的部分,即Java虛擬機(JVM)、Java運行環(huán)境(JRE)、Java開發(fā)工具(JDK)及其API、Java語言等。JavaEE以JavaSE為基礎(chǔ),面向分布式、多層式、組件式和Web化應(yīng)用程序的開發(fā),定義了一系列的服務(wù)、API和協(xié)議。整個JavaEE的體系是相當龐大的,常用的技術(shù)有:JSP、Servlet、EnterpriseJavaBeans(EJB)、JavaRemoteMethodInvocation(RMI)等,建議讀者先奠定JavaSE基礎(chǔ)后,再深入學(xué)習。JavaME是面向小型數(shù)字設(shè)備(如手機、PDA、股票機等)開發(fā)及部署的應(yīng)用程序平臺。目前,已有越來越多的手持設(shè)備支持JavaME所開發(fā)出來的程序,如Java游戲、股票相關(guān)程序、記事程序等。3.簡述Java的運行過程。答:第一步,操作系統(tǒng)解析我們輸入的javaxxx命令,根據(jù)PATH中所配置的jrd路徑找的其bin目錄下的java.exe程序(這個程序是用c語言寫的,源碼在jdk的src文件中的laucher目錄下),然后再初始化一些java參數(shù)(比如classpath、虛擬機參數(shù)等)。第二步,java.exe程序根據(jù)上一步讀入的虛擬機參數(shù),分配內(nèi)存并啟動jre/bin目錄下client目錄或者server目錄(哪個目錄取決于第一步中的虛擬機參數(shù))下的jvm.dll,java虛擬機開始啟動。第三步,java虛擬機初始化內(nèi)存,產(chǎn)生bootstrapclassloader,這個類加載器負責加載javaAPI(jvm+javaAPI被稱為java運行時),其實這些jar包主要分布在jre/lib下。第四步,bootstrapclassloader載入完javaAPI后,還會負責載入ExtClassLoader并生成一個實例,它繼承于ClassLoader類,負責載入jre/lib/ext下的jar包(所以有時候需要把servlet.jar包加進去,相當于一個不配置在classpath中就可以默認訪問的公共jar目錄),到這里,java虛擬機默認加載類工作完成。第五步:java虛擬機找到我們指定的Class,加載這個類(所謂自定義類加載,是指我們自己寫的java類、以及我們引入的一些第三方j(luò)ar包的加載方式,只有代碼中運行到類的時候才回去加載,我們可以實現(xiàn)自己的ClassLoader類,用來加載我們自己的類,如果我們沒有實現(xiàn)自己的類加載器,上面說的ExtClassLoader會默認載入AppClassLoader并生成一個實例,由這個類加載器來進行加載),然后找到這個類的main方法,啟動程序。4.一個Java源程序中可以有多個公共類(主類)嗎?可以有多個類嗎?若有多個類時,程序文件名是什么?答:不可以有多個主類,可以有多個類,若多個類存在的時候程序文件名為公共類的名字。5.在安裝JDK后,還要配置環(huán)境變量Path和Classpath,其目的是什么?答:運行路徑path變量記錄的是各個程序所在的路徑,系統(tǒng)根據(jù)這個變量的值來查找運行程序(各種命令),使得在運行的時候不用輸入全路徑名。類路徑classpath環(huán)境變量通常用來記錄當前路徑和java類庫所在的路徑。在類庫中包含java系統(tǒng)所提供的各種軟件包,其中包括各個類和接口等第2章程序的數(shù)據(jù)描述習題2一、選擇題1.下列字符序列中,不屬于Java語言關(guān)鍵字的是(C)。A.tryB.thisC.nativeD.goto2.下列字符序列中,合法的Java程序標識符是(A)。A._studentB.publicC.123numD.GoodLuck3.下列數(shù)中不是Java正確的整數(shù)表示的是(C)。A.34B.0x34C.34HD.0344.下面的類型中不是Java整數(shù)類型的是(C)。A.longB.shortC.unsignedD.byte5.下面的操作中正確的是(C)。A.intx=3.1415926;B.doubley=236,000;C.Stringstr="good";D.booleantruth=1;6.對于Java語言的運算符,下面說法正確的是(C)。A.具有相同優(yōu)先級的運算符,計算順序一律是從右到左。B.關(guān)系運算符的優(yōu)先級要高于算術(shù)運算符。C.圓括號具有最高優(yōu)先級。D.Java語言的運算符不具有優(yōu)先級的區(qū)別。7.下列表達式中運算結(jié)果為32的是(C)。A.2^6B.(8>>2)<<4C.2>>6D.(2<<1)*(32>>3)8.下面的運算符中屬于位運算符的是(A)。A.&B.>=C.&&D.++9.下面對字符串正確定義的是(C)。A.Strings1=null;B.Strings2='null';C.Strings3=(String)'abc';D.Strings4=(String)'\uface';10.假設(shè)有:Stringa=”A”;charb=’A’;intc=65;下面選項中正確的是(A)。A.if(c=b){System.out.print("Equal");}B.if(a==b){System.out.print("Equal");}C.if(a==c){System.out.print("Equal");}D.if(c==b){System.out.print("Equal");}11.下面創(chuàng)建數(shù)組的語句中錯誤的是(C)。A.int[]a={100,200,300,400,500};B.charb[4]={'x','y','z'};C.char[]b=newchar[];D.int[][]b=newint[2][2];12.Java中定義數(shù)組名為abc,下面可以得到數(shù)組元素個數(shù)的是(B)。A.a(chǎn)bc.length()B.a(chǎn)bc.lengthC.len(abc)D.ubound(abc)二、填空題1.Java的數(shù)據(jù)類型可分為基本數(shù)據(jù)類型、引用類型兩大類。2.Java中使用的字符編碼為Unicode,它以16位二進制數(shù)來表示一個字符。3.Java是一種強類型語言,凡是使用到的變量,在編譯之前一定要被顯示的聲明。4.在Java中對于浮點型的值,如果沒有特別指明,默認是double類型。5.Java語言中使用StringBuffer類來表示多個字符,表示方式是用雙引號把要表示的字符串引起來,字符串里面的字符數(shù)量可以使任意多個的6.在Java語言中,數(shù)組的下標都是從0開始的,數(shù)組一旦被創(chuàng)建,則在內(nèi)存中占用連續(xù)的內(nèi)存地址。三、問答題1.Java語言標識符的書寫有哪些規(guī)則?在下面的標識符中,哪些是不正確的,并說明原因:here,_there,this,that,it,2to1,_it。答:合法的Java標識符必須遵循以下的命名規(guī)則:(1)只能由字母、下劃線、數(shù)字和美元符號組成,不能包含其他符號,例如空格以及#、%等特殊符號。(2)只能以字母、下劃線和美元符號作為標識符的第一個字符。(3)不能與關(guān)鍵字同名,即標識符內(nèi)可以包含關(guān)鍵字,但不能與關(guān)鍵字完全一樣。(4)嚴格區(qū)分大小寫,但長度沒有限制。其中合法的標識符為:here,_there,_it,that,it;不合法的標識符為:this,關(guān)鍵字,2tol,數(shù)字不能作為關(guān)鍵字的開頭。2.int和Integer有什么區(qū)別?String和StringBuffer有什么區(qū)別?&和&&有什么區(qū)別?答:int是基本數(shù)據(jù)類,Integer是其包裝類。String類對象為不可變對象,一旦你修改了String對象的值,隱性重新創(chuàng)建了一個新的對象,釋放原String對象,StringBuffer類對象為可修改對象,可以通過append()方法來修改值,,在者String類對象的性能遠不如StringBuffer類。&是位運算符,就是兩個二進制位同時等于1,結(jié)果才等于1,&&是關(guān)系運算符,就是兩個值同時為真,結(jié)果才為真3.Java的整數(shù)類型有哪幾種?各自的取值范圍是多大?答:Java語言有4種整型類型,分別用關(guān)鍵字int、long、short和byte聲明對應(yīng)類型的整型變量。int取值范圍為-231~231-1。long其取值范圍為-263~263-1。short其取值范圍為-215~215-1,byte其取值范圍為-27~27-1。4.Java的字符類型如何表示?答:Java語言使用16位Unicode編碼來表示字符,共有65535種字符。Java的字符型數(shù)據(jù)在計算機內(nèi)存中占2個字節(jié),字符型數(shù)據(jù)無符號,其取值范圍是0~216。Java中表示字符的用char關(guān)鍵字表示,在Java中負責字符操作的還有字符串,常用的字符串類有String類和StringBuffer類。5.Java中有兩個關(guān)鍵字:void和null,它們有什么區(qū)別?答:null表示對象或者變量的值為空,void表示函數(shù)沒有返回值。6.數(shù)組有沒有l(wèi)ength()這個方法?String字符串有沒有l(wèi)ength()這個方法?答:數(shù)組沒有l(wèi)ength()方法,只有String字符串有l(wèi)ength()方法。7.看以下代碼:doublex1=100.3;doublex2=1003/10;System.out.println(x1==x2);//輸出false看起來x1與x2是相等的,為什么程序運行時會輸出一個讓人意外的結(jié)果:false?8.看以下代碼:intx1,x2,y=10,z=20;x1=y=z;x2=y==z;System.out.println(x1);//輸出20System.out.println(x2);//輸出truex1與x2的值為什么不同?“=”與“==”的區(qū)別是什么?答:x1的值是z賦值的值20,x2的值是先講y賦值給x2再進行判斷x2和z是否相等?!?”是賦值的符號,“==”是判斷兩個值是否相等。四、程序分析題1.寫出下列程序的執(zhí)行結(jié)果。publicclassMain{publicstaticvoidmain(String[]args){System.out.println("IntegerArithmetic");inta=1+1;intb=a*2;intc=b/3;intd=c-a;System.out.println("a="+a);System.out.println("b="+b);System.out.println("c="+c);System.out.println("d="+d);System.out.println("\nFloatingPointArithmetic");floatfa=1+1;floatfb=fa*2;floatfc=fb/3;floatfd=fc-fa;System.out.println("fa="+fa);System.out.println("fb="+fb);System.out.println("fc="+fc);System.out.println("fd="+fd);}}答:程序執(zhí)行結(jié)果為:IntegerArithmetica=2b=4c=1d=-1FloatingPointArithmeticfa=2.0fb=4.0fc=1.3333334fd=-0.66666662.寫出下列程序的執(zhí)行結(jié)果。publicclassTest{publicstaticvoidmain(String[]args){intx1=5,y1;intx2=5,y2;y1=++x1;y2=x2++;System.out.println("x1="+x1);System.out.println("y1="+y1);System.out.println("x2="+x2);System.out.println("y2="+y2);intx=5,y;y=++x;}}答:程序運行結(jié)果為:x1=6y1=6x2=6y2=53.寫出下列程序的執(zhí)行結(jié)果。publicclassTest{publicstaticvoidmain(String[]args){inti=(5>3)?6:7;System.out.println("thei="+i);}}答:程序運行結(jié)果為:thei=64.寫出下列程序的執(zhí)行結(jié)果。classString1{publicstaticvoidmain(String[]args){Stringstr[]={"one","two","three"};for(intn=0;n<str.length;n++)System.out.println("str["+n+"]:"+str[n]);}}答:程序運行結(jié)果為:str[0]:onestr[1]:twostr[2]:three5.寫出下列程序的執(zhí)行結(jié)果。classArray{publicstaticvoidmain(String[]args){intmonth_days[]={31,28,31,30,31,30,31,30,31,30,31,30};System.out.println("Junehas"+month_days[6]+"days.");}}答:程序結(jié)果為:Junehas31days.五、程序設(shè)計題1.編寫輸出師生早上相互問好的程序。答:publicclasssayHello{publicstaticvoidmain(String[]args){System.out.println("Hello,teacher!");System.out.println("Hello,student!");}}2.用單目運算符計算正整數(shù)5兩種自減后再減1的結(jié)果。答:publicclasscoumpute{publicstaticvoidmain(String[]args){intn=5;n--;n-=1;n=n-1;System.out.println(n);}}3.求下列算術(shù)表達式的值并上機驗證:inta=20,b=3;doublef=20,g=3;(1)a/b、a%b、f/g。(2)(b--)*2、a++/--b。答:(1)6,2,6.666666666666667(2)6,204.求下列關(guān)系表達式或邏輯表達式的值并上機驗證:intx=6,y=7,z=8;(1)x==x++、x==++x、x!=y。(2)y==z&&x<y、x>y||!(x<y)、x>10&&x++<(y+=10)。答:(1)true,false,true(2)false5.編寫一個程序,要求能夠判斷一個字符串中是否包含中文,并計算出包含有幾個漢字。設(shè)字符串Stringstr=”Sun公司的Java程序設(shè)計語言!”。答:程序源代碼為:publicclassChineseCount{publicstaticvoidmain(String[]args){Stringstr="Sun公司的Java程序設(shè)計語言!";char[]charArray=str.toCharArray();intcount=0;for(inti=0;i<charArray.length;i++){if(charArray[i]>=0x4e00&&charArray[i]<=0x9fbb){count++;}}System.out.println("當前字符的中文字符有"+count+"個。");}}第3章程序控制結(jié)構(gòu)習題3一、選擇題1.下面選項不是表達式語句的是(D)。A.c++;B.a=b+c;C.a+b;D.if(x==0)break;2.下面語句中不是循環(huán)語句的是(C)。A.for語句B.while語句C.switch語句D.do-while語句3.下面選項符合Java語言語法的語句是(B)。A.instb=3;inta=6;B.inta=4;longb=2;C.doublea=c*/.6;D.inta=9,b=1,c=8;a=b+c=a-b+c;4.執(zhí)行下列程序,輸出結(jié)果為(D)。publicclassB{publicstaticvoidmain(String[]args){intx=4;doubley=10.5f;floatz=(float)(++x*y);System.out.println(z);}}A.40.0B.42.0C.52.0D.52.55.下面不是合法的條件語句的一項是(B)。A.if(a>b){…}B.if(a=1){…}C.if(a>b&&b>c){…}D.if(3>2){…}6.以下說法正確的是(C)。inti=10,t=0;do{t=i++;}while(t<=10);A.一次都不執(zhí)行B.執(zhí)行一次C.執(zhí)行兩次D.無限次執(zhí)行二、填空題1.在選擇結(jié)構(gòu)中break語句用于跳出循環(huán)語句。2.條件語句控制程序的流程是通過判斷條件表達式來進行的。3.Java的3種循環(huán)語句是for、while、do-while。4.在Java程序中,do-while循環(huán)語句塊至少被執(zhí)行1次。5.在for循環(huán)語句的循環(huán)體部分可以使用語句進行多個操作。三、問答題1.算法有哪些基本特征?答案:輸入、輸出、有窮性、確定性、可行性。2.簡述while語句與do-while語句的區(qū)別。答案:while先做條件判斷,然后執(zhí)行循環(huán)體;do-while先執(zhí)行循環(huán)體,再做條件判斷。3.switch語句的default語句位置是固定的嗎?答案:switch里面跟位置無關(guān),前提是每個case都加了break。4.Java對switch語句的開關(guān)常量有什么要求?答案:變量類型只能為byte、short、int或者char。5.試比較break和continue語句的區(qū)別?答案:continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行;break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。四、程序分析題1.寫出下列程序的輸出的結(jié)果。publicclassTest1{publicstaticvoidmain(String[]args){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<3;j++){if(j%2==1)continue;x++;}x++;}System.out.printf("x=%d",x);}}輸出結(jié)果為: x=82.寫出執(zhí)行下列代碼之后輸出的結(jié)果。publicclassTest2{publicstaticvoidmain(String[]args){intsum=2,a=3,b=5,c=7;while(a<b){while(b!=c){sum+=b;b++;}b=4;a++;}System.out.println(sum);}}輸出結(jié)果為:133.分析下列程序的功能。publicclassTest3{publicstaticvoidmain(String[]args){inti,j,k,a[]={3,6,19,34},b[]={1,5,20,30};intc[]=newint[a.length+b.length];i=j=k=0;while(i<a.length&&j<b.length)if(a[i]<b[j])c[k++]=a[i++];elsec[k++]=b[j++];while(i<a.length)c[k++]=a[i++];while(j<b.length)c[k++]=b[j++];}}答案:合并兩個從小到大排序的數(shù)組,結(jié)果也是從小到大的順序。4.分析下列程序的功能。publicclassTest4{publicstaticvoidmain(String[]args){Stringx="programming",y="Front";inti=0;while(i<x.length()&&i<y.length()){if(x.charAt(i)==y.charAt(i))System.out.println(x.charAt(i));i++;}}}答案:查找位置相同字符相同的所有字符。5.分析下列程序的功能。publicclassTest5{publicstaticvoidmain(String[]args){inti,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)System.out.print("");for(k=0;k<=2*i;k++)System.out.print("*");System.out.println();}for(i=0;i<=2;i++){for(j=0;j<=i;j++)System.out.print("");for(k=0;k<=4-2*i;k++)System.out.print("*");System.out.println();}}}打印如下圖形:*************************五、程序填空題1.以下程序用“輾轉(zhuǎn)相除法”求兩個正整數(shù)的最大公約數(shù)。算法描述如下:(1)分別用m,n保存這兩個整數(shù),確保m保存較大數(shù)。(2)令r等于m除n的余數(shù)。(3)若m能被n整除,則執(zhí)行步驟(7),否則執(zhí)行步驟(4)。(4)令m等于n,而r做為新的除數(shù)。(5)求出新的余數(shù)r(6)重復(fù)步驟(3)(7)輸出n,n即為最大公約數(shù)。請根據(jù)算法的描述,補全代碼。importjava.util.*;publicclassGreatestDivisor{publicstaticvoidmain(String[]args){intm,n,t,r;Scannerinput=newScanner(System.in);m=input.nextInt();n=input.nextInt();if(m<n){t=n;n=m;m=t;}r=m%n;while(r>0){m=n;n=r;r=m%b;}System.out.println(n);}}2.求出200以內(nèi)可被17整除的最大正整數(shù),請?zhí)羁?。publicclassMaxInt{publicstaticvoidmain(String[]args){inti;for(inti=200;i>0;i--)if(i%17==0)break;System.out.println(i);}}3.以下程序打印下列的圖形,請?zhí)羁铡?#########publicclassPrintGraphics{ publicstaticvoidmain(String[]args){inti,j;for(i=1;i<=4;i++){for(j=1;j<=i;j++)System.out.print("#");System.out.println();}}}4.下列程序?qū)崿F(xiàn)查找某一字符串是否包含有“hello”,請?zhí)羁?。publicclassFindChar{publicstaticvoidmain(String[]args){Strings="helloJava";inta=s.indexOf(“hello”);//a位找到hello的下標,找不到則返回-1if(a>=0)System.out.print("包含字符串hello");elseSystem.out.print("不包含字符串hello");}}5.輸入一組數(shù),并求出該數(shù)組中的最大數(shù)和最小數(shù),請?zhí)羁铡mportjava.util.*;publicclassArrayMaxMin{publicstaticvoidmain(String[]args){int[]a=newint[10];inti,max,min;Scannerinput=newScanner(System.in);for(i=0;i<a.length;i++)a[i]=input.nextInt();max=a[0],min=a[0];for(i=1;i<a.length;i++){if(max<a[i])max=a[i];if(min>a[i])min=a[i];}System.out.printf("最大數(shù)是:%d,最小數(shù)是:%d\n",max,min);}}六、程序設(shè)計題1.百馬百擔問題:100匹馬馱100擔貨物,其中大馬馱3擔貨,中馬馱2擔,兩匹小馬馱1擔。問共有大、中、小馬各多少匹?編程實現(xiàn)求解的算法。publicclasstest_3_6_1{publicstaticvoidmain(String[]args){inthb,hm,hl;//大馬,中馬,小馬for(hb=0;hb<100;++hb)//大馬范圍0-99for(hl=0;hl<100;hl+=2)//小馬范圍0-99{hm=100-hb-hl;//中馬if(3*hb+2*hm+hl/2==100&&hm>0)//100擔貨且保證中馬范圍大于0{System.out.println("hb="+hb+",hm="+hm+",hl="+hl);//輸出}}}}2.有一函數(shù):x(x<0)y=3x-2(0≤x<10)4x(x≥10)編寫一程序,對輸入的x值,求出對應(yīng)的y值。importjava.util.Scanner;publicclasstest_3_6_2{publicstaticvoidmain(String[]args){ doublex=0.0,y=0.0;Scannerinput=newScanner(System.in); while(input.hasNextDouble()){ x=in.nextDouble(); if(x<0) y=x;elsif(x>=10) y=4*x;else y=3*x-2; System.out.println("x="+x+",y="+y); }}}3.求水仙花數(shù):水仙花數(shù)是這樣的一個三位正整數(shù),此數(shù)各數(shù)字的立方之和恰好等于該數(shù)之值。例如153就是一個水仙花數(shù):153=13+53+33。編程找出所有這樣的水仙花數(shù)并輸出到屏幕。publicclasstest_3_6_3{ publicstaticvoidmain(String[]args){ inthundred,ten,bits; System.out.println("水仙花數(shù)為:"); for(inti=100;i<=999;i++){ hundred=i/100;ten=i%100/10; bits=i%10; if(i==hundred*hundred*hundred+ten*ten*ten+bits*bits*bits){ System.out.print(i+""); } } }}4.編寫程序,計算1+1/1!+1/2!+1/3!+…+1/n!的和。importjava.util.Scanner;publicclasstest_3_6_4{publicstaticvoidmain(Stringargs[]){intri,repeat;doubles=1.0,t=1.0;Scannerin=newScanner(System.in);repeat=in.nextInt();if(repeat<0)System.out.println("pleaseinputanumber>0");else{for(ri=1;ri<=repeat;ri++){t=t/ri;s+=t;}System.out.println("result="+s);}}}5.猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個,第二天早上吃了一半又多吃了一個。以后每天都是如此,當?shù)?0天想吃時,就只剩下一個了。問第一天共摘了多少個?publicclasstest_3_6_5{publicstaticvoidmain(Stringargs[]){intnum=1;

for(inti=9;i>0;i--){

num=num+1;

num=num*2;

}

System.out.println(num);}}6.打印九九乘法口訣表。publicclasstest_3_6_6{publicstaticvoidmain(String[]args){for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){System.out.print(j+"*"+i+"="+j*i+"\t");if(j==i){System.out.println();}}}}}7.給一段文字加密,加密方式為將第1個字母變成第26個字母,第i個字母變成第(26-i+1)個字母,非字母字符不變,即:A→Z,a→zB→Y,b→y……Z→A,z→a要求編程加密輸入的字符串并輸出加密后的字符串。importjava.util.Scanner;publicclasstest_3_6_7{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);Stringstr=in.next();StringBuffers=newStringBuffer();for(inti=0;i<str.length();i++){if(Character.isLetter(str.charAt(i))){if(str.charAt(i)=='z'||str.charAt(i)=='Z')s.append((char)(str.charAt(i)-25));elses.append((char)(str.charAt(i)+1));}elses.append(str.charAt(i));}System.out.println(s);}}第4章類與對象習題4一、選擇題1.具有屬性和行為或方法的實體是(D)。A.類B.方法C.構(gòu)造方法D.對象2.下面類的聲明中正確的是(B)。A.protectedprivateTest{…}B.publicabstractclassTest{…}C.a(chǎn)bstractfinalclassTest{…}D.a(chǎn)bstractprivateTest;3.在(C)情況下,系統(tǒng)會提供一個默認的構(gòu)造方法。A.在定義任何類的時候B.在至少定義了一個構(gòu)造方法的時候C.當定義的類沒有其他構(gòu)造方法的時候D.在定義抽象類的時候4.下面對于Test類的構(gòu)造方法中正確的是(C)。A.publicvoidTest(){…}B.publicstaticTest(){…}C.publicTest(){…}D.publicTest1(){…}5.對象使用時,下面描述錯誤的是(B)。A.通過“.”運算符調(diào)用成員變量和方法。B.通過成員變量的訪問權(quán)限設(shè)定限制自身對這些變量方法的調(diào)用。C.將一個對象申明為類的成員時,必須在使用前為其分配內(nèi)存。D.在方法中使用對象作為參數(shù)時,采用引用調(diào)用。6.用來指向當前對象或類實例的關(guān)鍵字是(A)。A.thisB.theC.thatD.for7.Java編程所必須的默認引用包為(B)。A.java.sysB.java.langC.java.newD.java.util二、填空題1.對象的狀態(tài)和行為是對象的主要屬性,前者對應(yīng)類的屬性,行為又稱為對象的操作,對應(yīng)類的方法。2.類是組成Java程序的基本要素,它的實現(xiàn)包括屬性和方法兩部分。3.在Java的程序設(shè)計中,使用關(guān)鍵字new創(chuàng)建對象時,系統(tǒng)會自動調(diào)用對對象進行初始化。4.用static修飾符修飾的方法稱為類方法或靜態(tài)方法,它是屬于整個類的方法法,它不需要實例化便可以被訪問。5.為了能使用Java中已提供的類,需要用package語句來引入所需要的類。三、問答題1.什么是對象?什么是類?請舉例說明。答:對象是對客觀事物的抽象,類是對對象的抽象。比如學(xué)校是類,中南大學(xué)是對象。2.類定義的基本格式是什么?有哪些組成要素?各起什么作用?答:訪問修飾符class類名{方法和屬性}屬性用于定義該類或該類的實例所包含的數(shù)據(jù),方法則用于定義該類或該類的實例的行為特征或功能實現(xiàn)。訪問修飾符在package的中訪問限制3.如何創(chuàng)建一個對象?對象的成員如何表示?答:使用new來創(chuàng)建,使用’.’來訪問4.什么是構(gòu)造方法?有哪兩種形式?各有什么特點?答:構(gòu)造方法是一種特殊的方法,與一般的方法不同是構(gòu)造方法的名字必須與定義它的類名完全相同,沒有返回類型,甚至連void也沒有。兩種形式帶參數(shù)(特點是默認構(gòu)造方法)和不帶參數(shù)(調(diào)用時須帶參數(shù))5.類變量與實例變量有何不同?答:類變量也叫靜態(tài)變量,也就是在變量前加了static

的變量;實例變量也叫對象變量,即沒加static的變量;區(qū)別在于:類變量和實例變量的區(qū)別在于:類變量是所有對象共有,其中一個對象將它值改變,其他對象得到的就是改變后的結(jié)果;而實例變量則屬對象私有,某一個對象將其值改變,不影響其他對象。6.類方法與實例方法有何不同?答:類方法是屬于整個類,而不屬于某個對象。類方法只能訪問類成員變量,不能訪問實例變量,而實例方法可以訪問類成員變量和實例變量。類方法的調(diào)用可以通過類名.類方法和對象.類方法,而實例方法只能通過對象.實例方法訪問。類方法只能訪問類方法,而實例方法可以訪問類方法和實例方法。類方法不能被覆蓋,實例方法可以被覆蓋。7.簡述類(Class)、類庫(ClassLibrary)、包(Package)和Jar文件這4個概念間的聯(lián)系。答:Jar中包含了包,包中包含了類庫,類庫中包含類。8.說明類、變量和方法的訪問控制符及其作用。答:類成員的訪問控制符有public,private,protected及無修飾。

public:公有的,public修飾的成分表示公有的,也就是它可以被其他任何對象訪。(前提是對累成員所在的類訪問有訪問權(quán)限)。private:保護的,類中限定為private的成員只能被這個類本身訪問,在類外不可見。proteced:保護的,用該關(guān)鍵字修飾的成分是受保護的,只可以被同一類及其子類的實例對象訪問。無修飾符:默認權(quán)限的。四、程序分析題1.閱讀下列程序,然后回答問題。classTeacher{Stringname;intage;Teacher(){}Teacher(Stringname){=name;}voidsetAge(inti){age=i;}voidshow(){System.out.println("Theteacher'snameis"+name+",hehas"+age+"old.");}}上面的程序定義了什么類?有哪些成員變量?有哪些成員方法?答:定義了Teacher類,成員變量有name、age。有哪些構(gòu)造方法?答:默認構(gòu)造方法和帶參構(gòu)造方法。該類有無訪問控制修飾?是否誰都可以訪問這個類內(nèi)的屬性和方法?答:該類使用了默認的訪問控制修飾符。同一個包可以訪問這個類內(nèi)的屬性和方法。2.下面的程序中,main()方法中使用了上面定義的類,產(chǎn)生了多少個對象?對象的名字分別是什么?請寫出執(zhí)行后的輸出結(jié)果。publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher1=newTeacher();teacher1.setAge(30);teacher1.show();Teacherteacher2=newTeacher("張明");teacher2.setAge(30);teacher2.show();}}答:兩個對象(teacher1、teacher2),結(jié)果如下:Theteacher'snameisnull,hehas30old.Theteacher'snameis張明,hehas30old.3.寫出下面程序的運行結(jié)果。classTest{intmark;voidTest(inti){mark=i;System.out.println("mark的值為:"+mark);}publicstaticvoidmain(Stringargs[]){Testt=newTest(10);}}結(jié)果如下:mark的值為:10五、程序填空題1.下面是一個類的定義程序,請將程序補充完整。publicclassAAA{intx,y;AAA(inti,intj){x=i;y=j;}}2.數(shù)學(xué)中,一個復(fù)數(shù)包容著一個實部(Real)和一個虛部(Imaginary),有一個Complex類,它的實例代表一個復(fù)數(shù),并且能按照數(shù)學(xué)中復(fù)數(shù)的習慣表示形式輸出一個復(fù)數(shù)。publicclassMain{publicstaticvoidmain(String[]args){Complexobj=newComplex(3,4);System.out.println(obj);//輸出結(jié)果為3+4i}}classComplex{publicdoublereal;publicdoubleimaginary;publicComplex(doublerealValue,doubleimaginaryValue){real=realValue;imaginary=imaginaryValue;}publicStringtoString(){returnreal+"+"+imaginary+"i";}}3.創(chuàng)建一個計算機類和一個學(xué)生類,讓計算機對象做學(xué)生類的成員輸出一個學(xué)生的計算機的品牌、主頻和價格。classComputer{Stringtrademark;intfrequency;floatprice;Computer(Stringtr,intfr,floatpr){trademark=tr;frequency=fr;price=pr;}}classStudent{Stringname;Computercp;Student(Stringna,Stringtt,intff,floatpp){name=na;cp=newComputer(tt,ff,pp);}voidshowStudent(){System.out.println("Thecomputerof"+name+"is"+cp.trademark+".Frequencyis"+cp.frequency+"G.Priceis"+cp.price+"元。");}}publicclassObjisMember{publicstaticvoidmain(String[]args){Students=newStudent("LiuPanpan","lenovo",20,2655);s.showStudent();}}4.編寫一個加減運算包,其中包括加、減類,包外編寫程序調(diào)用。packageAddSbt;publicclassAdd{inta,b;publicAdd(intx,inty){a=x;b=y;}publicintadd(){returnthis.a+this.b;}}packageAddSbt;publicclassSbt{inta,b;publicSbt(intx,inty){a=x;b=y;}publicintsbt(){returnthis.a-this.b;}}PackageAddSbt;publicclassCalcul{publicstaticvoidmain(String[]args){Adda=newAdd(5,6);System.out.println("5+6="+a.add());Sbtb=newSbt(10,6);System.out.println("10-6="+b.sbt());}}六、程序設(shè)計題1.設(shè)計一個MyPoint類,其中含有似有的int類型的x和y屬性,分別用公有的getX和setX、getY和setY方法訪問,定義一個show方法來顯示這個對象的x、y的值,如顯示(0,0),最后用main()方法測試。publicclassMyPoint{intx,y;publicintgetX(){returnx;}publicintgetY(){returny;}publicvoidsetX(intx){this.x=x;}publicvoidsetY(inty){this.y=y;}publicvoidshow(){System.out.println("("+x+","+y+")");}publicstaticvoidmain(Stringargs[]){MyPointb=newMyPoint();b.setX(1);b.setY(2);b.show();}}2.定義一個圓類,屬性為半徑、圓周長和面積,方法為輸入半徑并計算周長、面積,輸出半徑、周長和面積。要求定義構(gòu)造方法用來初始化半徑。importjava.lang.Math;publicclassCycle{floatr,cycle,area;publicB(floatr){this.r=r;}publicintgetR(){System.out.println("r:"+r);returnr;}publicfloatgetCycle(){cycle=Math.PI*2*r;System.out.println("cycle:"+cycle);returncycle;}publicfloatgetArea(){area=Math.PI*r*r;System.out.println("area:"+area);returnarea;}}3.建立一個學(xué)生信息類,要求該類包括學(xué)生姓名、班級,課程名和成績這些屬性,定義相關(guān)的方法用以實現(xiàn)輸出不同學(xué)生的信息情況。publicclassStudentInfo{Stringname,stu_class,course_name;floatgrade;publicStudentInfo(Stringname,Stringstu_class,Stringcourse_name,floatgrade){=name;this.stu_class=stu_class;this.course_name=course_name;this.grade=grade;}publicvoidshow(){system.out.println(name+","+stu_class+","+course_name+","+grade);}}4.用Java實現(xiàn)一個骰子游戲:丟下兩個骰子,若分值的總值為7點,則表示贏,否則表示輸。importjava.lang.Math;publicclassGame{intr1,r2;//兩個骰子的點數(shù)publicbooleangame_start(){r1=(int)(Math.random()*6+1);//隨機產(chǎn)生1-6的數(shù)字r2=(int)(Math.random()*6+1);if(r1+r2==7){System.out.println("youwin!");}else{System.out.println("youlose!")}}}5.設(shè)計一個矩形類,構(gòu)造方法中用成員變量做參數(shù),計算面積顯示輸出。publicclassRect{floatlength,width,area;//兩個骰子的點數(shù)publicbooleanRect(floatlength,floatwidth){this.length=x;this.width=y;}publicfloatgetArea(){area=length*width;System.out.println("rectarea:"+area);returnarea;}}6.編寫一個面積運算包,其中包括三角形、矩形和圓類,包括編寫程序調(diào)用。importjava.lang.Math;//三角形publicclassTriangle{publicfloatl1,l2,l3;publicTriangle(floatl1,floatl2,floatl3){this.l1=l1;this.l2=l2;this.l3=l3;}publicfloatgetCycle(){return(cycle=l1+l2+l3);}publicfloatgetArea(){floatt=getCycle()/2;return(area=Math.sqrt(t*(t-l1)*(t-l2)*(t-l3)));//海倫公式}}//矩形publicclassRect{publicfloatlength,width;publicRect(floatlength,floatwidth){this.length=length;this.width=width;}publicfloatgetCycle(){return(cycle=(length+width)*2);}publicfloatgetArea(){return(area=length*width);}}//圓publicclassCycle{publicfloatr;publicCycle(floatr){this.r=r;}publicfloatgetCycle(){return(cycle=Math.PI*r*2);}publicfloatgetArea(){return(area=Math.PI*r*r);}}publicclassB{publicstaticvoidmain(Stringargs[]){ Recttriangle=newTriangle(3.0f,4.0f,5.0f); triangle.getArea(); Rectrect=newRect(1.0f,2.0f); rect.getArea(); Cyclecycle=newCycle(1.0f); cycle.getArea();}}第5章封裝、繼承與多態(tài)習題5一、選擇題1.在Java中,所有類的根類是()。AA.java.lang.ObjetB.java.lang.ClassC.java.applet.AppletD.java.awt.Frame2.在Java中,能實現(xiàn)多重繼承效果的方式是()。CA.抽象類

B.適配器C.接口

D.同步3.如果任何包中的子類都能訪問超類中的成員,那么應(yīng)使用的限定詞是()。AA.publicB.privateC.protectedD.transient4.整數(shù)型public成員變量MAX_LENGTH,該值保持為常數(shù)100,則定義這個變量的語句是()。DA.publicintMAX_LENGTH=100B.finalintMAX_LENGTH=100C.publicconstintMAX_LENGTH=100D.publicfinalintMAX_LENGTH=1005.Java變量中,以下不屬于復(fù)合類型的數(shù)據(jù)類型是()。BA.類

B.字符型C.數(shù)組型

D.接口6.下列敘述中,錯誤的是()。BA.父類不能替代子類B.子類能夠替代父類C.子類繼承父類D.父類包含子類7.Java源文件中最多只能有一個()類,其他類的個數(shù)不限。BA.a(chǎn)bstractB.publicC.finalD.interface8.在子類中重寫父類的方法的過程稱作()。CA.方法重載B.方法重用C.方法覆蓋D.方法繼承9.如果在子類需要調(diào)用父類帶參數(shù)的構(gòu)造方法,可通過super調(diào)用所需父類的構(gòu)造方法,且該語句必須作為父類構(gòu)造方法中的()。AA.第一條語句B.第二條語句C.倒數(shù)第二條語句D.最后一條語句10.實現(xiàn)接口使用的關(guān)鍵字是()。BA.publicB.implementsC.packageD.interface二、填空題1.繼承是一種軟件重用形式。在這種形式中,新類獲得現(xiàn)有類的數(shù)據(jù)和方法,并增加新的功能。2.Java程序中定義接口所使用的關(guān)鍵字是interface,接口中的數(shù)據(jù)成員都是常量,接口中的成員方法都是抽象方法。3.Java程序通過接口間接支持多繼承,使類繼承具有更靈活的擴展性。4.類是Java程序中基本的結(jié)構(gòu)單位。5.this代表了當前類的引用,super表示的是當前對象的直接父類對象。6.多態(tài)有3種具體形態(tài),分別是方法重載、方法覆蓋和變量多態(tài)。三、問答題1.什么是繼承?什么是父類和子類?答:繼承是一種由已有的類創(chuàng)建新類的機制。利用繼承,可以先創(chuàng)建一個共有屬性的一般類,根據(jù)一般類再創(chuàng)建具有特殊屬性的特殊類,特殊類繼承一般類的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為被繼承的類則稱為基類、父類或超類,由繼承而得到的類還可以稱為派生類或子類2.什么叫數(shù)據(jù)隱藏?什么叫方法的覆蓋? 答:數(shù)據(jù)隱藏:利用抽象數(shù)據(jù)類型將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起的操作。方法的覆蓋:在子類中重寫父類的方法,以達到覆蓋父類方法目的,即在子類中按照父類方法定義的方式重新定義一遍自己的方法。3.什么叫多態(tài)?Java中多態(tài)體現(xiàn)在哪些方面?答:多態(tài)性的一般含義是同一個命名在不同語境下呈現(xiàn)不同的語義。在Java語言中,多態(tài)性體現(xiàn)在兩個方面:由方法重載實現(xiàn)的編譯時多態(tài)(靜態(tài)多態(tài)性)和由方法覆蓋結(jié)合變量多態(tài)實現(xiàn)的運行時多態(tài)(動態(tài)多態(tài)性)。4.如何從子類顯式調(diào)用父類的構(gòu)造方法? 答:通過在子類的構(gòu)造方法中用super關(guān)鍵字的方式調(diào)用,調(diào)用方式:super(參數(shù)…)。5.什么是抽象類?什么是抽象方法?答:抽象類:抽象類是它的所有子類的公共屬性的集合,是包含一個或多個抽象方法的類。抽象方法:用abstract關(guān)鍵字修飾的方法叫抽象方法6.什么是接口?使用時要注意哪些問題??答接口:通過interface關(guān)鍵字定義的數(shù)據(jù)類型。注意點:(1)接口的訪問控制權(quán)限是public或默認權(quán)限,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論