基于案例的软件构造教程第二章课后题答案
這篇文章只提供題號為 奇數 的答案,因為是我們的NT老師要求的
1.名詞解釋:分解,模塊化,逐步求精,軟件測試,測試需求,測試設計,測試覆蓋,軟件調試,缺陷,軟件質量,編程風格。
分解:把一個大的、錯綜復雜的問題劃分成一個一個相對簡單、獨立的問題,運用合適的方法分別解決。
模塊化:通過把一個程序分解成簡單獨立、互相作用的模塊,對不同的模塊設定不同的功能,來實現大型、復雜的程序。
逐步求精:將現實問題經過幾次抽象(細化)處理,最后到求解域中只是一些簡單的算法描述和算法實現問題。
軟件測試:在規定的條件下對程序進行操作,以發現錯誤,對軟件質量進行評估。
測試需求:組件/系統中能被測試用例驗證的條目或事件。
測試設計:包含設計測試用例,實施哪些層次的測試、采用哪些測試工具或框架、如何組織人員測試等。
測試覆蓋:指測試所包含的軟件的特征、元素、成分等方面的程度或范圍。
軟件調試:指根據程序的出錯情況,分析、猜測可能出現錯誤的程序區域,讓程序運行,觀察程序的變化來發現錯誤的根源。
缺陷:程序中存在的某種破壞正常運行能力的問題、錯誤,或者隱藏的功能缺陷。
軟件質量:軟件與明確地和隱含地定義的需求相一致的程度。
編程風格:編寫代碼的樣式規則。
3. 針對算法的數據結構的4種關系,除了本書給出的例子,你還能分別為4種情形舉出若干個例子嗎?
不能,因為沒搜到。
5. 模塊化的基本原則是什么?如何評價程序的模塊化?
單一職責原則,里氏替換原則,依賴倒置原則,接口隔離原則,迪米特原則,開閉原則
(1)有利于程序復用。
把功能模塊化之后有利于程序后續開發的復用,這樣可把公共的功能進行深入的抽象、優化。
(2)利于系統開發集成
模塊化的功能,明確了本模塊的職責,已定的模塊只負責該模塊的特定功能,這樣以系統以后做集成、重構神馬的時候將會有很大的便利之處。
(3)利于調試、后續功能拓展
程序模塊化后,單個模塊既是系統的組成部分,也是個單獨的個體,對于系統開發而言,針對單個模塊進行調試往往會比整個系統的調試要方便得多。并且在系統要進行后續開發的時候,把要拓展的功能拆分到具體的模塊當中這樣把大大減輕了開發難度及成本等。
(4)代碼結構清晰易讀
在編寫代碼的時候把程序模塊化,這樣將使得代碼的可讀性更強。把方法的職責明確且單一化(即一個方法只做一件固定的事情),在以后維護的時候大大減少維護人員在閱讀理解代碼上時間。
7. 解釋模塊耦合性的含義,對不同的耦合舉例說明
耦合性,也叫耦合度,是對模塊間關聯程度的度量。耦合的強弱取決與模塊間接口的復雜性、調用模塊的方式以及通過界面傳送數據的多少。模塊間的耦合度是指模塊之間的依賴關系,包括控制關系、調用關系、數據傳遞關系。模塊間聯系越多,其耦合性越強,同時表明其獨立性越差。軟件設計中通常用耦合度和內聚度作為衡量模塊獨立程度的標準。劃分模塊的一個準則就是高內聚低耦合。
數據耦合
int sum(int a, int b) {int c;c = a + b;return c; } main() {int x, y;printf("x+y=%d", sum(x, y)); }主函數與sum函數之間即為數據耦合關系
控制耦合
void output(int flag) {if(flag) printf("OK!");else printf("NO!"); } main() {int flag;output(flag); }主函數與output函數之間即為控制耦合關系.
內容耦合
public class Product {public float unitPrice;...... }public class Order {private Product p = new Product();public void setItem() {p.unitPrice = 100;} }Product 類與 Order 類構成內容耦合
非直接耦合
void PrintDog() {System.out.println("汪汪汪"); } void PrintCat() {System.out.println("喵喵喵"); }public static void main(String[] args) {printDog();printCat(); }標記耦合
typedef equation {int a; }Equation;Equation generateExercise(){Equation e;return e; } void printExercise(Equation e) {... }main() {Equation e = generateExercise();printExercise(e) }兩個函數為傳遞了數據結構Equation的函數,視為標記耦合
外部耦合
import com.la.pojo.Dog;public static void main(String[] args) {private Dog dog; }使用import引入另一個軟件包就產生了外部耦合
公共耦合
int temp; void student() {temp = 1;...... } void teacher() {......temp = 3;...... }一組函數都訪問同一個公共數據環境就構成公共耦合
同學給發了答案,就補充上了,沒有驗證這個答案對不對
9. 按照任務1的設計和輸出,完成程序編寫,并輸出加法練習和減法練習各兩套
int main() {int num1[100], num2[100], op[100], user[100], result[100];for(int i=0; i<100; i++) {num1[i] = getNumber();num2[i] = getNumber();op[i] = getOp();}getSum(num1, num2, op, user, result);getResult(num1, num2, op, user, result) }11. 針對2.2.2節的設計1,編寫完整的程序,并給出一套題的輸出
public class ExerciseGenerator {public static void generateExerciseOfAdditionEquation(){int n, m;for(int i=0; i<50; i++) {n = generateOperand();m = generateOperand();System.out.println((i+1) + ":" + n +"+" + m + "=");}}... } 輸出:1:11+22 ... 2:55+1613. 如果要求習題中不允許有相同的算式,(1)請修改代碼2.2、2.2.2節設計1的代碼,以及2.2.2節設計2的代碼,并分別輸出;(2)思考:如何確定寫出程序滿足這個要求呢?
public static void generateExerciseOfAdditionEquation() {int n, m, v;for(int i=0; i<50; i++) {n = generateOperand();do {m = generateOperand();v = m + n; }while(v >= 100);System.out.println((i+1) + ":" + n + "+" + m + "=" + v);} } public static int generateOperand(){Random random = new random();return (short)random.nextInt(101); } public static void main(String[] args) {printHeader()generateExerciseOfAdditionEquation(); } 不允許有相同的算式,對每次生成的算式進行比較15. 用C/JAVA/Python等語言采用結構化編程,(1)完成任務2的程序,分別為加法,減法,加減法輸出兩套習題…
generateExerciseOfAdditionEquation() {...for(int i=0; i<50; i++) {do {n = generateOperand();m = generateOperand();v = m + n; }while(v >= 100);} } generateExerciseOfSubtraction() {...for(int j=0; j<50; j++) {do {n = generateOperand();m = generateOperand();v = n - m;}while(v <= 100);} } generateEquation() {...if(nextInt(2) == 1) {return generateExerciseOfAdditionEquation();} else {return generateExerciseOfSubtraction();} } constructEquation(short left, short right, char op) {geberateExerciseOfEquation() {...for(int i=0; i<EQUATION_NUMBER; i++) {equation = generateEquation();...}} }17. 如何改變案例程序,使其可以產生最多3個數值的 [0…100] 的二元算式?…
public static void main(String[] args) {int arr[][] = new int[3][3];for(int []is: arr) {for(int i=0; i<50; i++){......}}... } public static void main(String[] args){int a = 1;for(int i=0: i<50; i++){System.out.println(i);if(a%5 == 0){...}...} }19. 如何改變案例程序,使其輸出任意列數 。…
public static void main(String[] args){Scanner Equation = new Scanner(System.in);System.out.println("請輸入幾列");int n = Equation.nextInt();for(int j=5; j<n; j++) {for(int i=1; i<n; i++) {...System.out.println(generateExercise());}} }21. 修改案例程序,要求盡可能整齊打印輸出每行5列算式…
void equationGeneratorTest() {bool equal;Equation testData[10];String expected[10];int succeed, failed, execute = 0;testData[1] = contructAdditionEquation(9, 90, "+");expected[1] = "9+90="...for(int i=0; i<10; i++) {equal = asString(testData[i] == expected(i));if(equal) {succeed++;} else {failed++;}execute++;...} }23. 修改案例程序,要求盡可能整齊打印輸出每行6列算式…
void isEquationTest() {bool equal;Equation testData[10];Equation anEquation;int succeed, failed, execute = 0;testData[1] = contructAdditionEquation(3, 35, "+");...anEquation = contructAdditionEquation(45, 26, "+");for(int i=0; i<10; i++) {equal = isEqual(anEquation, testData[i]);if(equal) {...}} }新加的答案不一定正確,謹慎 Copy
總結
以上是生活随笔為你收集整理的基于案例的软件构造教程第二章课后题答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清华大学计算机系课程全套视频教程下载地址
- 下一篇: 2021-2027全球与中国变频调速电机