第6章 面向对象程序设计 习题 联系客服

发布时间 : 星期二 文章第6章 面向对象程序设计 习题更新完毕开始阅读1e65e2b3168884868662d642

public void delete(int pos) //删除一个元素

{ for (int i = pos + 1; i < num; i++) list[i - 1] = list[i]; num--; }

public object get(int pos) //获取指定位置的元素 { if (pos < num) return list[pos]; else return null; }

public int getnum() { return num; } public string disp()

//获取实际元素个数

//获取所有元素

{ string s = \

for (int i = 0; i < num; i++) s += list[i] + \ return s; } }

class Program

{ static void Main(string[] args) { List list = new List(); list.add(\ list.add(1.23); list.add(2); list.add('a');

Console.WriteLine(\元素序列:{0}\ Console.WriteLine(\元素个数:{0}\ Console.WriteLine(\位置1的元素:{0}\ Console.WriteLine(\删除位置2的元素\ list.delete(2);

Console.WriteLine(\元素序列:{0}\

Console.Read(); }

}

9.设计一个控制台应用程序,编程计算0~100中所有能被7整除的整数。要求:将输出结果

的命令置于事件处理程序中,每找到一个符合条件的数,就通过触发事件来执行输出程序。

public delegate void mydelegate1(int i); class MyEvent

{ public event mydelegate1 Event1; public void FireEvent1(int i)

//事件源类

//定义事件

//引发事件Event1的方法

{ if (Event1 != null) Event1(i); } }

public class Program

//创建订阅者类

{ public static void show(int i)

{ Console.WriteLine(\事件触发,能被7整除的数是:{0}\ }

public static void Main()

{ MyEvent a = new MyEvent();

//订阅事件,把方法FireEvent1添加到事件Event1的列表中 a.Event1 += new mydelegate1(show); for(int i=0;i<=100;i++)

if (i % 7 == 0) a.FireEvent1(i); //触发事件

Console.Read(); } }

10.请设计一个类,用来模拟栈及其操作。

说明:栈是一种重要的数据结构,在内存中占用连续的存储单元。栈有两个端点,固定的栈底和浮动的栈顶。栈有两种基本操作:push(压栈)和pop(出栈)。压栈是向栈顶位置写入一个元素,然后使栈顶指示器加1;出栈是先使栈顶指示器减1,再把该位置的元素读出来。 提示:可用一个数组成员(假设为buffer)表示栈的空间,用一个整型成员(假设为sp)表示栈顶指示器,并在构造函数中分配栈的空间和设置sp的值为0。出栈与压栈均用类的方法来实现,一般设其方法名分别为push和pop。

class Stack

{ private int[] arr; private int sp; private int count; public Stack(int Length)

//栈空间 //栈顶指示器 //允许的栈元素的最多个数 //栈的构造函数形式一

{ count = Length; sp = 0; arr = new int[Length]; }

public Stack() //栈的构造函数的另一种形式 { count = 10; sp = 0; arr = new int[10]; } public bool isEmptyStack()

{ if (sp == 0) return true; else return false; }

public bool isFullStack()

{ if (sp ==count ) return true; else return false; }

public void push(int element) //压栈操作 { arr[sp] = element; public int pop()

sp = sp + 1; } //出栈操作

{ sp = sp - 1; return (arr[sp]); } public string putstack() { int i;

string stack = \

for (i = 0; i < sp; i++) stack = stack + arr[i].ToString()+ \ \return stack; } }

11.设计一个控制台应用程序项目a,输入若干个学生的姓名、英语和数学成绩,求出总分,

并按总分从高到低排序。要求设计一个学生类Student,所有学生对象存放在一个Student对象数组中,通过一个方法对其按照总分进行降序排序,最出输出排序后的结果,输出结果类似于下图所示。

控制台应用程序项目a的执行结果

public class Student { private string name; private int eng, math, sum; public int psum

{ get { return sum; } } public void inscore()

{ Console.Write(\姓名:\ name = Console.ReadLine();

Console.Write(\英语:\ eng = int.Parse(Console.ReadLine()); Console.Write(\数学:\ math = int.Parse(Console.ReadLine()); sum = eng + math; }

public void display()

{ Console.WriteLine(\ } }

class Program

{ const int Max = 100;

static void sort(int n, params Student[] p) //采用冒泡排序法排序 { int i, j;

Student tmp;

for (i = 0; i < n - 1; i++) { for (j = 0; j < n-i-1; j++) if (p[j].psum < p[j+1].psum)

{ tmp = p[j + 1]; p[j + 1] = p[j]; p[j] = tmp; } } }

static void Main(string[] args) { int n, i;

Student[] p = new Student[Max]; Console.Write(\

n = int.Parse(Console.ReadLine()); for (i = 0; i < n; i++)

//定义对象引用数组

//创建对象引用的实例

p[i] = new Student(); for (i = 0; i < n; i++)

{ Console.WriteLine(\输入第{0}个学生数据:\ p[i].inscore(); }

Console.WriteLine(\排序前:\

Console.WriteLine(\姓名\\t英语\\t数学\\t总分\ for (i = 0; i < n; i++)

{ Console.Write(\序号{0}:\

p[i].display(); }

sort(n, p); //按总降序排序 Console.WriteLine(\排序后:\

Console.WriteLine(\姓名\\t英语\\t数学\\t总分\ for (i = 0; i < n; i++)

{ Console.Write(\第{0}名:\

p[i].display(); } } }

说明:可以采用任一种排序方法,也可以采用继承Icomparable接口的方式实现(见第7章习题)。

12. 设计一个控制台应用程序用于模拟考试过程,其中有一个教师类Teacher和一个学生类

Student,教师宣布开始考试,学生接收后开始答题,学生答题完毕引发答题完毕事件,教师收卷。

public delegate void EndExamType(DateTime endtime, Student stud);

//声明完成考试委托类型 public delegate void StartExamType(DateTime starttime);

//声明开始考试委托类型

class Student //学生类

{

private string name; //学生姓名

public event EndExamType EndExam; //定义完成考试事件 public Student(string name) //构造函数 { this.name = name;