版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章概述1.若程序中公有類的名字是OneApp,則保存該程序的文件名是【】A.OneappB.Oneapp.classC.OA.OneappB.Oneapp.classC.OneAppC中使用typedef進行類型定義,在中已經去掉了。另外三個選項都是的特點。5.下列關于程序的敘述中,正確的是A.程序必須配合HTML文件才能執(zhí)行B.JVM解釋執(zhí)行源程序C.程序中可以使用指針6.下列選項中,不是程序主函數main()前面的修飾符的是【】A.classB.staticC.void第一行中,即類頭中。mainO不是類,是類中的函數。main(前三個修飾符的次序可稍做變7.下列概念中,屬于面向對象重要概念和機制之一的是【】1.假設程序保存在文件MyTest.中,則編譯這個程序的命令是。2.類Testll經編譯程序編譯后,產生的文件是。答案:字節(jié)碼文件Testll.class。答案:虛擬機,英文是VirtualMachine。4.程序主函數mainO前面的修飾符是。5.源文件經編譯后生成的二進制文件稱為。字節(jié)碼文件是類文件。參見教材第一章第一節(jié)中的內容。6.編寫好的源程序在計算機上運行需依次經歷兩個階段,分別是和解釋執(zhí)行。解答:是通用的、面向對象的,并具有分布性、安全性和(1)語法簡單,功能強大的語法非常像C++,同時去掉了C++中不常用且容易出錯的地方,解釋器只占用很少(2)與平臺無關一個非常重要的特點就是與平臺的無關性,虛擬機(VirtualMachine,簡稱JVM)是編譯器將程序編譯成虛擬機能夠識別的字節(jié)碼(bytecode)。字節(jié)碼就是虛擬機的機器指令,它與平臺無關,有統(tǒng)一的格式,不依賴于具體的硬件環(huán)境,只運行在JVM上。在任何安裝運行時環(huán)境的系統(tǒng)上,都可以執(zhí)行這些代碼。JVM在執(zhí)行字節(jié)碼文件時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。所以程序在不同的平臺上運行時,不需要重新編譯。(3)解釋編譯兩種運行方式程序可以經編譯器得到字節(jié)碼。在現在的版本中又加入了編譯功能(即justintime編譯器,簡稱JIT編譯器),JIT編譯器將字節(jié)碼轉換成本機的機器代碼,然后可以以較高速度執(zhí)(4)多線程內置了級多線程功能,提供現成的類Thread,只要繼承這個類就可以編寫多線程的程(5)動態(tài)執(zhí)行兼有豐富的API文檔及類庫瘦客戶機架構,減少維護工作。為用戶提供了詳盡的API文檔說明,開發(fā)工具包中的類庫包羅萬象,類庫與時俱進,隨時更新,增加的新方法和其2.為什么說是平臺無關的?不同的目標文件。而JVM屏蔽了具體平臺的差異。編譯器將程序編譯成虛擬機能夠識別的字節(jié)碼(bytecode)。字節(jié)碼就是虛擬機的機器指令,它與平臺無關,有統(tǒng)一的格式,不依賴于具體的硬件環(huán)境,只運行在JVM上。在任何安裝運行時環(huán)境的系統(tǒng)上,都可以執(zhí)行這些代碼。JVM在執(zhí)行字節(jié)碼文件時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。所以程序在不同的平臺上運行時,不需要重新編譯。為程序跨平臺的無縫移植提供了很大的便利。3.什么是虛擬機?解答:虛擬機(VirtualMachine,簡稱JVM)是一臺虛擬計算機,是通過在實際的計CPU指令,包括算術運算、流控制和數組元素訪問等。JVM的具體實現包括:指令集(等價于CPU的指令集)、寄存器組、類文件格式、棧、虛擬機規(guī)范提供了編譯所有代碼的硬件平臺。因JVM的代碼格式為壓縮的字節(jié)碼,因而效率較高。由JVM字節(jié)碼表示的程序必須保持執(zhí)行符合JVM定義的類文件格式的任何類文件。4.查閱API文檔,列出API文檔中4個包名。用到這4個包,后續(xù)章節(jié)中也會提及。5.查閱API文檔,列出.lang中4個類。到這4個類,后續(xù)章節(jié)中也會提及。6.查閱API文檔,列出.awt.event中4個接口。解答:.awt.event是處理事件的包,選出4個常用接7.查閱API文檔,列出.lang.Math類中4個常用方法。解答:lang.Math類中包含了許多常用函數,選出4個常用方法如下。staticdoublerandom():返回大于等于0.0且小于1.0的一個正的double型值。8.查閱API文檔,列出.lang.String類中4個常用方法。booleanequals(ObjectanObject):將本串與指定對象anObject進行比較。返回指定子串str在本串中第一次出現的索引。9.查閱API文檔,列出.util.Random類中2個常用方法。doublenextDouble):根據本隨機數生成器,從0.0到1.0之間、均勻分布的double型偽intnextInt(intbound):根據本隨機數生成器,從0(含)到指定值bound(不含)之間、10.查閱API文檔,列出.awt.Color類中2個構造方法。Color(intr,intg,intb):使用指定的范圍在(0-255)間的紅色、綠色和藍色值r,g,b,創(chuàng)第二章數據和表達式一、單項選擇題1.以下選項中,能作為關鍵字的字符串的是【】A.defineB.typeC.includeD.switchdefine可以進行宏定義,是C中預處理命令中的一種,在中已經丟棄。C中使用include語句包含h文件,中使用的是import語句。switch用在多重分支語句中。參看教材第三章第二2.以下標識符中,不是關鍵字的是【】A.waitB.newC.long使用new調用類的構造方法來創(chuàng)建對象。long表示長整型類型。switch是多分支語句,其用法參見教材第三章第三節(jié)的內容。3.以下字符串中,能作為程序中的標識符的是【】A.ValB.OK#C.2ValOK#中含有特殊字符#。2Val是以數字2開頭。catch是關鍵字。它們都不能用作標識符。4.以下字符串中,能作為程序變量名的是【】A.defaultB.final變量名必須是一個合法的標識符,CASE是全大寫的,全小寫的case是關鍵字,兩者是不相同的。default用在多重分支語句中,final用在異常處理語句中。long表示長整型類型。5.下列選項中,能作為注釋的是【】類似的,選項D也是沒有結束標記*/。選項C的結束標記符號不正確。6.標識符MAIN不能用作【】A.類名B.接口名C.程序名程序中,主函數名必須是main,且全小寫。MAIN是正確的標識符,可以用作類名、接口7.不屬于基本數據類型的是【】記錄型是C中由程序員通過typedef定義的,中除了整型、浮點型、布爾型等基本數據類型外,程序員僅能定義類類型(由class標識)和接口(由interface標識)。8.以下數據類型轉換中,必須進行強制類型轉換的是【】int比char的位數多,所以不能進行自動類型轉換,必須進行強制類型轉換。選項B、C和D都是由位數少的類型轉換為位數多的類型,可以自動完成。9.以下數據類型轉換中,必須進行強制類型轉換的是【】A.long→byteB.short→floatC.int→longD.byte→short10.以下選項中,不是轉義字符的是【】二、填空題1.用來聲明布爾變量(邏輯變量)的保留字是。2.方法內定義的變量稱作答案:自動變量,或是局部變量/臨時變量/棧變量。自動變量需要由程序員為其初始化。3.邏輯與和邏輯或運算符有一個特殊的功能,當左側操作數能決定表達式的值時,跳過右側操作數的運算。這個功能是4.一個byte類型的操作數和一個int類型的操作數進行運算,結果的類型是不同類型的量進行混合運算時,要先轉換為同一種類型,然后再進行運算。通常是位數少的類型轉換為位數多的類型。byte類型的操作數要先轉換為int類型的,進行運算后的類型也為int類型的。5.當不同數值類型的數據進行運算時,表示范圍較小的類型轉換為表示范圍較大的類型的轉換稱作。答案:自動類型轉換。數的表示范圍小于浮點數的表示范圍。整型轉為浮點型也是自動進行的。6.當不同數值類型的數據進行運算時,表示范圍較大的類型轉換為表示范圍較小的類型的轉換稱作。不符合自動類型轉換規(guī)則的數據進行混合運算時,如果需要進行類型轉換,必須標注目標類型,進行強制類型轉換。7.表達式“45&20”的十進制值是。45的二進制表示為101101,20的二進制表示為10100,兩個數進行位與運算,即對應位進行與運算,兩個位都為1時結果為1,其余為0。101101&10100=000100,即是4。8.表達式1==1>>>32;的值是_。移位運算符>>>的優(yōu)先級高于比較運算符==,所以先計算1>>>32。對于int型量,移位操作的位數對32取模,即1>>>32不移位,結果仍是1。這個結果再與1進行比較,相等,所以結果是true。三、簡答題1.支持的數據類型有哪些?列出中所有的基本數據類型。本數據類型共有8種,分為4小類,分別是邏輯型、字符型、整型和浮點型。復合數據類型類型,分別是:單精度浮點數float(4字節(jié))及雙精度浮點數double(8字節(jié))。關。例如,int型整數總是32位的,而不管是在Linux、Windows還是Android環(huán)境下。這4位十六進制數,范圍為0~65535。char類型的常量值必須用一對單引號(")括起來。例byte表示的數的范圍為-128~127,short表示的數的范圍為-32768~32767,int表示的數的范圍為-231~231-1,long表示的數的范圍為-23~23-1。整型常量可用十進制、八進制或十六進制形式表示,以1~9開頭的數為十進制數,以0開頭的數為八進制數,以0x開頭的數為十六進制數。中4種整型量都是有符號的。float表示的數的范圍約為1.4e??~3.4e3,double2.中常用的運算符有哪幾類?每類列出幾個,并說明其含義。解答:運算符有算術運算符、關系運算符、邏輯運算符、位運算符,每類列出3個。此外還有幾個特殊的運算符。如表2-1所示。表2-1部分運算符及其含義類別運算符運算符含義算術運算符+加法減法加1關系運算符<小于大于等于=等于邏輯運算符邏輯與邏輯或!邏輯非位運算符&位與A位異或左移特殊運算符對象實例字符串連接賦值條件運算符或賦值3.中運算符優(yōu)先級是如何定義的?舉例說明。解答:將全部運算符按從高到低劃分了15個等級,每個等級中包含少則一個多則十余個的運算符。比如,數組下標運算符,后綴形式的加1和減1運算符具有最高優(yōu)先級,擴展次序。各運算符的優(yōu)先次序見教材的表2-8。abstract,bit,boolean,case,character,comment,double,else,end,endy,float,for,generic,goto,if,implements,import,inner,instanceof,interface,line,ve,new,null,old,oper,outer,package,print,private,rest,return,short,static,suphronized,this,throw,throws,transient,var,void,volatile,abstract,boolean,case,double,else,false,final,finally,float,for,gmport,inner,instanceof,interface,long,native,new,null,outer,package,private,rt,static,super,switch,synchronized,this,throw,throws,transient,vbit,character,comment,end,endif,extend,line,loop,old,oper,print,var,w5.請敘述標識符的定義規(guī)則。指出下面給出的字符串中,哪些不能用作標識符,并說明原(1)標識符是以字母、下劃線(_)或美元符($)開頭,由字母、數字、下劃線(_)或美元符($)組成的字符串。僅能含有這些字符。(2)標識符區(qū)分大小寫。(3)標識符的長度沒有限制。(4)注釋和空白不能插在一個標識符之中。(5)有許多關鍵字,它們都有各自的特殊意義和用法,不得用它們作為標識符。題目所給的標識符中,不正確的有this和2tol,其中this是中的關鍵字,不能用作標識6.轉義字符是什么?列舉幾個轉義字符。殊格式表示的有特殊含義的字符。表2-2中列出了幾個轉義字符。表2-2幾個轉義字符及其含義轉義字符含義退格鍵(Backspace換行符回車符水平制表符(Tab)反斜杠\\單引號'雙引號"7.中的類型轉換是指什么?支持變量數據間的自動任意轉換,有時必須顯式地進行變量類型的轉換。如果同為整數類型,或同為浮點數類型,那么,轉換的原則是位數少的類型可以轉換為轉換規(guī)則的類型轉換,都必須標注出目標類型的名字,這屬于強制類型轉換。8.>>>與>>有什么區(qū)別?舉例說明。解答:提供兩種右移運算符。邏輯右移運算符(也稱無符號右移運算符)>>>只對位進行操作,而沒有算術含義,它用0填充移位后左側的空位。運算符“>>”執(zhí)行算術右移,它使用最高位填充移位后左側的空位。右移的結果為:每移一位,第一個操作數被2整除一次,移動的次數由第二個操作數確定。比如,-256>>4得到-16,-256>>>4得到268435440,9.下列表達式中,找出每個操作符的計算順序,在操作符下按次序標上相應的數字。解答:在中,在對一個表達式進行計算時,如果表達式中含有多個運算符,則要按運算符的優(yōu)先順序從高向低依次進行,同級運算符則按結合律進行。括號可以改變運算次序。各表中aa(+2+3ab/1b/11C3*2*2+2)ddC3d10.什么是變量聲明?解答:中,通過在對象類型后緊跟一個變量名來對變量進行聲明。例如;intnum。變量聲明也叫變量說明。【延伸閱讀】根據變量是基本數據類型還是復合數據類型,其聲明的效果也分兩種結果。對于簡單類型的變量,聲明即為創(chuàng)建,也就是在內存中分配了適當的存儲空間。完成初始化后可以直接使用。而對于復合數據類型變量,聲明只是定義了對所聲明變量的一個引用,這個引用還沒有指向任何可用的存儲單元,還需要通過new運算符來實例化該對象,也就是分配內存,并讓引用指向這個存儲區(qū)的首地址。四、程序分析題閱讀下列程序片段,請寫出程序片段的執(zhí)行結果。解答:>>>與>>都是右移運算符,它們的不同之處在于使用不同位填充移位后左側的空白。>>運算使用符號位填充左側的空位,而>>>使用零填充空位。也就是說,>>運算保持操作數的符號不變,而>>>運算則可能改變原數的符號。分析上面的程序段。初始時,b1和b2都是int型的變量,占32位,初值均為1,兩個變量分別向左移動31位,兩個值變?yōu)椋?0000000000000000000000000000000,在計算機使用>>運算符將bl向右移動任何位,它的值都不使用>>>運算符則有所不同。>>>使用零填充左側的空位,所以將b2向右移動31位后,它的值為:00000000000000000000000000000001,即b2的值為1。再向右移動1位,則它的值為:00000000000000000000000000000000,即b2的值為0。第三章流程控制語句include語句是C中用來包含頭文件的語句。中引入包的語句是import語句。A.break語句B.continue語句C.goto語句D.for語句goto語句使得程序的執(zhí)行流程混亂,程序的易讀性降低,中已經不再使用該語句。3.設i的初值為6,則執(zhí)行完j=i-;后,i和j的值分別為【】A.6,6B.6,5C.5,6給j賦值時,使用的是i原來的值,即6。賦值后,i的值減1,為5。4.在一個if語句中,下列選項中正確的是【】C.if的個數一定少于else的個數D.if的個數可能多于else的個數if語句是允許嵌套的,而且else語句是可選的。當在一個if語句中又嵌套了if語句時,就會出現多個if的情況。而因為else是可選的,所以它的個數少于等于if的個數。5.switch語句中,大多數情況下,每個case塊中最后一條語句應該是【】A.defaultB.continuebreak語句,保證執(zhí)行了該塊中的語句后控制流轉到switch語句之后繼續(xù)執(zhí)行。如果進入最后一個case塊執(zhí)行,則寫不寫break語句,控制流都轉到switch語句之后,所以這個break7.switch語句中,如果沒有相匹配的條件,則執(zhí)行【】A.任一個case后的語句B.default之后的語句A.ClassNotFoundExceptionB.ArithmeticExceptionC.FileNotFoundExceptionD.IOException9.下列選項中,與try語句配套使用的語句是【】A.defaultB.catchC.breakD.casetry-catch語句是異常處理語句,用try語句括住可能會出現異常的語句,后面使用catch語句A.defaultB.catchcatch語句的最后通常是finally語句。不論是否捕獲到異常,都要執(zhí)行finally后面的語句。I和Ⅲ中,使用的分別是&和運算符,這是位運算符,沒有短路功能,所以&或運算符的前后子表達式都要執(zhí)行。如果s是空串,則調用s.length()時會發(fā)生異常。Ⅱ和IV中,使用的是邏輯運算符&&和|,具有短路功能。對于具有短路功能的運算符,如果運算符前面的子表已經能夠決定整個表達式的結果為true,不用去計算s.length(),所以二、填空題2.能替換if語句的語句是if語句與switch語句都是分支語句,switch語句中的表達式與if語句中的條件表達式不完全3.switch語句中,表示條件的表達式只能是類型或類型。5.流控制語句有3類,對應于順序流的語句是流控制分為3類:順序流、循環(huán)流和分支流。對應于順序流的是賦值語句。這3種語句都是循環(huán)語句。這兩種語句都是分支語句。8.如果想使用其他包中的類,則需要在程序的開頭使用語句。]switch語句的執(zhí)行過程是:計算表達式的值,用該值依次和cl、c2、…、ck相比較。如果該值等于其中之一,例如ci,那么執(zhí)行caseci之后的語句組i,直到遇到break語句跳到switch之后的語句。如果沒有相匹配的ci,則執(zhí)行default之后的語句。2.程序3.1中如果某個break語句不寫,則程序執(zhí)行時的輸出是什么?舉例說明。解答:如果某個break語句不寫,則當前執(zhí)行的case塊執(zhí)行完畢,會繼續(xù)執(zhí)行下一個case塊內的語句,直到遇到break語句時結束。舉例來說,在程序3.1中,如果第一組case對應的語句塊內不寫break語句,即不寫第一個break語句,則當輸入命令行第一個參數的首字符是數字時,比如輸入“234”,那么輸條輸出是不應該出現的。3.請說明嵌套的if語句中,else語句的對應規(guī)則。解答:規(guī)定else子句屬于邏輯上離它最近的if語句,也就是同一塊中還沒有匹配else的最近的if。4.請簡要說明while語句與do-while語句的不同之處。解答:while語句和do-while語句的語法格式是不同的,while中條件表達式寫在前面,do-while中條件表達式寫在后面。兩種語句條件表達式的判斷時間也不同。while語句先判斷條件表達式的值,然后根據值的真假決定是否執(zhí)行循環(huán)體。do-while語句先執(zhí)行循環(huán)體,再判斷條件表達式的值,以決定是否再次執(zhí)行循環(huán)體。兩種語句中循環(huán)體的執(zhí)行次數也不同。while中,循環(huán)體語句可能一次也不執(zhí)行,do循環(huán)中的循環(huán)體至少執(zhí)行一次。5.請簡要說明while語句與for語句的適用情況。解答:for語句中,可以以執(zhí)行次數來控制循環(huán)體的執(zhí)行,當明確了次數后,可以選用for語句。而有時只知道循環(huán)體執(zhí)行的前提條件,但執(zhí)行次數并不明確,此時可以使用while解答:把程序運行中可能遇到的錯誤分為兩類,其中一類是非致命性的,通過某種修正后程序還能繼續(xù)執(zhí)行。這類錯誤稱作異常(Exception)。生成的異常對象傳遞給運行時系統(tǒng),運行時系統(tǒng)尋找相應的代碼來處理這一異常。生成異常對象并把它提交給運行時系統(tǒng)的這一過程稱為拋出(throw)一個異常。運行時系統(tǒng)從生成對象的代碼塊開始進行回溯,沿方程稱為捕獲(catch)。7.是如何處理異常的?地,當發(fā)生異常時,有3種方法可以處理拋出的異常。(1)可以忽略它,這將導致程序中斷,并輸出一條信息。(2)在發(fā)生異常的地方處理它。根據異常所屬的類,找到對應的catch語句,然后執(zhí)行其后的語句序列,完成對異常的處理,恢復(3)運行時系統(tǒng)從生成異常對象的代碼塊開始,沿方法的調用棧逐層回溯,在調用層次中更高層的方法中捕獲并處理異常。8.try及catch語句的作用是什么?語法格式如何?解答:對于可能拋出異常的代碼段,要使用try語句括住,用catch語句指明要捕獲的}其中,異常類型1、異常類型2、…、異常類型k是產生的異常類型。根據發(fā)生異常所屬的類,找到對應的catch語句,然后執(zhí)行其后的語句序列,完成對異常的處理,恢復程序的執(zhí)9.在什么情況下執(zhí)行try語句中finally后面的代碼段?在什么情況下不執(zhí)行?解答:在執(zhí)行try語句時,不論是否捕獲到異常,都要執(zhí)行finally后面的語句。try后面大括號({})中的代碼稱為保護代碼。如果在保護代碼內執(zhí)行了System.exit()方法,則程序將退出,此時不執(zhí)行finally后面的語句,這是不執(zhí)行finally后面語句的唯一一種情況。10.你能說出中常見的幾個異常嗎?它們表示什么意思?在什么情況下引起這些異常?(1)ArithmeticExceptio整數除法中,如果除數為0,則發(fā)生該類異常。虛擬機遇到這樣的錯誤時會自動中止程下面的程序將引發(fā)ArithmeticException異常。result=numerator/denomi}(2)NullPointerException如果一個對象還沒有實例化,那么訪問該對象或調用它的方法時將導致NullPointerException異常。因此使用一個變量前,要先檢查一下它是否為null。第一行創(chuàng)建了有4個元素的數組im,每個元素都是image類型的,系統(tǒng)為其進行初始化,每個元素中的值為null,表明它還沒有指向任何實例。第二行要訪問im[0],由于訪問如果元素個數是個負數,則會引發(fā)NegativeArraySizeException異常。據length值自動檢查下標的大小。如果數組下標越界,則將導致11.以下語句要打印從7開始不大于7的正奇數,但程序中有錯誤,請改正,然后寫出此循當打印完值1后,k值修改為-1,而且后面的執(zhí)行只會使k值越來越小,永遠不會等于0,即(k!=0)永遠為true,循環(huán)會一直執(zhí)行下去,進入死循環(huán)。循環(huán)次數是4次。四、程序填空題1.某人以年利率r向銀行存款m元,一年后存款額為m*(1+r),他想知道存多少年后,存款額會達到原來的k倍。以下方法已知m、r和k,計算至少多少年后存款額大于等于m*k。解答:①money<=m*k2.方法voidFibonacci(intm)的功能是輸出不大于m的Fibonacci數列中的元素。注:Fibonacci數列的前兩個數都是1,從第三個數開始,數列的每個數是其前面兩個數之和。voidFibonacci(intm)解答:①return五、程序設計題稱為n的階乘,并且規(guī)定0!=1。試編制程序計算2!,4!,6!,8!和10!,并顯示計算結果。解答:階乘函數這是一個遞歸定義,因為階乘本身又出現在階乘的定義中。對于所有的遞歸定義,一定要有一個遞歸結束的出口,這既是定義的最基本情況,也是程序執(zhí)行遞歸結束的地方。本定義中的第一行即是遞歸出口。當一個函數使用遞歸定義的時候,往往直接使用遞歸方法實現它。階乘的遞歸實現如下//輸出結果分析式子可以看出,S是由n項相加得到的。所以循環(huán)體的執(zhí)行次數為n。S的初始值為0,循環(huán)變量i從1增大到n,將1/i加到S中,即可得到最終結果。}3.已知變量n,請寫出使用for語句計!代碼。分析式子可以看出,S是由n+1項相加得到的??梢詫的初始值設置為1,即第1項的值。這樣,循環(huán)體的執(zhí)行次數為n。循環(huán)變量i從1增大到n,將1/(3xi)加到S中,即可得到最終結果。}4.編寫程序打印下面的圖案。解答:從圖中可以看出,該圖以中間行為基準,上下對稱。首先看看要打印的總行數,如果每行都不同,則需要定制各行的打印內容。如果有重復或是對稱內容的話,則可以簡化語句的處理。觀察本題中要輸出的內容,一共要輸出7行,以initNum變量來表示。第1行和第7行一樣,第2行和第6行一樣,第3行和第5行一樣,實際上只需要定制4個不同的行即可。從1開始計行號。各行的星號數與行號i的關系為:當i<=(initNum+1)/2,相應行的星號之間有兩個空格。再看每行最左側的空格數與行號的關系:當i<=(initNum+1)/2,相應行PrintAstpa=newPrintAst();intinitNum=7;for(intm=1;m<=3*(i-1);for(intm=21-3*i;m>0;m-)pa.printSpace();for(intk=1;k<=2*i-initNum;k++)pa.printAstar();publicvoidprintAstar){System.out.printpublicvoidprintSpace(){System.out.prin5.編寫程序打印下面的圖案。水*同樣地,需要先判定輸出的總行數,本題中是10行。接下來,確定每行輸出的星號數及起始位置。從圖中看出,起始位置都是從第一列開始。第一行輸出10個星號,以后逐行遞減程序實現如下:publicstaticvoidmain(for(intj=0;j<initNum-i;j++)//總共輸出10行解答:乘法口訣表是學習算術時入門級的知識,主要內容是10以內的兩個數相乘的結publicstaticvoidmain(String[]ar{MultipleTablemt=newfor(intk=1;k<i;k++){//輸出共9行res=i*j;publicvoidprintFormula(i{if(res>9){//對齊7.編寫程序,要求判斷從鍵盤輸入的字符串是否為回文(回文是指自左向右讀與自右向左如何判斷一個字符串是回文呢?有很多的方法,下面介紹其中比較簡單的兩種實現。方法二:設字符串為w,將字符串全部反轉變?yōu)閣l。例如字符串“abcdefg”反轉后的if(str[i]==str[j])net++;}InputStreamReaderreader=newIn}catch(IOExceptione){//IOException是個標準異常booleanbw=hw1.isHuiWen(pm.toCharArray),pm.length());System.out.println("Itisnothuiwe第二種方法可以讓讀者熟悉字符串及字符數組的使用,其實現程序如下:/分配一個新的字符數組}HuiWen2hwl=newHuiWen20;InputStreamReaderreader=newInSystem.out.print("give8.編寫程序,判斷用戶輸入的數是否為素數。素數是指只能被1和自身整除的正整數。解答:素數是只能被1和本身整除的整數。換句話說,除1和本身外,素數沒有其他因子。這點可以作為判定素數的規(guī)則。對于一個正整數n,如果2~n-1之間的任何一個整數都不能整除n,則n為素數。進一步的分析可知,僅需判定2~√n之間的任何一個整數都不能整除n,即可判定n為素數。這樣可以減少循環(huán)的執(zhí)行次數。if(pm%i=0){}}publicstaticvoidmain(Stringargs[InputStreamReaderreader=newIni=Integer.valueOf(inpubooleanbl=prim.isPrim9.編寫程序,將從鍵盤輸入的華氏氏溫度轉換為攝氏溫度。同樣地,因為要處理鍵盤輸入,所以添加了異常處理。轉換程序的實現如下:TempConvertertc=ntry{/定義輸入源InputStreamReaderreader=newInSystem.out.print("giveyourfahtmp=Double.valueOf(input.readLine());//將輸入轉為雙精度數System.out.println("thecelsiusof10.編寫程序,讀入一個三角形的三條邊長,計算這個三角形的面積,并輸出結果。提示:設三角形的三條邊長分別是a、b、c,則計算其面積的公式為:解答:根據平面幾何的理論,當三個數能夠滿足任意兩數之和大于第三個數及任意兩數之差小于第三個數時,這三個數才能構成三角形的三條邊。由三條邊的邏輯關系,當上述條件滿足一個時,另外一個也必然滿足。因此只需要判定任兩邊之和大于第三邊即可。根據題義,程序中定義了Trigsquare類,該類包括三角形的三條邊這三個屬性,以及判斷是否能構成三角形的isTriangle()方法和求解三角形面積的getArea()方法。程序實現如下://x、y、z分別為3條邊publicbooleanisTriifthis.x>0&&this.y>0&&this.z>0){//必須是3個正數,邊長不能是負值if((this.x+this.y)>this.z&&//任意兩邊publicdoublegetAreturm(Math.sqrt(s*(s-this.x)*(s-this.y)*(s-thidoubles[]=newdouble[3];//使用一個數組存放3個數InputStreamReaderreader=newInputStreamReader(System.in);System.out.print("輸入3個數,每行輸入一個:n");for(inti=0;i<3;i++){//輸入3個數,每行輸入一個Trigsquarets=newTrigsquare(s[0],s[1],s[2]);System.out.println("thenumbersinputcannotbeatr2)從鍵盤輸入一個日期,屏幕上回答是星期幾,也以當年為例。3)從鍵盤輸入兩個日期,計算這兩個日期之間含有多少天。一些基本的方法。本例從GregorianCalendar類派生一個類MyCalender,創(chuàng)建它的實例以得到某個月的月歷。計算星期幾則采用Calendar類中定義的DAYOFWEEK常量來得到,由diff=(datel.getTime()-date2.getTime程序實現如下:{c=newGregorianCalendar(//閏年的2月份天數System.out.println("--------Calendar:"+yeintfirst=c.get(Calendar.DAY_OF_WEEK);//1日在星期幾for(i=1;i<first;i++)System.out.print("");//1日之前的空白if(first++%7==0)System.ouc=newGregorianCalendar(year,month-1,date);intday=c.get(Calendar.DAY_OF_WEEK);//返回該日期是星期幾publicintdiffDate(.utilreturnMath.abs((int)((datel.getTime()-date2.getTime())/(24*3600*1000)));InputStreamReaderreader=newInpm=Integer.parselnt(input.readLin}catch(NumberFormatExceptionne){InputStreamReaderreader=newInMyCalendermc=newMyCalender();count=mc.inputNum();//選項號,有4種System.out.print("inputthemonth(1-12):");.util.Datemydate1=new.ut.util.Datemydate2=new.utSystem.out.print("pleaseinputStringdl=mc.inputDmydatel=myFormatter.parse(d1);mydate2=myFormatter.pa+mc.diftDate(mydatel}//endofwhile出這個值的最佳可能,要求使用的幣值個數最少。例如,給出1.46元,將得到下列結果:1.46元=的人民幣有如下面值:1元、5角、2角、1角、5分、2分、1分。publicstaticvoidmain(/分別對應的錢幣的值,以分為單位InputStreamReaderisBufferedReaderbr=newBuasval=Integer.parselSystem.out.println("輸入的不是數值!");}System.out.println(val[i]+"分的個數:"+num[i]);13.請編寫方法intrevInt(intk),該方法的功能是返回與十進制正整數k的數字順序相反排列的正整數。如已知正整數是1234,則方法的返回值是4321。解答:要讓整數按各位反序重排,需要依次取得原數的各數位,再拼成一個整數。可以從右向左依次取各個數位的值。以1234為例,取得的值是4、3、2、1。再將這些值拼起來,比如先得到的是4,temp=4,然后計算temp×10+3再賦給temp,得到temp=43。繼續(xù)temp×10+2,得到temp=432,再繼續(xù)tempx10+1,得到temp=4321。對于整數k,kmod10的結果即得到k的個位,將這個值添加到目標值temp的最后一k=k/10;14.使用.lang.Math類,生成100個0~99之間的隨機整數,找出它們之中的最大者及最小者,并統(tǒng)計大于50的整數個數。該方法返回一個0.0~1.0之間的小數,如果要得到其他范圍的數,則需要進行相應的轉換,例如想得到一個0~99之間的整數,可以使用下列語句:intnum=(int)(100×Math.random());解答:提示中已經說明了,可以使用Math.random()方法得到隨機數,但這個隨機數是一個0.0~1.0之間的浮點數,首先需要將數的范圍變化到0~99之間,然后再將得到的數轉程序中,使用了兩個變量MAXof100、MINof100分別記錄這100個整數中的最大值和最小值。先生成前兩個隨機整數,較大者放入MAXof100中,較小者放入MINof100中。隨后使用一個循環(huán)生成剩余的98個隨機整數,然后分別與MAXof10新生成的數如果大于MAXof100,則將MAXof100修改為新的數。同樣如果新生成的數小于MINof100,則讓MINof100記下這個數。程序中使用count記錄大于50的隨機數的個數,初始時,它的值為0。{MAXof100=(int)(100*Math.MINof100=(int)(100*Math.rSystem.out.print(MAXof100+"");num=MINof100;MAXof100=num;num=(int)(100*Math.rand//控制每輸出10個數即換行/l更小的數記入MINof100//記錄下大于50的個數System.out.println("Thenumberofrandom第四章面向對象程序設計1.假設滿足訪問權限的前提下,下列關于實例方法和靜態(tài)方法的說法中,錯誤的是【】B.靜態(tài)方法能直接引用靜態(tài)變量C.實例方法能直接引用實例變量D.靜態(tài)方法能直接引用實例變量2.下列關于實例方法和靜態(tài)方法的敘述中,正確的是【】B.類中的靜態(tài)方法可以直接調用實例方法D.類中的靜態(tài)方法不可以互相調用實例方法之間可以互相調用,靜態(tài)方法之間也可以互相調用,所以選項A和D都排除了。那么實例方法和靜態(tài)方法之間的調用關系是什么樣的呢?要調用實例方法必須通過對象,而3.下列選項中,不是構造方法特點的是A.構造方法的名字與類名相同B.構造方法可以從父類繼承C.構造方法中要為所有的變量賦初值A.構造方法可以有多個B.構造方法沒有返回值類型C.構造方法的參數列表可以不同D.構造方法的調用方式與普通方法相同構造方法不能由程序員任意調用,實際上,僅在創(chuàng)建對象時由系統(tǒng)調用。A.方法名B.方法參數個數C.方法返回值類型D.方法參數的類型1.方法簽名包括方法名稱加上方法的。2.同一個類中多個方法有相同的名字及不同的參數列表,這種情況稱為。3.每個類都有一類特殊的方法,稱為。4.程序中調用方法時,參數傳送采用的機制是1.類是如何定義的?解釋類的特性及它的幾個要素。的類根據實現功能的不同,劃分成不同的集合,每個集合稱為一個包。核心API中有眾多的包。些可利用的手段,即可通過哪些函數來操作這些數據。修飾符class類名[extends父類名]{修飾符類型成員變量1;修飾符類型成員變量2;修飾符類型成員方法1(參數列表)方法體}修飾符類型成員方法2(參數列表)(類型局部變量方法體}類定義的第一行是類頭,關鍵字class表明這里定義的是一個類。class前的修飾符允許類名是用戶為該類所起的名字,它應該是一個合法的標識符,并盡量遵從命名約定。extends是關鍵字。如果所定義的類是從某一個父類派生而來,那么,父類的名字應寫在extends之后。如果不寫的話,則表明隱式繼承于Object類。不允許多重繼承,所以如果它可以被同一個包中的對象使用。類還可以是final的,表明它不可以再有子類,與之相對2.在程序中,類和對象有什么區(qū)別?以是不同的。所以每個對象有區(qū)別于其他對3.static關鍵字是什么意思?4.什么叫做靜態(tài)方法和靜態(tài)變量,它們同普通的成員方法和成員變量之間有何區(qū)別?如果在創(chuàng)建類的對象實例前就需要調用類中的某個方法,那么將該方法標記static關鍵字即可實現。標記了static關鍵字的方法稱為靜態(tài)方法,或稱類方法。個變量,也就是對任何一個實例來講,這個屬性的值都是一樣的。這樣的變量稱為類變量,也叫靜態(tài)變量??梢哉f靜態(tài)變量被類的多個靜態(tài)變量和靜態(tài)方法與普通的成員變量和成員方法間的區(qū)別主要體現在以下幾方面:(1)類的每個對象具有它自己的、在類中定義的所有實例變量的副本,但對于靜態(tài)變(2)靜態(tài)變量的生命期和實例變量的生命期也是不同的,每次實例化一個對象時,都量從某種意義上來說相當于其他程序設計中(3)在使用上,成員方法與靜態(tài)方法的形式也不一樣。靜態(tài)方法可以通過一個指向類(4)靜態(tài)方法中不能使用this和super關鍵字,不能調用非靜態(tài)方法,只能訪問所屬5.什么情況下使用靜態(tài)變量?用的訪問。8.new操作符完成哪些功能?解答:new運算符創(chuàng)建指定類的一個新實例(對象)。然后調用類的構造方法設置新生9.中訪問控制權限分為幾種?它們所對應的表示關鍵字分別是什么?意義如何?默認。這些修飾符既可以用來修飾類,又可以用●public:用public修飾的成分表示是公有的,也就是它可以被其他任何對象訪問?!駊rivate:和它的名字“私有”一樣,類中限定為private的成員只能被這個類本身●protected:用該關鍵字修飾的成分是受保護的,只可以被同一包內的類及其子類的這3個限定符不是必須寫的,如果不寫,則表明是默認的,相應的成分可以被所在包中訪問權限修飾符列在表4-1中。表4-1訪問權限修飾符類型無修飾符同一類是是是是同一包中的子類是否是是同一包中的非子類是否是是不同包中的子類否否是是不同包中的非子類否否否是10.什么是自動裝箱、自動拆箱?解答:自動將基本數據類型轉為對應的包裝類的過程稱為自動裝箱(Autoboxing)。逆向的自動轉換稱為自動拆箱(unboxing)。1.閱讀下列程序,請寫出該程序的輸出結果。voidchange3(PassTeSystem.out.printIn("Currentpt.類assTest中定義了3個方法,都是在方法內對帶入的參數進行修改,為的是考查修改changel的參數是int型變量,帶入的實參是整型變量i,值是22。changel內將形參值修改為100,退出返回到main中后,變量i的值不會改變。為"Right",退出后,變量s的值也不會改變。change3的參數是PassTest類型,帶入的實參是對象pt,實際上帶入的是pt的地址。在change3內改變的是參數對象中的一個成員變量的值。返回后,實參地址沒有變化,但這個引用所指向的內存塊內,對應成員變量的值改變了。voidchangel(intpi){pi=100;System.out.println("函數內的形參pi的地址是:"+System.identityHashCode(pi));System.out.println("函數內的形參ps的地址是:"+System.identityHashCode(ps)):}po.m_float=100.0f;System.out.println("函數內的形參po的地址是:"+System.identityHashCode(po));System.out.println("函數外的實參i的地址是:"+System.identityHashCoSystem.out.println("函數外的實參pt的地址是:"+System.identityHashCode(pt));System.out.printIn("Currentpt.m_floatis"+pt.m函數外的實參i的地址是:1159190947函數內的形參pi的地址是:1528902577函數外的實參s的地址是:1927950199函數外的實參pt的地址是:9891100442.閱讀下列程序,請寫出該程序的輸出結果。}}publicclassjex6_8{System.out.println(qSystem.out.println(q2.System.out.printIn(q3.}構造方法中要對成員變量賦初值,不同的構造方法可以有不同的賦初值的過程。對象使用固定值10和20進行賦值。創(chuàng)建對象q3時帶了一個本類類型的實參,所以調用的是第三個構造方法。使用實參的成員變量的值為新構造的對象賦值。因為是在同一個類中,可以在第三個構造方法中直接訪//直接訪問r//直接訪問r的成員變量,而不是使用r.width)//直接訪問r的成員變量,而不是使用rheight)}1.設計并實現一個Course類,它代表學校中的一門課程。按照實際情況,將這門課程的相最后使用主函數測試這個類,并修改課程的學分。/定義課程類別Course(StringcourselD,StrinStringcourseType,intclasthis.courseID=courseID;this.courseName=cthis.courseType=courseType;this.classHour=classHour;publicvoidsetCredit(fthis.credit=credit;/得到課程學分數System.out.println("TSystem.out.println(System.out.println("couSystem.out.printIn("courSystem.out.println("classHSystem.out.println("cSystem.out.println("-----------------------publicstaticvoidmain(Stringl)args){//System.out.println("----------------------cs.setCredit(4.0f);//修改課程學分,由3分改為4分2.完善例4.10中類Point的定義,增加幾個基本方法,例如計算給定點到(0,0)的距離、給定兩點間的距離、判斷給定的三個點是否能構成一個等腰三角形等。解答:點的橫縱坐標表示為(x,y),該點到原點的距離d表示為給定兩個點的橫縱坐標分別為(xj,yi)和(x?,y?),則兩個點間的距離d表示為調用Math包中的函數sqrt,可以計算開平方。對于給定的三個點,根據坐標可以計算三個點之間的距離。三條邊能構成三角形的條件是:任何兩邊之和大于第三邊,或是任意兩邊之差小于第三邊。等腰三角形的條件是,其中兩條邊的長度相等。程序實現如下:Point(doublex1,doubley1){publicvoidsetX(doublexl)result=Math.sqrt((tempx*tempx+tempy*tempy));doubletempx1,tempy1,tempx2,tempy2;result=Math.sqrt(tempx1-tempx2)*(tempx1-tempx2)+(tempy1-tempy2)*(tempb=p2.TwoPointDistance(if(((a+b>c)&&(b+c>a)&&(b==c||a==c))result=true;System.out.println("}}Point(Pointp){//獲取橫坐標//獲取橫坐標//構造方法1,兩個默認端點MyLine(Pointpl,Pointp2)}doublex1,yl,x2,y2;//構造方法2,兩個端點//構造方法3,從原點出發(fā)的線段publicbooleanIsOnLine(Pointp)if((p.getYO-y1)/(y2-yl)=(p.getX)-x1)(publicdoubledisPL(Point}publicstaticvoidmain(SSystem.out.println(booleanresult=line.Is4.設計并實現一個MyCircle類,它表示圓。圓心及半徑是它的屬性,定義一些基本方法,解答:圓的面積、周長的計算都非常簡單。如果圓心之間的距離大于兩個圓半徑之和,則兩個圓是相離的。否則就是相交的。本題中,用到了題2中的Point類和題3中的MyLine類。程序實現如下:}}}}}}}publicdoubleTwoPointDistance(Pointp){//求到另一點的距離}e2=newPoint(0.0,0.}//線段的兩個端點//構造方法1,兩個默認端點MyLine(Pointpl,PoinMyLine(Pointpl){//構造方法2,兩個端點//構造方法3,從原點出發(fā)的線段publicbooleanIsOnLinif(p.getYO-y1)/(y2-y1)=(p.getX()-x1)/(dis=Math.abs(a*p.getX()+b*p.getYO+c)/Ma}}publicbooleanIsOverlap(MyCirclemc){dis=this.getCenter().TwoPointDif(dis<=this.getRadius()+mc.getRadius())returntrue;publicvoidLineAndCircle(MyLinePointp=newPoint(x,y);MyCirclemy2=newMyCircle(p,r);第五章數組和字符串等號左側的方括號與數組名的位置是可以交換的,故4個選項中等號左側的格式都是允許的。對于二維數組,等號右側是兩對方括號,選項A中只有一對方括號。2.下列選項中,能夠實例化一個數組的是A.intarrayl={2,3,4,5,6,7};B.intarray2[]={2,3,4,5,6,7,C.int]array3=int[30];D.int選項A中,聲明變量array1時沒有使用方括號。選項C中沒有關鍵字new。選項D中沒有3.設字符串變量sl=newString(""),s2=newString(""),則以下表達式的值為真的是【】A.pareTolgnoreCase(s2)B.s1.equals(s2)C.pareTo(s2)值。compareTo方法返回的也是int值。另外,==判定兩個對象是不是同一個。題目中所給的s1和s2是分別創(chuàng)建的兩個對象,兩者4.以下程序代碼中,能正確創(chuàng)建數組的是=newint[5];。選項B存在語法錯誤。選項D中,左側方括號中不能出現5。A.intd[4]={1,2,3,4};C.intc={1,2,3};參見第4題的解釋。I中,聲明了含5個字符串的數組,然后通過循環(huán)語句給各數組元素賦值空串。Ⅱ中直接給數組初始化了5個空串。Ⅲ中有語法錯誤,IV中創(chuàng)建的字符串數組中保存的是字符串null,二、填空題1.提供的用于處理可變字符串的字符串類是3.使用運算符==判定兩個String類型的對象是否相等,此時判定的是。答案:兩個對象在內存中的存儲空間是否相等?;蛘哒f,兩個對象是不是同一個對象。4.數組靜態(tài)初始化是指答案:在數組聲明的同時給數組元素賦初值。5.數組動態(tài)初始化時,必須使用分配空間。6.數組下標可以是。答案:整型常量或表達式。答案:026668。replace是將所有的3替換為6。三、簡答題1.在中是如何完成數組邊界檢查的?解答:在中,數組下標從0開始,數組中的元素個數記錄在變量length中,這是數組對象中唯一的數據成員變量。使用new創(chuàng)建數組時系統(tǒng)自動給length賦值。數組一旦創(chuàng)建完畢,其大小就固定下來。程序運行時可以使用length進行數組邊界檢查。如果發(fā)生越界訪問2.請簡述數組創(chuàng)建的過程。如何創(chuàng)建一個對象數組?解答:數組的創(chuàng)建分兩個步驟,一是定義,二是初始化。定義一個數組只是對數組的聲明,此時系統(tǒng)還沒有為數組分配任何內存空間,因此還不能訪問它的任何元素。必須經過數組初始化后,才能應用數組的元素。定義加初始化這個過程就是數組的創(chuàng)建過程。從數組的創(chuàng)建過程中可以看出,初始化是很關鍵的一步。數組的初始化分為靜態(tài)初始化和動態(tài)初始化兩種。所謂靜態(tài)初始化就是在定義數組的同時對數組元素進行初始化,靜態(tài)初始化可用于任何元素類型,初值塊中每個位置的每個元素對應一個引用。定義數組并進行靜態(tài)初始化的格式如下:將需要賦給數組元素的值列在大括號中,并以逗號分隔。與之相對應的,動態(tài)初始化是使用運算符new為數組分配空間,這和所有對象是一樣的。數組說明中方括號內的數字表示數組元素個數。類型[]數組名=new類型[數組大小];如果前面已經對數組進行了聲明,則此處的type可以不寫。比如,已經聲明了字符類型的這一行創(chuàng)建了有20個字符的數組。對于復合數據類型的數組,使用運算符new只是為數組本身分配空間,并沒有對數組的元素進行初始化。所以對于復合數據類型的數組,需要經過兩步進行空間分配。類型數組名[]=new類型[數組大小];若有Point類定義如下:}}}在聲明Point[]points;后,語句points=newPoint[100];只創(chuàng)建了有100個Point型變量points[0]=newPointSystem.out.println("p[0].x="+points[0].xSystem.out.println("p[1].x="+points[1].x3.數組的內存分配是如何完成的?4.程序5.2的for語句中使用的兩個常數(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022幼兒園大班社會領域教學方案10篇
- 玻璃纖維薄片項目年終總結報告
- 民兵應急分隊組織實施應急演練
- 石河子大學《市場調查與預測實訓》2023-2024學年第一學期期末試卷
- 石河子大學《建筑設計》2022-2023學年第一學期期末試卷
- 石河子大學《復變函數與積分變換》2022-2023學年第一學期期末試卷
- 沈陽理工大學《最優(yōu)控制》2022-2023學年期末試卷
- 沈陽理工大學《室內設計原理》2021-2022學年第一學期期末試卷
- 釀酒機器行業(yè)分析研究報告
- 糖糖尿病足的護理
- 2024江蘇省沿海開發(fā)集團限公司招聘23人高頻難、易錯點500題模擬試題附帶答案詳解
- 2024年計算機二級WPS考試題庫380題(含答案)
- 22G101三維彩色立體圖集
- 大學生安全文化智慧樹知到期末考試答案章節(jié)答案2024年中南大學
- 建筑施工安全生產治本攻堅三年行動方案(2024-2026年)
- 人教版小學英語單詞表(完整版)
- DL-T 1476-2023 電力安全工器具預防性試驗規(guī)程
- 國家開放大學《心理健康教育》形考任務1-9參考答案
- MOOC 法理學-西南政法大學 中國大學慕課答案
- 《短視頻拍攝與制作》課件-3短視頻拍攝的三大技巧
- 【川教版】《生命 生態(tài) 安全》四上第11課《預防流感》課件
評論
0/150
提交評論