版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、. 第1章 軟件與軟件工程的概念 1.1 舉出你所知道的應用軟件的例子。 辦公軟件、游戲軟件、財務軟件、銀行軟件、人事管理軟件、工資管理軟件、學籍管理軟件等。 1.2 認為“軟件就是程序,軟件開發(fā)就是編程序?!边@種觀點是否正確?為什么? 認為“軟件就是程序,軟件開發(fā)就是編程序?!边@種觀點是錯誤的。 首先,軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序,數(shù)據(jù)及其相關文檔的完整集合,程序只是軟件的組成部分之一;其次,在軟件開發(fā)中,編程只是軟件開發(fā)過程的一個階段。 1.3 如果將軟件開發(fā)比作高樓大廈的建造,可以將軟件的設計比作什么? 可以將軟件的設計比作建筑設計,軟件設計的成果相當于建筑設
2、計的設計圖紙。 1.4 什么是軟件危機?它有哪些典型表現(xiàn)?為什么會出現(xiàn)軟件危機? 軟件危機:軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。 典型表現(xiàn): (1) 對軟件開發(fā)成本和進度的估計常常很不準確。 用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。 (2) 軟件產(chǎn)品的質量往往靠不住。 (3)軟件常常是不可維護的。 (4)軟件通常沒有適當?shù)奈臋n資料。(5) 軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。(6) 軟件開發(fā)生產(chǎn)率提高的速度,既跟不上硬件的發(fā)展速度,也遠遠跟不上計算機應用(7) 迅速普及深入的趨勢。 產(chǎn)生軟件危機的原因: 除了軟件本身的特點,其原因主要有以下幾個
3、方面: (1) 缺乏軟件開發(fā)的經(jīng)驗和有關軟件開發(fā)數(shù)據(jù)的積累,使得開發(fā)工作計劃很難制定。 (2) 軟件人員與用戶的交流存在障礙,使得獲取的需求不充分或存在錯誤。 (3) 軟件開發(fā)過程不規(guī)范。如,沒有真正了解用戶的需求就開始編程序。 (4) 隨著軟件規(guī)模的增大,其復雜性往往會呈指數(shù)級升高。需要很多人分工協(xié)作,不僅涉及技術問題,更重要的是必須有科學嚴格的管理。 (5) 缺少有效的軟件評測手段,提交給用戶的軟件的質量不能完全保證。 精選. 1.5 什么是軟件工程? 軟件工程是指導計算機軟件開發(fā)和維護的工程學科。采用工程的概念、原理、技術和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術和當前能
4、夠得到的最好的技術方法結合起來,以經(jīng)濟地開發(fā)出高質量的軟件并有效地維護它,這就是軟件工程。 1.6 簡述軟件生存期由哪些主要的階段組成,每一階段的主要任務是什么? (1) 問題定義與可行性研究:問題定義必須回答的關鍵問題是:“要解決的問題是什么”??尚行匝芯恳卮鸬年P鍵問題是:“在成本和時間的限制條件下能否解決問題?是否值得做?”。 (2) 需求分析:這個階段的任務仍然不是具體地解決客戶的問題,而是準確地回答“目標系統(tǒng)必須做什么”這個問題。 (3) 軟件設計:本階段要回答的關鍵問題是“目標系統(tǒng)如何做?”為此,必須在設計階段中制定設計方案,把已確定的各項需求轉換成相應的軟件體系結構。結構中的每一
5、組成部分都是意義明確的構件,此即所謂概要設計。進而具體描述每個構件所要完成的工作,為源程序編寫打下基礎,此即所謂詳細設計。 (4) 程序編碼和單元測試:本階段要解決的問題是“正確地實現(xiàn)已做的設計”,為此,需要選擇合適的編程語言,把軟件設計轉換成計算機可以接受的程序代碼,并對程序結構中的各個模塊進行單元測試,然后運用調試的手段排除測試中發(fā)現(xiàn)的錯誤。要求編寫出的程序應當是結構良好、清晰易讀的,且與設計相一致的。 (5) 集成測試和系統(tǒng)測試:集成測試的任務是將已測試過的模塊按設計規(guī)定的順序組裝起來,在組裝的過程中檢查程序連接的問題。系統(tǒng)測試的任務是根據(jù)需求規(guī)格說明的要求,對必須實現(xiàn)的各項需求,逐項進
6、行確認,判定已開發(fā)的軟件是否符合用戶需求,能否交付用戶使用。為了更有效地發(fā)現(xiàn)系統(tǒng)中的問題,通常這個階段的工作由開發(fā)人員、用戶之外的第三者承擔。 (6) 運行維護:已交付的軟件投入正式使用,便進入運行維護階段。這一階段可能持續(xù)若干年。軟件在運行中可能由于多方面的原因,需要對它進行維護。通常有四種類型的維護:改正性維護、適應性維護、完善性維護和預防性維護。 1.7 常見的軟件生存期模型主要有哪些?每種模型的優(yōu)缺點是什么? 常見的軟件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型和統(tǒng)一過程。 精選. (1) 瀑布模型 優(yōu)點:可強迫開發(fā)人員采用規(guī)范化的方法;嚴格地規(guī)定了每個階段必
7、須提交的文檔;要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質量保證小組的仔細驗證。 缺點:由于瀑布模型幾乎完全依賴于書面的規(guī)格說明,很可能導致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要;用戶往往需要等待很長時間才能看到可以運行的程序;適應需求變更的能力比較差。 適用范圍:瀑布模型只適用于項目開始時需求已確定的情況。 (2) 快速原型模型 優(yōu)點:有助于滿足用戶的真實需求;原型系統(tǒng)已經(jīng)通過與用戶的交互而得到驗證,據(jù)此產(chǎn)生的規(guī)格說明文檔能夠正確地描述用戶需求。 缺點:要求開發(fā)人員快速建立原型。 適用范圍:適用于需求不明確的軟件項目。 (3) 增量模型 優(yōu)點: ? 能在較短時間內向用戶提交可完成一些基本功能的
8、產(chǎn)品,即從第一個構件交付之日起,用戶就能做一些有用的工作。 ? 逐步增加產(chǎn)品的功能可以使用戶有較充裕的時間學習和適應新產(chǎn)品,從而減少一個全新的軟件可能給用戶組織帶來的沖擊。 ? 項目失敗的風險較低,雖然在某些增量構件中可能遇到一些問題,但其他增量構件將能夠成功地交付給客戶。 ? 優(yōu)先級最高的服務首先交付,然后再將其他增量構件逐次集成進來。因此,最重要的系統(tǒng)服務將接受最多的測試。 缺點: ? 在把每個新的增量構件集成到現(xiàn)有軟件體系結構中時,必須不破壞原來已經(jīng)開發(fā)出的產(chǎn)品。 ? 軟件體系結構必須是開放的,即向現(xiàn)有產(chǎn)品中加入新構件的過程必須簡單、方便。 適用范圍:適用于工期緊張、功能可以劃分、比較復
9、雜的軟件項目。軟件工程師必須有較高的技術水平,能夠設計出開放的軟件體系結構。 (4) 螺旋模型 優(yōu)點: 精選. ? 對可選方案和約束條件的強調有利于已有軟件的重用,也有助于把軟件質量作為軟件開發(fā)的一個重要目標; ? 減少了過多測試或測試不足所帶來的風險; ? 在螺旋模型中維護只是模型的另一個周期,在維護和開發(fā)之間并沒有本質區(qū)別。 缺點:螺旋模型是風險驅動的,因此要求軟件開發(fā)人員必須具有豐富的風險評估經(jīng)驗和這方面的專門知識,否則將出現(xiàn)真正的風險:當項目實際上正在走向災難時,開發(fā)人員可能還以為一切正常。 適用范圍:適用于內部開發(fā)的大型軟件(開發(fā)周期長、比較容易受到社會因素影響的軟件項目),軟件開發(fā)
10、人員具有豐富的風險評估知識和經(jīng)驗。 (5) 噴泉模型 優(yōu)點:在開發(fā)過程中使用統(tǒng)一的概念和方法,各階段之間沒有明顯的界限,容易實現(xiàn)各個開發(fā)過程的多次反復迭代,達到了認識的逐步深化,降低了出錯的可能性。 缺點:由于各個階段之間的界線不明確,容易造成軟件開發(fā)過程的無序。 適用范圍:適用于面向對象的軟件開發(fā)。 (6) 統(tǒng)一過程 優(yōu)點:提高了團隊生產(chǎn)力,在迭代的開發(fā)過程、需求管理、基于組件的體系結構、可視化軟件建模、驗證軟件質量及控制軟件變更等方面,針對所有關鍵的開發(fā)活動為每個開發(fā)成員提供了必要的準則、模板和工具指導,并確保全體成員共享相同的知識基礎。它建立了簡潔和清晰的過程結構,為開發(fā)過程提供了較大的
11、通用性。 缺點:RUP只是一個開發(fā)過程,并沒有涵蓋軟件過程的全部內容,例如它缺少關于軟件運行和支持等方面的內容;此外,它沒有支持多項目的開發(fā)結構,這在一定程度上降低了在開發(fā)組織內大范圍實現(xiàn)重用的可能性。 適用范圍:適用于基于構件的軟件開發(fā)。 第2章 軟件工程方法與工具 2.1 軟件工程的三種基本要素是什么,各自的作用是什么? 軟件工程的三種基本要素是方法、工具和過程。 精選. (1) 軟件工程方法(method)為建造軟件提供技術上的解決方法(“如何做”)。目前使用得最廣泛的方法是傳統(tǒng)方法(結構化方法)和面向對象方法。 (2) 工具為方法的運用提供自動的或半自動的軟件支撐環(huán)境。 (3) 過程是
12、為了獲得高質量的軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。 2.2 簡述傳統(tǒng)方法和面向對象方法的特點。 (1) 傳統(tǒng)方法的特點 傳統(tǒng)方法也稱為生命周期方法或結構化范型。它采用結構化技術來完成軟件開發(fā)的各項任務。這種方法學把軟件生命周期的全過程依次劃分為若干個階段,然后順序地逐步完成每個階段的任務。每一個階段的開始和結束都有嚴格的標準,對于任何兩個相鄰的階段而言,前一個階段的結束標準就是后一階段的開始標準。 傳統(tǒng)方法的主要缺點是在適應需求變化方面不夠靈活,另外,結構化方法要么面向行為,要么面向數(shù)據(jù),缺乏使兩者有機結合的機制。 (2)面向對象方法的特點 面向對象方法把數(shù)據(jù)和
13、行為看成同等重要,是將數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結合起來的方法,這也是面向對象方法與傳統(tǒng)方法的重要區(qū)別。 面向對象方法的出發(fā)點和基本原則,是盡量模擬人類習慣的思維方式,使開發(fā)軟件的方法和過程盡可能接近人類認識問題和解決問題的方法與過程,從而使描述問題的問題空間與其解空間在結構上盡可能一致。對于大型、復雜及交互性比較強的系統(tǒng),使用面向對象方法更有優(yōu)勢。 2.3 形式化方法的特點是什么? 形式化方法的主要特點是: (1) 軟件需求規(guī)格說明被細化為用數(shù)學記號表達的詳細的形式化規(guī)格說明; (2) 設計、實現(xiàn)和單元測試等開發(fā)過程由一個變換開發(fā)過程代替。通過一系列變換將形式的規(guī)格說明細化成為程序。 2.5
14、安裝Rational Rose2000/2002/2003,并練習基本操作。 略。 精選. 第3章 軟件需求獲取與結構化分析方法 3.1 為什么結構化分析要叫“結構化”?有其他可替代的術語嗎? “結構化”一詞應來源于“結構化程序設計”,先有“結構化程序設計”的思想,后有結構化設計及結構化分析。有時稱傳統(tǒng)的分析方法,指的就是結構化分析方法。 3.2頂層數(shù)據(jù)流圖或稱環(huán)境圖的作用是什么? 頂層數(shù)據(jù)流圖(或稱環(huán)境圖)僅包括一個數(shù)據(jù)處理過程,也就是要開發(fā)的目標系統(tǒng)。其作用如下: (1) 確定系統(tǒng)在其環(huán)境中的位置,與系統(tǒng)有聯(lián)系的外部實體(包括硬件、軟件、組織機構及人)有哪些。 (2) 通過確定系統(tǒng)的輸入和
15、輸出與外部實體的關系確定系統(tǒng)的邊界,也就是要確定哪些功能或處理屬于系統(tǒng)范圍之內,哪些屬于系統(tǒng)范圍之外,需要由其他系統(tǒng)處理或人工處理。 3.3 在對數(shù)據(jù)流圖進行分解時需要注意哪些問題? 在對數(shù)據(jù)流圖進行分解時,需要注意以下兩個問題: (1) 當對數(shù)據(jù)流圖分層細化時必須保持信息連續(xù)性,也就是說,當把一個處理分解為一系列處理時,分解前和分解后的輸入/輸出數(shù)據(jù)流必須相同。 (2) 注意分層細化時對編號的處理方法。 3.4 銀行存款業(yè)務如下:客戶到銀行柜臺存款時,首先填寫存款單(包括帳號、姓名、存款金額、存款類型),如果還沒有開戶,則需要先開戶,填寫開戶單(包括姓名、身份證號、地址、電話、是否留密碼)。
16、填寫完存款單或開戶單后,交給營業(yè)員,營業(yè)員將存款單或開戶單信息輸入計算機,系統(tǒng)記錄開戶信息或存款單信息,如果是開戶并選擇留密碼,則需要客戶輸入密碼。最后印出開戶單或存款單給用戶。請畫出銀行存款業(yè)務的分層數(shù)據(jù)流圖(至少畫出兩層)。 (1) 識別外部實體及輸入輸出數(shù)據(jù)流 外部實體:儲戶、業(yè)務員。 輸入數(shù)據(jù)流:存款單,開戶單,密碼??梢詫⒋婵顔魏烷_戶單抽象為事務。 輸出數(shù)據(jù)流:存款單,開戶單。 (2) 頂層數(shù)據(jù)流圖 精選. 一層數(shù)據(jù)流圖(3) 對銀行儲蓄系統(tǒng)進行分解,從大的方面分解為接收事務、處理開戶、處理存款三部分, 得到一層數(shù)據(jù)流圖。 (4) 二層數(shù)據(jù)流圖“處理存款”及“處理開戶”進行進一步分解
17、,得到二層數(shù)據(jù)流圖,即處理存款的 對 數(shù)據(jù)流圖和處理開戶的數(shù)據(jù)流圖。 處理存款的數(shù)據(jù)流圖 精選. 處理開戶的數(shù)據(jù)流圖 圖。3.5 按照以下描述,畫出ER章和節(jié)都具有標題和序號屬每一章包含許多節(jié)、一本教材由許多章組成,小結和習題組成, 性。 ER圖如下:標序標序 教節(jié) 小結 習題 精選. 結構化設計方法4章 第 4.1 當你“編寫”程序時你設計軟件嗎?軟件設計和編碼有什么不同嗎?軟件設計包括概要設計和詳細設計,編碼是將詳細在“編寫”程序時并沒有設計軟件。 設計中的過程描述轉換成用程序設計語言來描述。復雜問題需要較少的工作去解決?這樣的情況對模塊化觀點有什么4.4 是否存在一種情況: 影響?通過對
18、復雜的問題進行合理分解,分解為若干個相對簡單及獨立的子問題,就可以用每個子問題用單獨的模塊去解這種情況能夠較好地支持模塊化的觀點,較少的工作去解決。決,模塊之間應該是高內聚、低耦合的,這樣才能減少工作量,否則,雖然每個模塊的工作 簡單了,但模塊之間的聯(lián)系很復雜,也增加了問題解決的難度和工作量。所描述的銀行存款業(yè)務的軟件結構,并使用改3用面向數(shù)據(jù)流的方法設計第章習題3.44.8 進方法對模塊結構進行精化。 給出的數(shù)據(jù)流圖進行精化,確定其邊界,如下圖所示。3(1) 對第章習題3.4 對上圖按事務型數(shù)據(jù)流進行處理,完成第一級分解,得到頂層和一層模塊結構圖。(2) 精選. 存款業(yè)務 輸入數(shù)據(jù) 輸出數(shù)據(jù)
19、調度 第一級分解后的結構圖完成第二級分解。對上圖所示的“輸入數(shù)據(jù)”、“輸出數(shù)據(jù)”和“調度”模塊進行(3) 分解,得到未經(jīng)精化的輸入結構、輸出結構和事務結構。 輸入數(shù) 輸入密輸入事務 未經(jīng)精化的輸入結構 輸出數(shù)據(jù) 打印開戶單 打印存款單 未經(jīng)精化的輸出結構 調度 處理開戶 處理存款 記錄存款信息記錄開戶信息記錄密碼 未經(jīng)精化的事務結構 精選. 將上面的三部分合在一起,得到初始的軟件結構,如下圖所示。 存款業(yè)務 調度輸入數(shù)據(jù) 輸出數(shù)據(jù) 輸入密碼輸入事務 處理存款 處理開戶 打印存款單 打印開戶單 記錄存款信息 記錄開戶信息 記錄密碼 初始軟件結構圖 (4) 對軟件結構進行精化。 1) 由于調度模塊
20、下只有兩種事務,因此,可以將調度模塊合并到上級模塊中,如圖所示。 存款業(yè) 處理開戶 輸出數(shù)據(jù) 處理存款輸入數(shù)據(jù) 輸入事務輸入密碼 記錄存款信息 記錄開戶信息 記錄密碼 打印存款單 打印開戶單 將調度模塊合并到上級模塊后的軟件結構 2) “記錄密碼”模塊的作用范圍不在其控制范圍之內(即“輸入密碼”模塊不在“記錄密碼”模塊的控制范圍之內),需對其進行調整,如圖所示。 存款業(yè)務 輸出數(shù)據(jù) 輸入事務處理存款處理開戶 記錄存款信息記錄開戶信息打印開戶單 記錄密碼 打印存款單精選 輸入密碼. 3) 提高模塊獨立性,對模塊結構進行調整,如下圖所示。 存款業(yè)務 處理開戶 處理存款輸入事務 打印開戶單記錄開戶信
21、息 記錄密碼記錄存款信息 打印存款單 輸入密碼 調整后的模塊結構圖4.9 將大的軟件劃分成模塊有什么好處?是不是模塊劃分得越小越好?劃分模塊的依據(jù)是什么? 將大的軟件劃分成獨立命名且可獨立訪問的模塊,不同的模塊通常具有不同的功能或職責。這種方法有利于將復雜的問題簡單化,是分而治之策略的具體表現(xiàn)。 盡管模塊分解可以簡化要解決的問題,但模塊分解并不是越小越好。當模塊數(shù)目增加時,每個模塊的規(guī)模將減小,開發(fā)單個模塊的成本確實減少了;但是,隨著模塊數(shù)目增加,模塊之間關系的復雜程度也會增加,設計模塊間接口所需要的工作量也將增加。 劃分模塊的依據(jù)是,模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系。 4.11
22、 結構化程序設計禁止使用goto語句嗎?如果程序中使用了goto語句,是否就可以斷定它是非結構化的? 結構化程序設計并不禁止使用goto語句。如果程序中使用了goto語句,并不能斷定它是非結構化的。 4.12 對于給定的算法,如何判斷它是否是結構化的? 對于給定的算法,如果符合以下三條原則,就可以判斷它是結構化的。 (1) 使用語言中的順序、選擇、重復等有限的基本控制結構表示程序邏輯。 (2) 選用的控制結構只準許有一個入口和一個出口。 (3) 程序語句組成容易識別的塊(Block),每塊只有一個入口和一個出口。 4.13 對于圖4-49所示的流程圖,試分別用N-S圖和PAD表示之。 精選.
23、START P F T A END B T Q F 流程圖圖4-49 如下:對應的PAD 對應的N-S圖如下: Awhile P while P A B B until !Q until !Q 的數(shù)數(shù)組中找出值為item圖4-50所示的流程圖完成的功能是使用二分查找方法在table4.14 是否存在。 判斷此算法是否是結構化的,說明理由。(1) N-S圖表示。若算法是非結構化的,設計一個等價的結構化算法,并用(2) 精選. 開始 i(startfinish)/2 T T T F F F T F F start=i+1 flag=0 table(i)=item table(I)<item
24、F T T flag=1 table(i)>item finish=i-1 (finish-start)>1 table(start)=item table(finish)=item 結束 二分查找算法的流程圖圖4-50 精選. (1) 不是結構化的,最上面的循環(huán)有兩個出口,最下面的分支有三個入口。(2) 等價的結構化算法如下: (STARFINISH)/2(FINISH-START)>1 && TABLE(I)!=ITEM(STARFINISH)/2TABLE(I)<ITEMFTFINISH=I-1START=I+1TABLE(START)=ITEM
25、| TABLE(FINISH) =ITEM | TABLE(I)=ITEM F T FLAG=0 FLAG=1 或者 FLAG0 (FINISH-START)>1 && FLAG=0 I(STARTFINISH)/2 TABLE(I)=ITEM T F FLAG=1 TABLE(I)<ITEM T F START=I+1 FINISH=I-1 TABLE(START)=ITEM | TABLE(FINISH) =ITEM T F FLAG=1 精選 . 或FLA0(FINISH-START)>=0 && FLAG=0(STARFINISH)/2
26、TABLE(I)=ITEMFTFLAG=1TABLE(I)<ITEMTSTART=I+1FINISH=I-1 4.15 使用自頂向下、逐步細化方法設計算法,完成下列任務:產(chǎn)生一個1010的二維隨機整數(shù)方陣,先求出每一行的最大值和每一列的最小值;然后求10個最大值中的最小者,10個最小值中的最大者;最后求這兩個數(shù)之差的平方。 (1) 首先寫出下面的程序框架: main () 定義1010的二維整數(shù)數(shù)組A,長度為10的一維數(shù)組B, C; 建立1010的二維隨機整數(shù)數(shù)組A;- - - - - - - - - - - - - - - - - - - 1 求A中每一行的最大值數(shù)組B; - - -
27、- - - - - - - - - - - - - - - - - 2 求A中每一列的最小值數(shù)組C; - - - - - - - - - - - - - - - - - - - - 3 minOfB; B求數(shù)組中的最小值 - - - - - - - - - - - - - - - - - - - - 4 - - - - - - - - - - - - - - - - - - - - 5 maxOfC; 中的最大值C求數(shù)組 (minOfB- maxOfC)2 result; 對后面加標記的部分進行細化(2) main () 定義10的一維數(shù)組B, C;,長度為1010的二維整數(shù)數(shù)組A A*/ -
28、 - - - - - - - - - - - - - - - - - 110/*建立10的二維隨機整數(shù)數(shù)組 for (i=0; i<=9; i+) for (j=0; j<=9; j+) Ai,j; 產(chǎn)生隨機整數(shù) B*/ - - - - - - - - - - - - - - - - - - - - 2數(shù)組中每一行的最大值A求/* for (i=0; i<=9; i+) 行的最大值iA求數(shù)組第Bi; -2.1 中每一列的最小值A求/*C*/ - - - - - - - - - - - - - - - - - - - - 3數(shù)組 精選 . for (j=0; j<=9;
29、j+) 求數(shù)組A第j列的最小值Cj; -3.1 - - - - - - - - - - - - - - - - - - - - 4/*求數(shù)組B中的最小值minOfB*/ minOfB = B0; for (i=1; i<=9; i+) if (minOfB < Bi) minOfB = Bi; - - - - - - - - - - - - - - - - - - - - 5maxOfC*/ 求數(shù)組C中的最大值 /* maxOfC = C0; for ( i=1; i<=9; i+) if (maxOfC>Ci) maxOfC = Ci; result; (minOfB
30、- maxOfC)2 進行細化。具體略。3.1(3) 下一步可以繼續(xù)對2.1和4.16 設計算法完成下列任務:輸入一段英文后,無論輸入的文字都是大寫,還是小寫,或大小寫任意混合,都能將其整理成除每個句子開頭字母是大寫外,其他都是小寫的文字。 假設在輸入的文字中,兩個單詞間只允許是空格、,、.、?、!,則在輸出的文字中,大寫的情況有以下幾種: (1) 整段文字的第一個字母是大寫; (2) “.”后的第一個字母是大寫; (3) “?”后的第一個字母是大寫; (4) “!”后的第一個字母是大寫; 設變量a存儲輸入的字符串,變量b存儲結果字符串,變量c存儲當前處理的字符,變量e存儲c之前的字符(當c為
31、第一個字符時除外)。算法如下: 輸入字符a,n = strlen(a)如的第一個字符是字母,則轉成大寫 b0=a0 for ( i=1; i<n; i+)c = ai, e=ai-1 是字 TF屬.? TF 改大改小bi=c精加字符串結束標輸出字符 . 第5章 編碼 5.1 有人說程序編好后能上機運行就可以了,為什么還要講究風格和可讀性呢?你覺得對嗎?為什么? 對于學生的練習題和作業(yè)題,程序編好后能上機運行,一般認為任務就完成了。但對于實際開發(fā)的項目來說,任務并沒有結束。編碼人員編寫完程序后,要對自己的程序進行單元測試,測試人員要進行集成測試和系統(tǒng)測試,提交用戶使用后,還需要對軟件進行持
32、續(xù)的維護修改工作。在軟件開發(fā)和維護過程中,都需要閱讀程序。道理很簡單,如果需要對某段程序進行修改,首先要讀懂,閱讀程序是軟件開發(fā)和維護過程中的一個重要組成部分,而且讀程序的時間比寫程序的時間還要多。所以,程序的風格和可讀性很重要,具有良好的程序風格和可讀性的程序,有助于對程序的正確理解,可以大大減少閱讀理解程序的時間,從而提高維護工作的效率。 5.2 一般情況下,程序的效率和清晰性相比哪一個更重要? 在計算機發(fā)展的早期,由于CPU效率低,內存小,程序在運行時容易出現(xiàn)運行時間太長或內存溢出問題。因此,人們在編寫程序時,很注重程序的時間效率和空間效率,而不太注重程序的清晰性。 隨著計算機硬件性能的
33、飛速發(fā)展以及軟件規(guī)模和復雜性的急劇增加,這種情況已經(jīng)發(fā)生了根本的轉變,程序的清晰性越來越受到重視,程序的清晰性不好會給測試、維護修改帶來困難,這對于規(guī)模龐大和復雜的軟件尤其明顯。 軟件運行的效率主要取決于軟件的體系結構及算法,編碼階段雖然也有機會提高效率,但效果并不明顯。對于效率沒有特殊嚴格要求的系統(tǒng)來說,要將程序的清晰性放在第一位,在不影響清晰性的情況下,去改進效率。 5.6 在一行內只寫一條語句,并且采取適當?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。許多程序設計語言允許在一行內寫多個語句。但這種方式會使程序可讀性變差。下面是一段排序程序,請對其編碼風格進行改進,以增加其可讀性。 for
34、(i=1; i<=n-1; i+) for (j=1; j<=n-i; j+) if (aj>aj+1) temp=aj; aj=aj+1; aj+1=temp; 改進后的代碼如下: for (i=1; i<=n-1; i+) for (j=1; j<=n-i; j+) if (aj>aj+1) temp=aj; aj=aj+1; 精選 . aj+1=temp; 請對下面代碼的布局進行改進,使其符合規(guī)范其更容易理解。5.7 for (i=1; i<=n-1; i+) t=i; for (j=i+1; j<=n; j+) t=j;if (aj<
35、;at) if (t!=i) temp=at; at=ai; ai=temp 改進后的代碼如下: for (i=1; i<=n-1; i+) t=i; for (j=i+1; j<=n; j+) if (aj<at) t=j; if (t!=i) temp=at; at=ai; ai=temp 的程序,注意編碼風格。使用你熟悉的語言編寫出習題5.84.15 的程序:C語言編寫的習題4.15下面為使用 椣據(jù)畬敤尠慭桴栮 椣據(jù)畬敤尠瑳楤?屨 椣據(jù)畬敤尠瑳湯擴栮 椣據(jù)畬敤尠楴敭栮1010的二維數(shù)組a的每一行的最大值存入一維數(shù)組b,每一列的最小值存入一/* 求維數(shù)組c,minOfB存
36、儲數(shù)組b的最小值,maxOfC存儲數(shù)組c的最大值,result存儲minOfB與maxOfC之差的平方。*/ 精選 . int main() int a1010, b10,c10; int i,j,minOfB, maxOfC, result; /*產(chǎn)生隨機數(shù)種子 */ srand(unsigned int)time(NULL); 10 10/*建立的二維隨機整數(shù)數(shù)組a*/ for(i=0;i<=9;i+) for (j=0; j<=9; j+) 1-100之間的隨機數(shù)aij=rand()_x0010_0+1; /產(chǎn)生 中每一行的最大值數(shù)組求ab*/ /* for (i=0; i&
37、lt;=9; i+) a第ibi */行的最大值 /*求數(shù)組 bi=ai0; for (j=1; j<=9; j+) if (aij>bi) bi = aij; ac*/ 中每一列的最小值數(shù)組 /*求 for (j=0; j<=9; j+) 第jcj; */列的最小值求數(shù)組 /*a cj=a0j; for (i=1; i<=9; i+) if (aij<cj) cj = aij; minOfB*/ b 中的最小值 /*求數(shù)組 minOfB = b0; for (i=1; i<=9; i+) minOfB = bi; if (minOfB > bi) 中
38、的最大值maxOfC*/ c /*求數(shù)組 maxOfC = c0; for (i=1; i<=9; i+) if (maxOfC<ci) maxOfC = ci; result = pow(minOfB- maxOfC, 2); 牰湩晴尨結果是:%d,result); return(result); 5.9使用你熟悉的語言編寫出習題4.16的程序,注意編碼風格。 的程序:4.16C語言編寫的習題下面為使用#include stdio.h #include string.h #include ctype.h /*將一段英文輸入變量a(假設兩個單詞間只允許是空格、,、.、?、!),將其
39、整理成每個句子開頭字母是大寫、其他都是小寫的字符串存儲在變量b中。變量c存儲當前處理的字 精選. 符,變量e存儲c之前字符。*/ void main() char a1000, b1000, c,e; int i,n; gets(a); n=strlen(a); /將整段的第一個字母轉成大寫。 if(isalpha(a0) a0=toupper(a0); b0=a0; /處理第一個字符之后的每個字符,將.?!后面的字母改為大寫,其他改為小寫。 for (i=1; i<n; i+) c=ai; e=ai-1; if (isalpha(c) if(strchr(.?!,e) c=touppe
40、r(c); else c=tolower(c); bi=c; bn='0' puts(b); 第6章 軟件測試方法 6.5 假設汽車的車牌號可由車主人在規(guī)定范圍內自選,若其規(guī)定為: (1) 車牌上應有7個字符; (2) 為首的字符限定為漢字“京”; (3) 第2個字符可任選一字母(AZ); (4) 第37個字符可選任意數(shù)字。 請為相關的處理程序采用等價類劃分方法設計等價類表及相應的測試用例。 等價類表 精選 . 輸入數(shù)據(jù) 有效等價類 無效等價類0個)>個字符個個非“京”“京”首字非字母字母個字非數(shù)字3個字數(shù)字 測試用例如下: 1)京H87774 (1),(4),(6),(
41、8) 2)京H8777 (2) 3)京H877745 (3) 4)冀H87774 (5) 5)京987774 (7) 6)京BA7774 (9) 6.6 比較測試與測試,說明其異同。 測試與測試都是集成測試之后所進行的測試,都屬于系統(tǒng)測試。所不同的是,測試是在開發(fā)環(huán)境中所做的測試,主要由開發(fā)方人員進行。而測試則是在用戶實際工作環(huán)境中所做的測試,不受開發(fā)人員的干預。 設計下列偽碼程序的語句覆蓋和路徑覆蓋測試用例: 補充題:START INPUT(A,B,C) INPUT(A,B,C)Y N IF A>5A>5 THEN X=10 X=1 X=10 精選Y N B>10 . EL
42、SE X=1 END IF IF B>10 THEN Y=20 ELSE Y=2 END IF IF C>15 THEN Z=30 ELSE Z=3 END IF PRINT(X,Y,Z) STOP 設輸入數(shù)據(jù)為<A,B,C>,輸出數(shù)據(jù)為<X,Y,Z>。 語句覆蓋測試用例:【<6,12,20>,<10,20,30>】, 【<4,8,10>,<1,2,3>】 路徑覆蓋測試用例: 【<6,12,20>,<10,20,30>】 【<6,12,10>,<10,20,3>】
43、 精選. 【<6,8,20>,<10,2,30>】 【<6,8,10>,<10,2,3>】 【<4,12,20>,<1,20,30>】 【<4,12,10>,<1,20,3>】 【<4,8,20>,<1,2,30>】 【<4,8,10>,<1,2,3>】 第7章 統(tǒng)一建模語言UML概述 7.2 UML中有哪些關系?解釋類圖中聚合和關聯(lián)的相同點和不同點。 在UML中,常見的關系有泛化、聚合、關聯(lián)、依賴和實現(xiàn)。 在類圖中,關聯(lián)是一種結構關系,它描述了兩個或
44、多個類的實例之間的連接關系。聚合描述了整體和部分之間的結構關系。按照關聯(lián)關系的定義,聚合屬于一種特殊的關聯(lián)關系,只不過這種關聯(lián)關系具有明確的整體-部分含義而已。從耦合度的角度看,聚合關系要強于關聯(lián)關系。 7.4 討論順序圖與協(xié)作圖的關系,何時用順序圖建模優(yōu)于協(xié)作圖建模,以及相反的情況。 順序圖和協(xié)作圖都能描述對象間的交互關系,但兩者的側重點不同,順序圖著重表現(xiàn)交互的時間順序,協(xié)作圖則著重表現(xiàn)交互對象的靜態(tài)鏈接關系。但即使他們各有側重,但從語義上來說是等價的,可從一種圖自動轉換為另一種圖。 一般情況下,當需要強調消息傳遞的時間順序時,采用順序圖;當表示涉及很多對象的模型時,協(xié)作圖比順序圖更形象。
45、順序圖在分析中更常用,而協(xié)作圖則在設計中更常用。 7.5 考慮銀行系統(tǒng)中的帳戶會有哪幾種狀態(tài),畫出帳戶對象的狀態(tài)圖。 賬戶的狀態(tài)包括開戶、正常使用、透支、休眠、凍結和注銷。賬戶對象的狀態(tài)圖如下圖所示。 精選. 面向對象分析8章 第 比較面向對象的分析方法和面向數(shù)據(jù)流的分析方法,闡述它們各自的特點。8.1面向對象的分析方法使用用例模型來表示用戶的功能需求,用例模型相當于功能模型,但面向對象的分析方法并不是以也伴隨著對功能的分解。在對用例模型進行細化的過程中,建立對象模重點以類和對象為核心,功能分解為核心,在獲取并分析用戶的功能需求之后,(環(huán)面向數(shù)據(jù)流的分析方法是從建立頂層數(shù)據(jù)流圖型,交互模型也是
46、圍繞對象模型進行的。 境圖)開始,之后逐層對加工進行分解。面向數(shù)據(jù)流的分析方法是以功能分解為核心的。 面向對象分析需要建立的三個模型是什么?8.2 ;用個模型是:由用例和場景表示的功能模型(用例模型)面向對象分析需要建立的3 ;由狀態(tài)圖和順序圖表示的動態(tài)模型(交互模型)。類和對象表示的靜態(tài)模型(對象模型) 8.3 用例建模的主要步驟是什么? 用例建模的主要步驟如下: 確定業(yè)務參與者可以是與系統(tǒng)有交互的外部硬件、軟件、組織、人等。(1) 確定業(yè)務需求用例參與者需要系統(tǒng)提供的完整功能。(2) 創(chuàng)建用例圖標識參與者與用例之間、用例與用例之間的關系。(3) 用例與用例之間的關系主要有哪兩種?其區(qū)別是什
47、么?8.5 )和擴展。 用例之間的關系主要有包含(也稱使用 是指一個用表示一個用例所執(zhí)行的功能中總是包括被包含用例的功能;擴展包含聯(lián)系可用于對期望或可選的行為建模,擴展例的執(zhí)行可能需要由其他用例的功能來擴展, 但其主要用途是使基本用例的功能不依賴于擴展用例。 對于復雜的系統(tǒng),其對象模型應該由哪五個層次組成?8.6 對象、類)-也稱為范疇層個層次組成:主題層對于復雜的系統(tǒng),對象模型應該由下述5( 層、結構層、屬性層和服務層,如圖所示。 精選. 對象模型的五個層次 解釋關聯(lián)類的作用,在什么時候需要使用關聯(lián)類?8.7 關聯(lián)類的作用是描述關聯(lián)的屬性。但在某些情在關聯(lián)關系比較簡單的情況下,關聯(lián)關系的語義
48、用關聯(lián)關系的名字來概括。association 存儲和訪問,為此可以建立關聯(lián)類(況下,需要對關聯(lián)關系的語義做詳細的定義、 class)。 UML類圖:8.8 按照以下描述,畫出章和節(jié)都具有標題和序每一章包含許多節(jié)、小結和習題組成,一本教材由許多章組成, 號屬性。 UML類圖如下: 考慮一個計算機超市,出售硬件、外設和軟件。分析誰是這個系統(tǒng)的參與者?這個系統(tǒng)8.9 有哪些主要用例?畫出用例圖。 。,客戶(customer)salesperson系統(tǒng)的參與者:系統(tǒng)管理員(administrator),售貨員() 主要用例 說明 用例 編號 參與者增加、修改、刪除商品信息(商品編號、(維護Maint
49、ain product information 1 商品信息) 名稱、型號、價格)administrator Maintain membership information增加、修改、刪除會員信息(會員編號、 2 姓名、身份證號、辦卡日期)(維護會員信息)(掃描會員在商品出售之前,系統(tǒng)通過掃描儀刷卡Scan membership card 3 (會員卡)來確認顧客的會員身份 卡) salesperson(掃描商品的條4通過掃描商品的條形碼,自動識別商品 Scan product code 精選. 的名稱和價格形碼) 對于已經(jīng)掃描的條形碼,手工輸入購買(輸入商品Input amount of p
50、roduct 5 的此件商品的數(shù)量 數(shù)量) Accept payment(接收現(xiàn)金付款)salesperson, (使用銀行Charge payment to card 6customer 卡付款) (打印收據(jù))salesperson7 Print receipt 用例圖如下: 面向對象設計10第章 軟件模塊之間的依賴性可以從哪些角度和抽象層次進行分析?10.1 在面向對象軟件中,常見的軟件模塊有類、接口、包、構件。因此,分析軟件模塊之間 的依賴性就可以從類、接口、包和構件的角度和層次進行分析。 消除包之間循環(huán)依賴性的方法是什么?10.2 精選. 類之間的循環(huán)依賴性是本質上,兩個包之間的依賴性來自于兩個包中類之間的依賴性。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年奮進新征程建功新時代學習心得10篇
- 電廠檢修部年終總結5篇
- 學生會部長競選演講稿范文合集八篇
- 教師年度總結15篇
- 2025建筑防水承包合同
- 醫(yī)生個人辭職申請書10篇
- 2025技術咨詢服務合同模板
- 2025私企勞動合同協(xié)議書
- 2025關于網(wǎng)絡服務的合同范本
- 電視臺實習總結15篇
- 酒店工程裝飾裝修施工方案參考模板范本
- 超市便利店缺貨登記表
- [QC成果]高大模板支撐系統(tǒng)施工質量控制
- 煤礦區(qū)隊安全風險管控日分析制度辦法
- 白酒廠污水處理設計(共35頁)
- (完整版)霍夫斯塔德文化差異五個維度
- 《地形對聚落及交通線路分布的影響》教學設計
- 《中國旅游地理》新課程標準
- seagull船員英語STCW甲板操作級答案
- 腦出血后遺癥臨床路徑
- 重慶大學--數(shù)學模型--數(shù)學實驗作業(yè)二(共9頁)
評論
0/150
提交評論