C#習(xí)題參考答案-《c#面向?qū)ο蟪绦蛟O(shè)計(jì)》-鄭宇軍
《C#習(xí)題參考答案-《c#面向?qū)ο蟪绦蛟O(shè)計(jì)》-鄭宇軍》由會(huì)員分享,可在線閱讀,更多相關(guān)《C#習(xí)題參考答案-《c#面向?qū)ο蟪绦蛟O(shè)計(jì)》-鄭宇軍(15頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、精品文檔,僅供學(xué)習(xí)與交流,如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除 習(xí)題參考答案 Chapter 1 1_1 對(duì)象 客觀世界中的事物都是對(duì)象,包括有形的物理對(duì)象,可感知的邏輯實(shí)體,以及概念化的抽象實(shí)體。它有自己的屬性,能夠執(zhí)行特定的操作。 類 具有相同屬性和操作的一組對(duì)象的集合;它描述的不是單個(gè)對(duì)象,而是“一類”對(duì)象的共同特征。其重要性在于它是面向?qū)ο蠹夹g(shù)中最重要的結(jié)構(gòu),它支持信息隱藏和封裝,進(jìn)而支持對(duì)抽象數(shù)據(jù)類型(ADT)的實(shí)現(xiàn)。 1_2 略 1_3 參考圖如下 圖1 1_4 UML與面向?qū)ο? UML是一種定義良好、易于表達(dá)、功能強(qiáng)大且普遍適用的建模語(yǔ)言。它溶
2、入了軟件工程領(lǐng)域的新思想、新方法和新技術(shù)。它的作用域不限于支持面向?qū)ο蟮姆治雠c設(shè)計(jì),還支持從需求分析開始的軟件開發(fā)的全過程。標(biāo)準(zhǔn)建模語(yǔ)言UML適用于以面向?qū)ο蠹夹g(shù)來描述任何類型的系統(tǒng),而且適用于系統(tǒng)開發(fā)的不同階段,從需求規(guī)格描述直至系統(tǒng)完成后的測(cè)試和維護(hù)。 Chapter 2 2_1 程序的功能一般通過方法代碼來實(shí)現(xiàn)。每個(gè)方法都是從其第一行代碼開始執(zhí)行,直至最后一行代碼結(jié)束,期間可以通過代碼來調(diào)用其他的方法,從而完成各式各樣的操作。C#程序的起點(diǎn)是由Main方法定義的,程序總是從Main方法的第一行代碼開始執(zhí)行,在Main方法結(jié)束時(shí)停止運(yùn)行。 2_2 略(注:不同版本的Visual
3、 Studio的菜單項(xiàng)有所區(qū)別) 2_3 略(注:不同版本的Visual Studio引用的程序集有所區(qū)別) 2_4 C#源代碼會(huì)被編譯為一種通用的中間語(yǔ)言(IL)代碼,該語(yǔ)言類似于低級(jí)語(yǔ)言,但其代碼與具體的硬件平臺(tái)無關(guān);之后CLR再針對(duì)特定的平臺(tái)將IL程序翻譯為機(jī)器指令,加載所需要的資源并管理執(zhí)行。 2_5 //動(dòng)態(tài)鏈接庫(kù)程序 using System; namespace p2_5 class Adder public static int Add(int a, int b) return a+b; //控制臺(tái)應(yīng)用程
4、序 using System; using p2_5; namespace P2_6 class Program static void Main() Console.WriteLine("請(qǐng)輸入兩個(gè)數(shù):"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); Console.WriteLine("{0}+{1}={2}", a, b, Adder.Ad
5、d(a+b)); Chapter 3 3_1 略 3_2 第一:值類型的變量直接包含自身的所有數(shù)據(jù),每創(chuàng)建一個(gè)變量,就在內(nèi)存中開辟一塊區(qū)域;只有通過變量才能修改它所包含的數(shù)據(jù)。而引用類型的變量只存儲(chǔ)對(duì)目標(biāo)數(shù)據(jù)的引用,每創(chuàng)建一個(gè)變量,就增加一個(gè)指向目標(biāo)數(shù)據(jù)的指針;有可能出現(xiàn)多個(gè)引用類型的變量指向同一份數(shù)據(jù)的情況,這時(shí)修改一個(gè)變量就會(huì)影響到其它所有的變量。 第二:作為方法參數(shù)時(shí),值類型變量傳遞的是數(shù)值,引用類型變量傳遞的是地址,因此如果方法的執(zhí)行代碼修改了變量,對(duì)值類型的變量不會(huì)有影響,但會(huì)改變引用類型的變量。 第三:裝箱是將一個(gè)值類型轉(zhuǎn)換為一個(gè)對(duì)象類型(obj
6、ect),而拆箱則是將一個(gè)對(duì)象類型顯式轉(zhuǎn)換為一個(gè)值類型。 3_3 略 3_4 對(duì)整數(shù)為真,對(duì)實(shí)數(shù)不一定,因?yàn)閷?shí)數(shù)受到計(jì)算機(jī)精度的影響。 3-5 四次執(zhí)行的結(jié)果分別是:3,6,-6,-3 3-6 當(dāng)兩個(gè)操作數(shù)均為布爾類型時(shí),與運(yùn)算“&”和邏輯與運(yùn)算“&&”的求值效果相同,或運(yùn)算“|”和邏輯或運(yùn)算“||”的求值效果相同。但異或運(yùn)算“^”不存在對(duì)應(yīng)的條件邏輯運(yùn)算。 3-7 不是。if-else可進(jìn)行任意分支,而“?:”操作符要求第二和第三個(gè)操作數(shù)的類型必須一致。 3-8 class Program static void Main(string[] args)
7、 Console.WriteLine("按任意鍵退出,其它鍵繼續(xù)…"); while(Console.ReadKey().KeyChar!=Q) Console.WriteLine("請(qǐng)輸入本金:"); double x = double.Parse(Console.ReadLine()); Console.WriteLine("請(qǐng)輸入利率:"); double y = double.Parse(Console.ReadLine());
8、 Console.WriteLine("請(qǐng)輸入存款年數(shù):");
double z = double.Parse(Console.ReadLine());
Console.WriteLine("本息合計(jì)為:");
for (int i=0; i 9、ole.ReadLine();
3-9
(1)
class Program
static void Main(string[] args)
Console.WriteLine("Please input a number:");
int n = int.Parse(Console.ReadLine());
int i = 1, x = 1;
while (i <= n)
x = x * i;
i++;
Console.WriteLine 10、(x);
Console.ReadLine();
(2)
class Program
static void Main()
Console.WriteLine("Please input a number:");
int n = int.Parse(Console.ReadLine());
int i = 1, x = 1;
do
x = x * i;
i++;
while (i <= n);
Conso 11、le.WriteLine(x);
Console.ReadLine();
(3)
class Program
static void Main()
Console.WriteLine("Please input a number:");
int n = int.Parse(Console.ReadLine());
int x = 1;
for (int i = 1; i <= n; i++)
x = x * i;
Console.WriteLine 12、(x);
Console.ReadLine();
3-10 略
3-11
class Program
static void Main()
Console.WriteLine("請(qǐng)輸入一個(gè)字符串:");
Console.WriteLine(Simp(Console.ReadLine()));
public static string Simp(string s)
StringBuilder sb1 = new StringBuilder();
for (int i = 0 13、; i < s.Length; i++)
while (i < s.Length - 1 && s[i] == s[i + 1])
i++;
sb1.Append(s[i]);
return sb1.ToString();
3-12
(1)
class Program
static void Main()
int sum = 0;
for (int i = 1; i <= 50; i++)
sum += 2*i;
14、
Console.WriteLine(sum);
Console.ReadLine();
(2)
class Program
static void Main()
int sum = 0, m = 1;
for (int i = 1; i <= 10; i++)
m = m * 2;
sum = sum + m;
Console.WriteLine(sum);
Console.ReadLine();
3-13 略
Cha 15、pter 4
4_1 靜態(tài)字段是指某個(gè)類型的所有對(duì)象所共享的字段,程序會(huì)在首次該類型時(shí)為字段分配存儲(chǔ)空間,所有對(duì)象都可以通過靜態(tài)成員來讀取或修改靜態(tài)字段。常量字段是特殊的靜態(tài)字段,它使用關(guān)鍵字const來修飾,且只能在聲明時(shí)賦值,之后不允許被修改。
只讀字段則是特殊的實(shí)例字段,它屬于單個(gè)對(duì)象所有,在聲明或構(gòu)造函數(shù)中賦值,而在創(chuàng)建對(duì)象之后不允許被修改。
只讀屬性是指在屬性中只定義get訪問函數(shù)而不定義set訪問函數(shù),那么使用者只能訪問該屬性,而不能對(duì)屬性賦值。
4_2 提示:在析構(gòu)函數(shù)中將靜態(tài)字段object_count的值減1
4_3 使用屬性更為安全(可以在訪問函數(shù)中增加控 16、制代碼),訪問更加靈活(可以在訪問函數(shù)中執(zhí)行各種計(jì)算),可擴(kuò)展性也更好(修改屬性訪問代碼時(shí)不必修改字段名和屬性名,這就不會(huì)影響到其它對(duì)象和方法的使用)。
4_4
public class ComplexNumber
private double x, y;
public double X //實(shí)數(shù)部分
get {return x; }
set {x = value; }
public double Y; //虛數(shù)部分
get {return y; }
set {y = value; } 17、
public ComplexNumber(double x, double y)
this.x = x;
this.y = y;
public static ComplexNumber operator+(ComplexNumber c1, ComplexNumber c2)
return new ComplexNumber(c1.x + c2.x, c1.y + c2.y);
public static ComplexNumber operator-(ComplexNumber c1, ComplexNum 18、ber c2)
return new ComplexNumber(c1.x - c2.x, c1.y - c2.y);
public static bool operator ==(ComplexNumber c1, ComplexNumber c2)
return (c1.x == c2.x) && (c1.y == c2.y);
public static bool operator !=(ComplexNumber c1, ComplexNumber c2)
return (c1.x != c2.x) || (c1 19、.y != c2.y);
public static bool operator >(ComplexNumber c1, ComplexNumber c2)
double a = c1.x*c1.x + c1.y*c1.y;
double b = c2.x*c2.x + c2.y*c2.y;
return a > b;
public static bool operator >=(ComplexNumber c1, ComplexNumber c2)
return a == b || a > b;
20、 public static bool operator <(ComplexNumber c1, ComplexNumber c2)
return !(c1 >= c2);
public static bool operator <=(ComplexNumber c1, ComplexNumber c2)
return !(c1 > c2);
4_5 不能,因?yàn)閠his表示當(dāng)前對(duì)象,而靜態(tài)成員是通過類型本身而非對(duì)象來訪問的。
4_6 如果字符串格式錯(cuò)誤的幾率很小,使用Parse方法具有更高的效率;否則應(yīng)選用TryParse方法來提高程序 21、的可靠性。
4_7 略
4_8
public int GetAge(DateTime birthday)
int y = DateTime.Year, m = DateTime.Month, d = DateTime.Day;
if (d < birthday.Day)
m--;
if (m < birthday.Month)
y--;
return y – birthday.Year;
4_9 略
4_10 一個(gè)省份中的城市、一個(gè)城市中的景點(diǎn)一般變化較少,適合用數(shù)組存儲(chǔ)。而旅游線路和方案要便于修改 22、。
Chapter 5
5_1 派生類自動(dòng)繼承基類的公有成員和保護(hù)成員,但不能訪問基類的私有成員;外部對(duì)象只能訪問其中的公有成員,而不能訪問保護(hù)成員和私有成員。
5_2 構(gòu)造函數(shù)和析構(gòu)函數(shù)不能重載和隱藏。除非是默認(rèn)構(gòu)造函數(shù),否則派生類的構(gòu)造函數(shù)須指明要調(diào)用的基類構(gòu)造函數(shù)形式。
重載或隱藏屬性時(shí)要分別對(duì)get和set訪問函數(shù)進(jìn)行重載或隱藏
重載或隱藏索引函數(shù)時(shí)與屬性類似
5_3 略
5_4 (1)Animal中的抽象方法不能有執(zhí)行代碼
(2)派生類Bird不能只重載基類Animal中Life屬性的get訪問函數(shù)
(3)派生類Mammal的life字段不要n 23、ew關(guān)鍵字來修飾,因?yàn)樗荒茉L問基類中的私有字段。
5_5
public abstract class Disk
protected double total, free;
public float Total //總?cè)萘?
get { return total; }
set { total = value; }
public float Free //剩余容量
get { return free; }
public virtual void Write(float size)
24、 if (free >= size)
free -= size;
else
Console.WriteLine("剩余空間不足!");
public virtual void Delete(float size)
if (free + size <= total)
free += size;
public class HardDisk
public HardDisk(float size)
this.total = this.free = s 25、ize;
public class FlashDisk
public FlashDisk()
this.total = this.free = 64000;
public class CDROM
public override void Delete(float size)
Console.WriteLine("光盤不可刪除!");
5_6
// 抽象類:圖形Shape
public abstract class Shape
public abstract double Perimeter { get; }
26、 public abstract double Area { get; }
// 派生類: 圓形Circle
public class Circle : Shape
private double r;
public double R;
get { return r; }
set { r = value; }
public override double Perimeter
get { return 6.28 * r; }
public override double Area
27、get { return 3.14 * r * r; }
public Circle(double r)
this.r = r;
public class Rectangle : Shape
private double a, b;
public double A;
get { return a; }
set { a = value; }
public double B;
get { return b; }
set { b = value; }
publ 28、ic override double Perimeter
get { return 2 * (a + b); }
public override double Area
get { return a * b; }
public Rectangle(double a, double b)
this.a = a;
this.b = b;
5_7 在新類型中定義原結(jié)構(gòu)類型的字段成員,通過該字段來調(diào)用結(jié)構(gòu)的成員功能。
5_8 略
5_9 略
Chapter 6
6_1 (1)定義委托原型,其 29、簽名應(yīng)與要封裝的方法保持一致。
(2)定義委托類型的變量。
(3)使用new關(guān)鍵字創(chuàng)建委托對(duì)象,并將要封裝的方法名作為參數(shù)傳遞給構(gòu)造函數(shù)。
(4)通過委托變量來調(diào)用方法。
6_2
public static void Compare(Student s1, Student s2)
CompareFunction compare = new CompareFunction(CompareGrade);
int x = compare(s1, s2);
if (x == 0)
compare = CompareGrade;
30、
x = compare(s1, s2);
if (x == 0)
compare = CompareGrade;
x = compare(s1, s2);
return x;
public static void SortAndPrint(Student[] students)
for (int i = students.Length - 1; i > 0; i--)
for (int j = 0; j < i; j++)
if (Compa 31、re(students[j], students[j + 1]) > 0) {
Student s = students[j];
students[j] = students[j + 1];
students[j + 1] = s;
foreach (Student s in students)
Console.WriteLine(s);
6_3
public static void WriteDelegateInfo(Delegate dg)
if (dg == null)
32、return;
Console.WriteLine("MethodName: {0}", dg.Method.Name);
Console.WriteLine("MethodBelongType: {0}", dg.Method.DeclaringType);
Console.WriteLine("Target: {0}", dg.Target);
foreach (Delegate dg in dg3.GetInvocationList())
Console.WriteLine(dg.Method);
Console 33、.WriteLine(dg.Target);
6_4 輸出為:2, 3, 4
6_5 匿名方法可以把一段代碼直接作為參數(shù)使用,而無需顯式地定義方法的原型。通過捕獲外部變量,匿名方法還能夠?qū)崿F(xiàn)與外部程序的狀態(tài)共享。這不僅能夠簡(jiǎn)化程序,提高了代碼的可維護(hù)性,還大大方便了程序中的各種計(jì)算。
6_6 事件是委托類型的對(duì)象,事件的觸發(fā)方法是該對(duì)象的客戶,而事件的處理方法是該對(duì)象提供的服務(wù)。
6_7 旅行團(tuán)所關(guān)聯(lián)的導(dǎo)游和負(fù)責(zé)業(yè)務(wù)員是明確的,可以在改變狀態(tài)的方法代碼中訪問這些導(dǎo)游和業(yè)務(wù)員對(duì)象。而旅行團(tuán)所關(guān)聯(lián)的游客可能不斷變化,采用發(fā)布/訂閱方式能夠方便地通知所有綁定的游客。
6_8 34、略
Chapter 7
7_1 可從以下幾方面考慮:
(1)合理布局:在左上方或正上方提供車次和站名的輸入控件,在中央顯示查詢結(jié)果。
(2)方便導(dǎo)航:在查詢結(jié)果中,通過單擊車次和站名可直接顯示相關(guān)信息。
(3)簡(jiǎn)化輸入:允許用戶通過簡(jiǎn)拼或雙拼等方式來輸入中文站名。
(4)撤銷和恢復(fù):允許用戶回退到上次查詢。
(5)等待響應(yīng):查詢時(shí)間較長(zhǎng)時(shí),顯示等待光標(biāo),還可先顯示部分查詢結(jié)果。
7_2 對(duì)于不常用的字體族,創(chuàng)建其Font對(duì)象時(shí)要先檢查用戶計(jì)算機(jī)上是否安裝了該字體。必要時(shí)可隨程序安裝字體。
7_3 在窗體尺寸改變事件中,通過Form對(duì)象的Height屬性 35、來進(jìn)行控制。
7_4 通過文本框的KeyPress事件來進(jìn)行控制:
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
int ch = e.KeyChar;
if (ch<48 || ch>57 && ch!=8)
e.Handled = false;
7_5 略
7_6 如果增加之后的數(shù)值超過控件的Maximum,第二行代碼執(zhí)行后會(huì)發(fā)生異常,而第一行代碼會(huì)使控件中的數(shù)值等于Maximum。
7_7 略
7_8 提示:可參考MSDN幫助中的Control控件 36、文檔。
7_9 主要方面有:
(1)業(yè)務(wù)對(duì)象與窗體界面綁定,通常是在窗體類中定義一個(gè)業(yè)務(wù)對(duì)象類型的字段成員,通過窗體初始化事件的處理代碼來將對(duì)象信息顯示在窗體控件中。
(2)在保存對(duì)象信息時(shí),通常要檢查窗體控件中對(duì)應(yīng)的輸入信息是否完整和合法,否則應(yīng)要求用戶重新輸入。
(3)如果要在不同的窗體間傳遞對(duì)象,那么可將對(duì)象變量作為目標(biāo)窗體的構(gòu)造函數(shù)參數(shù),通過其構(gòu)造函數(shù)來初始化對(duì)應(yīng)的對(duì)象字段。
(4)如果多個(gè)窗體共享一個(gè)對(duì)象信息,那么在其中一個(gè)窗體修改了對(duì)象信息后,應(yīng)及時(shí)更新其它窗體的顯示內(nèi)容。
Chapter 8
8_1 以1000000以內(nèi)的int值為例:
static 37、 void Main()
FileStream fs1 = new FileStream("num.txt", FileMode.Create);
for (int a = 1, b = 1; a <= 1000000; a += b)
int t = b;
b = a;
a = t;
int x = a/(2<<24);
fs1.WriteByte((byte)x); //寫入25~32位
a -= x;
x = a/(2<<16);
38、 fs1.WriteByte((byte)x); //寫入17~24位
a -= x;
x = a/(2<<8);
fs1.WriteByte((byte)x); //寫入9~16位
a -= x;
fs1.WriteByte((byte)x); //寫入1~8位
fs1.Position = 0;
Console.Write("請(qǐng)輸入要讀取的數(shù)列項(xiàng): ");
int i = int.Parse(Console.ReadLine());
fs1.Position 39、 = 4 * i;
int y = 16777216*fs1.ReadByte() + 65536*fs1.ReadByte() + 256*fs1.ReadByte() + fs1.ReadByte();
Console.WriteLine("數(shù)列項(xiàng)為: " + y);
fs1.Close();
8_2 提示:創(chuàng)建一個(gè)文本文件,在窗體的關(guān)閉事件中向文件寫入當(dāng)前時(shí)間,在窗體的啟動(dòng)事件中讀取上次寫入時(shí)間。
8_3 在控制臺(tái)逐行依次輸出48~57
8_4 二進(jìn)制方式對(duì)文件的存取效率較高,但編程更為復(fù)雜,需要處理字節(jié)類型與其它各種類型之間的轉(zhuǎn)換。文本方式存 40、取文件速度較慢,占用的磁盤容量也較大,但編程更為簡(jiǎn)單,只需要把各種類型都按字符串格式處理即可。
8_5 略
8_6 應(yīng)在顯示對(duì)話框之前設(shè)置的屬性主要有:Filter、FilterIndex、InitialDirectory、RestoreDirectory、Multiselect、OverwritePrompt;之后設(shè)置的屬性主要有FileName有FileNames。
8_7 在寫入每個(gè)對(duì)象時(shí),應(yīng)首先將對(duì)象的類型名寫入文件;在讀取文件時(shí),首先讀取類型名,再根據(jù)不同的類型來使用構(gòu)造函數(shù)創(chuàng)建對(duì)象。
8_8 在寫入文件流時(shí),可通過一個(gè)密鑰字符來對(duì)文件的每個(gè)字節(jié)進(jìn)行加密,即將字節(jié)與密 41、鑰字符進(jìn)行與或運(yùn)算后寫入文件,讀取時(shí)再與密鑰字符進(jìn)行一次與或運(yùn)算來進(jìn)行解密:
public void Save(BinaryWriter writer, char key)
char[] chs = new char[_username.Length];
for (int i=0; i 42、ngth; i++)
chs[i] = _password[i] ^ key;
writer.Write(chs);
writer.Write(_staffId ^ key);
public static User Load(BinaryReader reader, char key)
string username = reader.ReadString();
char[] chs1 = new char[username.Length];
for (int i=0; i 43、 chs1[i] = username[i] ^ key;
string password = reader.ReadString();
char[] chs2 = new char[password.Length];
for (int i=0; i 44、提示:要管理用戶登錄系統(tǒng)的記錄,可為每個(gè)用戶創(chuàng)建一個(gè)文本文件(如“用戶ID”+“.log”),在其中記錄用戶各次登錄的時(shí)間信息。
Chapter 9
9_1 try-catch:正常情況下執(zhí)行try代碼段中的語(yǔ)句,出現(xiàn)異常就轉(zhuǎn)而執(zhí)行catch代碼段中的語(yǔ)句。如果catch語(yǔ)句限定了異常類型,那么只有指定異常發(fā)生時(shí)轉(zhuǎn)入catch代碼段,否則不作處理。
try-catch-finally:執(zhí)行情況和try-catch結(jié)構(gòu)類似,但不論是否發(fā)生異常,程序最后都會(huì)執(zhí)行finally語(yǔ)句中的代碼段。finally語(yǔ)句應(yīng)放在所有catch語(yǔ)句之后,且只能出現(xiàn)一次。
try-catch:實(shí)際上 45、不進(jìn)行異常處理。正常情況下執(zhí)行try代碼段中的語(yǔ)句,出現(xiàn)異常后則在執(zhí)行完finally代碼段之后引發(fā)異常。
9_2 輸出"發(fā)生參數(shù)異常"
9_3 對(duì)于常量表達(dá)式,如果使用checked操作符強(qiáng)制對(duì)表達(dá)式進(jìn)行類型檢查,或是在編譯時(shí)指定了“/checked+”選項(xiàng),那么發(fā)生溢出的表達(dá)式將不能通過編譯。如果不要求檢查,那么執(zhí)行到發(fā)生溢出的表達(dá)式就會(huì)引發(fā)OverflowException異常。
對(duì)于一般運(yùn)算表達(dá)式,執(zhí)行到發(fā)生溢出的表達(dá)式都會(huì)引發(fā)OverflowException異常。
表達(dá)式發(fā)生溢出主要是指整數(shù)變量的范圍超出了其類型的最大/最小取值范圍,如對(duì)取值為30000的short型 46、變量加10000,或是將1000強(qiáng)制轉(zhuǎn)換為byte型變量。
9_4 打開文件時(shí)可能引發(fā)的異常主要有:
(1)DirverNotFoundException:指定的磁盤分區(qū)不存在。
(2)DirectoryNotFoundException:指定的文件目錄不存在。
(3)FileNotFoundException:指定的文件不存在。
(4)FileLoadException:加載文件內(nèi)容失敗。
如果文件是用于記錄程序相關(guān)信息,那么在打開文件失敗時(shí)應(yīng)創(chuàng)建新文件;如果用戶需要使用程序來編輯文件內(nèi)容,那么應(yīng)向用戶報(bào)告錯(cuò)誤并由用戶選擇相應(yīng)的處理方式。
9_5 略
9_6 略
Ch 47、apter 10
10_1 抽象類和接口都不能被實(shí)例化,抽象類中的抽象方法和接口中的接口方法都只有方法聲明,而沒有執(zhí)行體。抽象方法和接口方法都需要在具體的派生類中提供實(shí)現(xiàn)。
抽象類可以有成員字段和非抽象方法,但接口不能。即接口是比抽象類更為“抽象”的一種數(shù)據(jù)類型。
10_2 如果需要通過對(duì)象實(shí)例來調(diào)用方法,那么應(yīng)采用隱式實(shí)現(xiàn)的方式。如果要區(qū)別不同接口的同名方法,那么應(yīng)采用顯式實(shí)現(xiàn)的方式,并在調(diào)用時(shí)先將對(duì)象轉(zhuǎn)換為對(duì)應(yīng)的接口類型。
10_3 不能,必須是重載基類中的虛擬方法才能使用override修飾符。
10_4 略
10_5 組合框和列表框的元素集合都實(shí)現(xiàn)了IColle 48、ction接口,那么可以創(chuàng)建一個(gè)ArrayList或List 49、blic object Value
get { return this.value; }
set { this.value = value; }
public BTNode Left
get { return left; }
set { left = value; }
public BTNode Right
get { return right; }
set { right = value; }
50、 public BTNode(object obj)
value = obj;
/// 51、se(root).Length; }
private BinaryTree()
this.root = null;
public BinaryTree(object obj)
this.root = new BTNode(obj);
public BinaryTree(BTNode root)
this.root = root;
public void CopyTo(Array array, int index)
Pre 52、Traverse(root).CopyTo(array, index);
IEnumerator IEnumerable.GetEnumerator()
return PreTraverse(root).GetEnumerator();
bool ICollection.IsSynchronized
get { return false; }
object ICollection.SyncRoot
get { return null; }
pub 53、lic static object[] PreTraverse(BTNode node) //前序遍歷
if (node == null)
return null;
ArrayList nodes = new ArrayList();
nodes.Add(node.Value);
if (node.Left != null)
nodes.AddRange(PreTraverse(node.Left));
54、 if (node.Right != null)
nodes.AddRange(PreTraverse(node.Right));
return nodes.ToArray();
public static object[] InTraverse(BTNode node) //中序遍歷
if (node == null)
return null;
ArrayList nodes = new ArrayList();
55、 if (node.Left != null)
nodes.AddRange(InTraverse(node.Left));
nodes.Add(node.Value);
if (node.Right != null)
nodes.AddRange(InTraverse(node.Right));
return nodes.ToArray();
public static object[] PostTraverse(BT 56、Node node) //后序遍歷
if (node == null)
return null;
ArrayList nodes = new ArrayList();
if (node.Left != null)
nodes.AddRange(PostTraverse(node.Left));
if (node.Right != null)
nodes.AddRange(PostTraver 57、se(node.Right));
nodes.Add(node.Value);
return nodes.ToArray();
public static BinaryTree EmptyBinaryTree
get { return new BinaryTree(); }
class Program
static void Main()
BinaryTree tree1 = new BinaryTree(1);
int 58、 i = 1;
BTNode r = tree1.Root;
while (i < 100)
r.Left = new BTNode(i * 2);
r.Right = new BTNode(i * 3);
if (i % 2 == 1)
r = r.Left;
i = i * 2;
else
59、 r = r.Right;
i = i * 3;
object[] result = BinaryTree.PreTraverse(tree1.Root);
Console.WriteLine("前序遍歷:");
foreach (object obj in result)
Console.Write(obj.ToString() + ,);
Console.WriteLine("\n中序遍歷:");
60、 result = BinaryTree.InTraverse(tree1.Root);
foreach (object obj in result)
Console.Write(obj.ToString() + ,);
Console.WriteLine("\n后序遍歷:");
result = BinaryTree.PostTraverse(tree1.Root);
foreach (object obj in result)
61、 Console.Write(obj.ToString() + ,);
10_8 略
Chapter 11
11_1 略
11_2 泛型類A 62、ew List 63、s in l1)
Console.Write(s + );
11_6 提示:將二叉樹節(jié)點(diǎn)類型BTNode改為泛型類型BTNode 64、 nodes.Add(node.Value);
if (node.Left != null)
nodes.AddRange(PreTraverse(node.Left));
if (node.Right != null)
nodes.AddRange(PreTraverse(node.Right));
return nodes.ToArray();
public static T[] InTraverse(BTNode 65、 66、 nodes.AddRange(InTraverse(node.Right));
return nodes.ToArray();
public static T[] PostTraverse(BTNode使用的類型參數(shù)S在A中沒有定義,應(yīng)將其改為B
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年銀行業(yè)年終工作總結(jié)8篇
- 電工年度工作總結(jié)11篇
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院護(hù)士述職報(bào)告6篇
- 中專期末總結(jié)個(gè)人總結(jié)7篇
- 醫(yī)技科個(gè)人總結(jié)范文6篇
- 展望未來年終總結(jié)8篇
- 品質(zhì)年度工作總結(jié)報(bào)告4篇
- 市場(chǎng)月總結(jié)5篇
- 年終個(gè)人工作總結(jié)
- 檔案管理工作的自查報(bào)告8篇
- 護(hù)士近五年工作總結(jié)6篇
- 部門助理個(gè)人總結(jié)7篇
- 專項(xiàng)資金使用自查報(bào)告5篇
- 教師教研教學(xué)工作總結(jié)7篇
- 迎新晚會(huì)個(gè)人總結(jié)10篇