如题。
狮子和狼:9匹狼,一匹匹钻出来。每次都尝试攻击狮子。狮子最终迎战。
例题和代码为CSDN博主「gd_linlong」原创。本人做少许修改。感谢作者!
主程序:
static void Main(string[] args) { var lion = new Lion(); var wolves = new Wolf[9]; for (int i = 0; i < wolves.Length; i++) { wolves[i] = new Wolf(); wolves[i].Attack(); } lion.Attack(); Console.WriteLine(Wolf.wolfcount); wolves[8] = null; GC.Collect(); Thread.Sleep(3000); Console.WriteLine(Wolf.wolfcount); Console.ReadKey(); }
狼类程序:
class Wolf { public static int wolfcount=0; public Wolf() { wolfcount++; } ~Wolf() { wolfcount--; } public void Attack() { if(wolfcount<5) { Console.WriteLine("Run away..."); } else { Console.WriteLine("Let's bit lion!!"); } } }
狮子类程序:
class Lion { public void Attack() { if(Wolf.wolfcount<=7) { Console.WriteLine("Lion win!"); } else { Console.WriteLine("Lion is defeated"); } } }
在主程序最后加入类似以下代码,可以验证析构函数的执行,顺便看一下c#中的垃圾处理器。
Console.WriteLine(Wolf.wolfcount); wolves[8] = null; GC.Collect(); Thread.Sleep(3000); Console.WriteLine(Wolf.wolfcount);
没有进程停顿,看不出结果(没有空闲时间回收内存)。
已知两点,求直线方程:
分析:
1、写点类,包含横纵坐标字段和输入方法
class Point { public int x, y; public void getPoint() { try { Console.WriteLine("请输入该点横坐标:"); x = int.Parse(Console.ReadLine()); Console.WriteLine("请输入该点纵坐标:"); y = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("输入错误!"); throw; } } }
2、写直线类(y=kx+b),包括k、b两个字段,输入两点计算k和b的方法,打印显示直线方程的方法。
class Line { double k=0, b=0; public void getKB(Point a,Point b) { k = (double)(b.y - a.y) / (b.x - a.x); //根据y=kx+b,得:b=y-kx。 //已知y、k、x,直接求b this.b = a.y - k * a.x; } public void output_Line() { Console.WriteLine($"该直线方程为:y={k}x+{b}"); } }
3、主程序调用:a)声明两个点;b)声明一条直线;c)输入两个点的坐标;d)把两点坐标带入直线,求直线参数;e)输出直线。
class Program { static void Main(string[] args) { Point a1=new Point(), a2=new Point(); var l = new Line(); a1.getPoint(); a2.getPoint(); l.getKB(a1, a2); l.output_Line(); Console.ReadKey(); } }
想一想:当k或b为负数的时候,是否需要修改程序,使结果更符合数学习惯?怎么修改?