类例题:狮子和狼and求直线方程

如题。

狮子和狼: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为负数的时候,是否需要修改程序,使结果更符合数学习惯?怎么修改?

原文地址:https://www.cnblogs.com/wanjinliu/p/12358803.html