当前位置:首页 > 第6章 面向对象程序设计 习题
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;
共分享92篇相关文档