




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、習題參考答案Chapter11_1對象客觀世界中的事物都是對象,包括有形的物理對象,可感知的邏輯實體,以及概念化的抽象實體。它有自己的屬性,能夠執(zhí)行特定的操作。類具有相同屬性和操作的一組對象的集合;它描述的不是單個對象,而是“一類”對象的共同特征。其重要性在于它是面向?qū)ο蠹夹g中最重要的結(jié)構(gòu),它支持信息隱藏和封裝,進而支持對抽象數(shù)據(jù)類型(ADT)的實現(xiàn)。1_2略1_3參考圖如下TravelAgencyStaff+Name+Name+Manager+IdCard+Representative+Gender+AddressTravelAgencyStaff+Name+Name+Manager+IdC
2、ard+Representative+Gender+Address+Age+Phone+Degree+Apply()ManagerDirectorA+Hire()4+Fire()+Approve()Agent+Accept()+Reject()Guide+Cerld+CerDue110*0*圖11_4UML與面向?qū)ο骍ML是一種定義良好、易于表達、功能強大且普遍適用的建模語言。它溶入了軟件工程領域的新思想、新方法和新技術。它的作用域不限于支持面向?qū)ο蟮姆治雠c設計,還支持從需求分析開始的軟件開發(fā)的全過程。標準建模語言UML適用于以面向?qū)ο蠹夹g來描述任何類型的系統(tǒng),而且適用于系統(tǒng)開發(fā)的不同階段,從
3、需求規(guī)格描述直至系統(tǒng)完成后的測試和維護。Chapter22_1程序的功能一般通過方法代碼來實現(xiàn)。每個方法都是從其第一行代碼開始執(zhí)行,直至最后一行代碼結(jié)束,期間可以通過代碼來調(diào)用其他的方法,從而完成各式各樣的操作。C#程序的起點是由Main方法定義的,程序總是從Main方法的第一行代碼開始執(zhí)行,在Main方法結(jié)束時停止運行。2_2略(注:不同版本的VisualStudio的菜單項有所區(qū)別)2_3略(注:不同版本的VisualStudio引用的程序集有所區(qū)別)2_4C#源代碼會被編譯為一種通用的中間語言(IL)代碼,該語言類似于低級語言,但其代碼與具體的硬件平臺無關;之后CLR再針對特定的平臺將I
4、L程序翻譯為機器指令,加載所需要的資源并管理執(zhí)行。2_5/動態(tài)鏈接庫程序usingSystem;namespacep2_5classAdderpublicstaticintAdd(inta,intb)returna+b;/控制臺應用程序usingSystem;usingp2_5;namespaceP2_6classProgramstaticvoidMain()Console.WriteLine(請輸入兩個數(shù):);inta=int.Parse(Console.ReadLine();intb=int.Parse(Console.ReadLine();Console.WriteLine(0+1=2,
5、a,b,Adder.Add(a+b);Chapter33_1略3_2第一:值類型的變量直接包含自身的所有數(shù)據(jù),每創(chuàng)建一個變量,就在內(nèi)存中開辟一塊區(qū)域;只有通過變量才能修改它所包含的數(shù)據(jù)。而引用類型的變量只存儲對目標數(shù)據(jù)的引用,每創(chuàng)建一個變量,就增加一個指向目標數(shù)據(jù)的指針;有可能出現(xiàn)多個引用類型的變量指向同一份數(shù)據(jù)的情況,這時修改一個變量就會影響到其它所有的變量。第二:作為方法參數(shù)時,值類型變量傳遞的是數(shù)值,引用類型變量傳遞的是地址,因此如果方法的執(zhí)行代碼修改了變量,對值類型的變量不會有影響,但會改變引用類型的變量。(2)(2)第三:裝箱是將一個值類型轉(zhuǎn)換為一個對象類型(object),而拆箱則
6、是將一個對象類型顯式轉(zhuǎn)換為一個值類型。3_3略3_4對整數(shù)為真,對實數(shù)不一定,因為實數(shù)受到計算機精度的影響。3-5四次執(zhí)行的結(jié)果分別是:3,6,-6,-33-6當兩個操作數(shù)均為布爾類型時,與運算“&”和邏輯與運算“&”的求值效果相同,或運算“|”和邏輯或運算“|”的求值效果相同。但異或運算“八”不存在對應的條件邏輯運算。3-7不是。if-else可進行任意分支,而“?:”操作符要求第二和第三個操作數(shù)的類型必須一致。3-8classProgramstaticvoidMain(stringargs)Console.WriteLine(按任意鍵退出,其它鍵繼續(xù));while(Console.Read
7、Key().KeyChar!=Q)Console.WriteLine(請輸入本金:);doublex=double.Parse(Console.ReadLine();Console.WriteLine(請輸入利率:);doubley=double.Parse(Console.ReadLine();Console.WriteLine(請輸入存款年數(shù):);doublez=double.Parse(Console.ReadLine();Console.WriteLine(本息合計為:);for(inti=0;iz;i+)x=x+x*y;Console.WriteLine(x);Console.Wri
8、teLin(按任意鍵退出,其它鍵繼續(xù).);Console.ReadLine();3-9(1)classProgramstaticvoidMain(stringargs)Console.WriteLine(Pleaseinputanumber:);intn=int.Parse(Console.ReadLine();inti=1,x=1;while(i=n)x=x*i;i+;Console.WriteLine(x);Console.ReadLine();classProgramstaticvoidMain()Console.WriteLine(Pleaseinputanumber:);intn=i
9、nt.Parse(Console.ReadLine();inti=1,x=1;dox=x*i;i+;while(i=n);Console.WriteLine(x);Console.ReadLine();(3)classProgramstaticvoidMain()Console.WriteLine(Pleaseinputanumber:);intn=int.Parse(Console.ReadLine();intx=1;for(inti=1;i=n;i+)x=x*i;Console.WriteLine(x);Console.ReadLine();3-10略3-11classProgramsta
10、ticvoidMain()Console.WriteLine(請輸入一個字符串:);Console.WriteLine(Simp(Console.ReadLine();publicstaticstringSimp(strings)StringBuildersb1=newStringBuilder();for(inti=0;is.Length;i+)while(is.Length-1&si=si+1)i+;sb1.Append(si);returnsb1.ToString();3-12(1)classProgramstaticvoidMain()intsum=0;for(inti=1;i=50;
11、i+)sum+=2*i;Console.WriteLine(sum);Console.ReadLine();(2)classProgramstaticvoidMain()intsum=0,m=1;for(inti=1;i(ComplexNumberc1,ComplexNumberc2)doublea=c1.x*c1.x+c1.y*c1.y;doubleb=c2.x*c2.x+c2.y*c2.y;returnab;publicstaticbooloperator=(ComplexNumberc1,ComplexNumberc2)returna=b|ab;publicstaticboolopera
12、tor=c2);publicstaticbooloperatorc2);4_5不能,因為this表示當前對象,而靜態(tài)成員是通過類型本身而非對象來訪問的。(2)(2)4_6如果字符串格式錯誤的幾率很小,使用Parse方法具有更高的效率;否則應選用TryParse方法來提高程序的可靠性。4_7略4_8publicintGetAge(DateTimebirthday)inty=DateTime.Year,m=DateTime.Month,d=DateTime.Day;if(dbirthday.Day)m-;if(m=size)free-=size;elseConsole.WriteLine(剩余空間
13、不足!);publicvirtualvoidDelete(floatsize)if(free+size0;i-)for(intj=0;j0)Students=studentsj;studentsj=studentsj+1;studentsj+1=s;foreach(Studentsinstudents)Console.WriteLine(s);6_3publicstaticvoidWriteDelegateInfo(Delegatedg)if(dg=null)return;Console.WriteLine(MethodName:0,dg.Method.Name);Console.WriteL
14、ine(MethodBelongType:0,dg.Method.DeclaringType);Console.WriteLine(Target:0,dg.Target);foreach(Delegatedgindg3.GetInvocationList()Console.WriteLine(dg.Method);Console.WriteLine(dg.Target);6_4輸出為:2,3,46_5匿名方法可以把一段代碼直接作為參數(shù)使用,而無需顯式地定義方法的原型。通過捕獲外部變量,匿名方法還能夠?qū)崿F(xiàn)與外部程序的狀態(tài)共享。這不僅能夠簡化程序,提高了代碼的可維護性,還大大方便了程序中的各種計算
15、。6_6事件是委托類型的對象,事件的觸發(fā)方法是該對象的客戶,而事件的處理方法是該對象提供的服務。6_7旅行團所關聯(lián)的導游和負責業(yè)務員是明確的,可以在改變狀態(tài)的方法代碼中訪問這些導游和業(yè)務員對象。而旅行團所關聯(lián)的游客可能不斷變化,采用發(fā)布/訂閱方式能夠方便地通知所有綁定的游客。6_8略Chapter77_1可從以下幾方面考慮1)合理布局:在左上方或正上方提供車次和站名的輸入控件,在中央顯示查詢結(jié)果。方便導航:在查詢結(jié)果中,通過單擊車次和站名可直接顯示相關信息。簡化輸入:允許用戶通過簡拼或雙拼等方式來輸入中文站名。撤銷和恢復:允許用戶回退到上次查詢。等待響應:查詢時間較長時,顯示等待光標,還可先顯
16、示部分查詢結(jié)果。7_2對于不常用的字體族,創(chuàng)建其Font對象時要先檢查用戶計算機上是否安裝了該字體。必要時可隨程序安裝字體。7_3在窗體尺寸改變事件中,通過Form對象的Height屬性來進行控制。7_4通過文本框的KeyPress事件來進行控制:voidtextBox1_KeyPress(objectsender,KeyPressEventArgse)intch=e.KeyChar;if(ch57&ch!=8)e.Handled=false;7_5略7_6如果增加之后的數(shù)值超過控件的Maximum,第二行代碼執(zhí)行后會發(fā)生異常,而第一行代碼會使控件中的數(shù)值等于Maximum。7_7略7_8提示
17、:可參考MSDN幫助中的Control控件文檔。7_9主要方面有:業(yè)務對象與窗體界面綁定,通常是在窗體類中定義一個業(yè)務對象類型的字段成員,通過窗體初始化事件的處理代碼來將對象信息顯示在窗體控件中。在保存對象信息時,通常要檢查窗體控件中對應的輸入信息是否完整和合法,否則應要求用戶重新輸入。如果要在不同的窗體間傳遞對象,那么可將對象變量作為目標窗體的構(gòu)造函數(shù)參數(shù),通過其構(gòu)造函數(shù)來初始化對應的對象字段。如果多個窗體共享一個對象信息,那么在其中一個窗體修改了對象信息后,應及時更新其它窗體的顯示內(nèi)容。Chapter88_1以1000000以內(nèi)的int值為例:staticvoidMain()FileStr
18、eamfs1=newFileStream(num.txt,FileMode.Create);for(inta=1,b=1;a=1000000;a+=b)intt=b;b=a;a=t;intx=a/(224);fs1.WriteByte(byte)x);/寫入2532位a-=x;x=a/(216);fs1.WriteByte(byte)x);/寫入1724位a-=x;x=a/(28);fs1.WriteByte(byte)x);/寫入916位x;fs1.WriteByte(byte)x);/寫入18位fs1.Position=0;Console.Write(請輸入要讀取的數(shù)列項:);inti=i
19、nt.Parse(Console.ReadLine();fs1.Position=4*i;inty=16777216*fs1.ReadByte()+65536*fs1.ReadByte()+256*fs1.ReadByte()+fs1.ReadByte();Console.WriteLine(數(shù)列項為:+y);fs1.Close();8_2提示:創(chuàng)建一個文本文件,在窗體的關閉事件中向文件寫入當前時間,在窗體的啟動事件中讀取上次寫入時間。8_3在控制臺逐行依次輸出48578_4二進制方式對文件的存取效率較高,但編程更為復雜,需要處理字節(jié)類型與其它各種類型之間的轉(zhuǎn)換。文本方式存取文件速度較慢,占用
20、的磁盤容量也較大,但編程更為簡單,只需要把各種類型都按字符串格式處理即可。8_5略8_6應在顯示對話框之前設置的屬性主要有:Filter、Filterindex、InitialDirectory、RestoreDirectory、Multiselect、OverwritePrompt;之后設置的屬性主要有FileName有FileNames。8_7在寫入每個對象時,應首先將對象的類型名寫入文件;在讀取文件時,首先讀取類型名,再根據(jù)不同的類型來使用構(gòu)造函數(shù)創(chuàng)建對象。8_8在寫入文件流時,可通過一個密鑰字符來對文件的每個字節(jié)進行加密,即將字節(jié)與密鑰字符進行與或運算后寫入文件,讀取時再與密鑰字符進行
21、一次與或運算來進行解密:publicvoidSave(BinaryWriterwriter,charkey)charchs=newchar_username.Length;for(inti=0;ichs.Length;i+)chsi=_usernamei八key;writer.Write(chs);chs=newchar_password.Length;for(inti=0;ichs.Length;i+)chsi=_passwordi八key;writer.Write(chs);writer.Write(_staffId八key);publicstaticUserLoad(BinaryRead
22、erreader,charkey)stringusername=reader.ReadString();charchs1=newcharusername.Length;for(inti=0;iusername.Length;i+)chsli=usernamei八key;stringpassword=reader.ReadString();charchs2=newcharpassword.Length;for(inti=0;i列表對象,將元素集合作為參數(shù)傳遞給列表對象的構(gòu)造函數(shù),而后調(diào)用列表對象的Sort方法進行排序。10_6略10_7包括二叉樹節(jié)點類型BTNode和二叉樹類型BinaryTre
23、e兩部分,參考代碼如下。/二叉樹節(jié)點類型/publicclassBTNodeprivateobjectvalue;privateBTNodeleft,right;publicobjectValuegetreturnthis.value;setthis.value=value;publicBTNodeLeftgetreturnleft;setleft=value;publicBTNodeRightgetreturnright;setright=value;publicBTNode(objectobj)value=obj;/二叉樹類型/classBinaryTree:ICollectionpriv
24、ateBTNoderoot;publicBTNodeRootgetreturnroot;publicintCountgetreturnPreTraverse(root).Length;privateBinaryTree()this.root=null;publicBinaryTree(objectobj)this.root=newBTNode(obj);publicBinaryTree(BTNoderoot)this.root=root;publicvoidCopyTo(Arrayarray,intindex)PreTraverse(root).CopyTo(array,index);IEnu
25、meratorIEnumerable.GetEnumerator()returnPreTraverse(root).GetEnumerator();boolICollection.IsSynchronizedgetreturnfalse;objectICollection.SyncRootgetreturnnull;publicstaticobjectPreTraverse(BTNodenode)/前序遍歷if(node=null)returnnull;ArrayListnodes=newArrayList();nodes.Add(node.Value);if(node.Left!=null)
26、nodes.AddRange(PreTraverse(node.Left);if(node.Right!=null)nodes.AddRange(PreTraverse(node.Right);returnnodes.ToArray();publicstaticobjectInTraverse(BTNodenode)/中序遍歷if(node=null)returnnull;ArrayListnodes=newArrayList();if(node.Left!=null)nodes.AddRange(InTraverse(node.Left);nodes.Add(node.Value);if(n
27、ode.Right!=null)nodes.AddRange(InTraverse(node.Right);returnnodes.ToArray();publicstaticobjectPostTraverse(BTNodenode)/后序遍歷if(node=null)returnnull;ArrayListnodes=newArrayList();if(node.Left!=null)nodes.AddRange(PostTraverse(node.Left);if(node.Right!=null)nodes.AddRange(PostTraverse(node.Right);nodes
28、.Add(node.Value);returnnodes.ToArray();publicstaticBinaryTreeEmptyBinaryTreegetreturnnewBinaryTree();classProgramstaticvoidMain()BinaryTreetree1=newBinaryTree(1);inti=1;BTNoder=tree1.Root;while(i中的嵌套類型BvS使用的類型參數(shù)S在A中沒有定義,應將其改為B11_3輸出內(nèi)容如下:2:AsSystem.Int322:BsSystem.Int322.5:BsSystem.Double2.5:AsSystem
29、.Double11_4略11_5staticvoidMain()Listl1=newList();l1.Add(王小紅);l1.Add(周軍);l1.Insert(0,方小白);l1.Add(Smith);l1.Insert(1,Jerry);Console.WriteLine(排序前:);foreach(stringsinl1)Console.Write(s+);l1.Sort();Console.WriteLine(n排序后:);foreach(stringsinl1)Console.Write(s+);11_6提示:將二叉樹節(jié)點類型BTNode改為泛型類型BTNodevT,其value字
30、段/Value屬性類型由object改為T,再修改相應的前序、中序和后序遍歷等方法代碼:publicstaticTPreTraverse(BTNodenode)/前序遍歷if(node=null)returnnull;Listnodes=newList();nodes.Add(node.Value);if(node.Left!=null)nodes.AddRange(PreTraverse(node.Left);if(node.Right!=null)nodes.AddRange(PreTraverse(node.Right);returnnodes.ToArray();publicstati
31、cTInTraverse(BTNodenode)/中序遍歷if(node=null)returnnull;Listnodes=newList();if(node.Left!=null)nodes.AddRange(InTraverse(node.Left);nodes.Add(node.Value);if(node.Right!=null)nodes.AddRange(InTraverse(node.Right);returnnodes.ToArray();publicstaticTPostTraverse(BTNodenode)/后序遍歷if(node=null)returnnull;Listnodes=newList();if(node.Left!=null)nodes.AddRange(PostTraverse(node.Left);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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
提交評論