《先進軟體開發技術與工具》試題

來源:才華庫 2.19W

1. 介紹建立程式的基本步驟。(4分)

《先進軟體開發技術與工具》試題

答:開啟Visual Stdio 2008 檔案選單 新建 專案 選擇語言和專案型別 編寫程式碼 編譯 執行。

2. C#語言的特點?(5分)

●簡潔的語法

●精心地物件導向設計

●與Web的緊密結合

完整的安全性與錯誤處理

●版本處理技術

●靈活性與相容性

3. C#中引數傳遞有哪些方式?各有什麼特點?(6分) 答:有傳值和傳引用方式。

傳值方式,是指將實際引數的值複製一份,存入形式引數中。在方法中對形式引數值的改變不會影響到實際引數。

傳引用方式,是指將實際引數的地址複製一份,存入形式引數中,在方法中通過地址可以改變實際引數的值。

4. e is T在什麼時候返回true?e as T在什麼時候返回非null?(6分) 答:e is T在物件e的型別為T時返回true。

e as T在物件e兼容於T型別時,返回非null。

5. 給出C#語言效率低於C/C++語言的3個原因。(6分) 答:(不確定)

C#有高階記憶體管理機制,方便了開發,但降低了程式碼效率;

C#程式碼是託管執行的,效率較低;

C#不能直接進行記憶體管理,效率低。

6. 解釋以下基本概念。(14分)

(1)託管程式碼 (2)抽象類 (3)介面 (4)引用型別

(5)異常 (6)屬性 (7)值型別

答:

(1)託管程式碼——由公共語言執行庫環境(而不是直接由作業系統)執行的程式碼。

(2)抽象類——至少包含一個抽象方法的類,該類不能被例項化。

(3)介面——只包含方法、屬性、索引器、事件,均為public許可權,而且方法只有定義沒有方法體。

(4)引用型別——直接儲存變數值的引用,該型別的變數作引數,傳遞的是值所在的`地址。

(5)異常——程式執行時遇到的任何錯誤情況或意外行為

(6)屬性——屬性是這樣的成員:它提供靈活的機制來讀取、編寫或計算某個私有欄位的值。

(7)值型別——直接儲存變數的值,該型別的變數作引數,傳遞的是變數的副本。

7. 虛方法、抽象方法、靜態方法、介面中的方法和密封方法有何區別?(10分)

答:虛方法:用virtual修飾,告訴編譯器這個方法可以在派生類中被改寫。

抽象方法:用abstract修飾,沒有方法體,它所在的類是抽象類。抽象方法必須由其所在類的派生類重寫,除非該派生類也是抽象方法。

靜態方法:用Static修飾,靜態方法儲存在類空間中,直接由類訪問。

介面中的方法:只有方法的宣告,沒有方法體,必須由介面的派生類重寫。

密封方法:用seal修飾,表示該方法不能被派生類重寫。

8. 抽象類、密封類和介面有何區別?各在什麼情況下使用?(10分) 答:抽象類:至少含有一個抽象方法的類。用於各派生類有同樣的行為,但實現程式碼各不一樣的情況,這時可以基類中定義即抽象方法,該基類就是抽象類。

密封類:表示該類不能被繼承。用於不希望該類被繼承或修改的情況。

介面:只包含方法、屬性、索引器、事件,均為public許可權,而且方法只有定義沒有方法體。用於向外界宣告所具有的行為,用於實現多重繼承。

9. 下列程式片斷有何錯誤?(12分)

(1)

class BaseClass

{ public virtual void f1() { }

} class DerivedClass : BaseClass { } public void f1() { }

答:DerivedClass中f1應改為public override void f1(){},加上override。

(2)

class BaseClass

class DerivedClass : BaseClass { } public void f1() { } } { public sealed void f1() { } 答:DerivedClass中f1()不能被重寫。

(3)

abstract class BaseClass

class DerivedClass : BaseClass { } public void f2() { } } { public abstract void f1() { }

答:BaseClass中f1應為public abstract void f1();,沒有方法體;

DerivedClass中應新增public void f1(){……},實現抽象方法。

10. 寫出下列程式的輸出。(7分)

class BaseClass

} new public void f2() { } eLine("DerivedClass.f2"); class DerivedClass : BaseClass { public override void f1() { } eLine("DerivedClass.f1"); } public void f2() { } eLine("BaseClass.f2"); { public virtual void f1() { } eLine("BaseClass.f1");

} b.f1(); b.f2(); BaseClass b = d; static void Main(string[] args) { DerivedClass d = new DerivedClass();

答:(答案沒驗證)

BaseClass.f1

BaseClass.f2

11. 編寫一個程式,接收使用者輸入的兩個數字(這兩個數字不能都大

於30,否則要求使用者重新輸入),計算兩數的乘積並輸出。(8分) 答:

static void Main(string[] args)

{

} e("請輸入小於30的數字:"); y = e(Line()); while(y>30) { } z = x*y; eLine("結果是:"+z); e("請輸重新入小於30的數字:"); y = e(Line()); int x=100,y=100,z; e("請輸入小於30的數字:"); x = e(Line()); while(x>30) { } e("請輸重新入小於30的數字:"); x = e(Line());

12. 馬(Horse)、大象(Elephant)、老虎(Tiger)、獅子(Lion)是動物(Animal),動物能夠Eat,但是不同的動物有不同的Eat行為。另外,有些動物具有食肉特性(ICarnivore),食肉動物能夠捕食(Prey)。定義類和介面用類繼承和介面實現來表示以上事物之間的關係。(12分)

答:

interface ICarnivore

{

} public void Prey(); //食肉特性

熱門標籤