C#习题参考答案 《c#面向对象程序设计》 郑宇军 联系客服

发布时间 : 星期六 文章C#习题参考答案 《c#面向对象程序设计》 郑宇军更新完毕开始阅读b71fec2e0066f5335a8121cd

+“.log”),在其中记录用户各次登录的时间信息。

Chapter 9

9_1 try-catch:正常情况下执行try代码段中的语句,出现异常就转而执行catch代码段中的语句。如果catch语句限定了异常类型,那么只有指定异常发生时转入catch代码段,否则不作处理。 try-catch-finally:执行情况和try-catch结构类似,但不论是否发生异常,程序最后都会执行finally语句中的代码段。finally语句应放在所有catch语句之后,且只能出现一次。 try-catch:实际上不进行异常处理。正常情况下执行try代码段中的语句,出现异常后则在执行完finally代码段之后引发异常。

9_2 输出\发生参数异常\

9_3 对于常量表达式,如果使用checked操作符强制对表达式进行类型检查,或是在编译时指定了“/checked+”选项,那么发生溢出的表达式将不能通过编译。如果不要求检查,那么执行到发生溢出的表达式就会引发OverflowException异常。 对于一般运算表达式,执行到发生溢出的表达式都会引发OverflowException异常。

表达式发生溢出主要是指整数变量的范围超出了其类型的最大/最小取值范围,如对取值为30000的short型变量加10000,或是将1000强制转换为byte型变量。 9_4 打开文件时可能引发的异常主要有:

(1)DirverNotFoundException:指定的磁盘分区不存在。 (2)DirectoryNotFoundException:指定的文件目录不存在。 (3)FileNotFoundException:指定的文件不存在。 (4)FileLoadException:加载文件内容失败。 如果文件是用于记录程序相关信息,那么在打开文件失败时应创建新文件;如果用户需要使用程序来编辑文件内容,那么应向用户报告错误并由用户选择相应的处理方式。 9_5 略 9_6 略

Chapter 10

10_1 抽象类和接口都不能被实例化,抽象类中的抽象方法和接口中的接口方法都只有方法声明,而没有执行体。抽象方法和接口方法都需要在具体的派生类中提供实现。

抽象类可以有成员字段和非抽象方法,但接口不能。即接口是比抽象类更为“抽象”的一种数据类型。

10_2 如果需要通过对象实例来调用方法,那么应采用隐式实现的方式。如果要区别不同接

口的同名方法,那么应采用显式实现的方式,并在调用时先将对象转换为对应的接口类型。

10_3 不能,必须是重载基类中的虚拟方法才能使用override修饰符。 10_4 略

10_5 组合框和列表框的元素集合都实现了ICollection接口,那么可以创建一个ArrayList或List列表对象,将元素集合作为参数传递给列表对象的构造函数,而后调用列表对象的Sort方法进行排序。 10_6 略

10_7 包括二叉树节点类型BTNode和二叉树类型BinaryTree两部分,参考代码如下。

///

/// 二叉树节点类型

///

public class BTNode {

private object value;

private BTNode left, right;

public 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; } }

public BTNode(object obj) {

value = obj; } }

///

/// 二叉树类型 ///

class BinaryTree : ICollection {

private BTNode root; public BTNode Root {

get { return root; } }

public int Count { get { return PreTraverse(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) {

PreTraverse(root).CopyTo(array, index); }

IEnumerator IEnumerable.GetEnumerator() {

return PreTraverse(root).GetEnumerator(); }

bool ICollection.IsSynchronized {

get { return false; } }

object ICollection.SyncRoot {

get { return null; } }

public 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)); 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(); 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(BTNode 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(PostTraverse(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 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 {

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(\中序遍历:\

result = BinaryTree.InTraverse(tree1.Root); foreach (object obj in result) Console.Write(obj.ToString() + ','); Console.WriteLine(\后序遍历:\

result = BinaryTree.PostTraverse(tree1.Root); foreach (object obj in result) Console.Write(obj.ToString() + ','); } }

10_8 略

Chapter 11

11_1 略

11_2 泛型类A中的嵌套类型B使用的类型参数S在A中没有定义,应将其改为

B

11_3 输出内容如下: 2 : A's System.Int32 2 : B's System.Int32 2.5 : B's System.Double