用C#实现简易的计算机

嗯,有点简陋。

数据通常在控制台中以文本输入,所以要先把字符串转换为数值。(你用控件就不用换了......)

可以用Parse和TryParse来将字符串转为数值,它们的区别为1.如果Parse方法不可以转换此字符串就会报错例如double a=double.Parse("a");2.TryParse方法如果遇到不能转换的字符串就会返回false。如下代码:

    public static void Changeover()//把字符串转为数据
    {
        if (double.TryParse(a, out a1))
        {
            if (double.TryParse(b, out a2))
            {
            }
        }
    }

注意一定要带out关键字

静态与整个类相关,静态方法不用类的实例调用可以直接调用,但不能访问实例成员(没有static限定符的都是实例成员),如果想对一个静态的字段访问要用类名如:A.a=3;

解决完转换后便是提供基础的+-*/的方法了

    public void add()
    {
        Changeover();
        WriteLine($"相加结果为{a1 += a2}");
    }
    public void Subtracts()
    {
        Changeover();
        WriteLine($"相减结果为{a1 -= a2}");
    }
    public void times()
    {
        Changeover();
        WriteLine($"相乘结果为{a1 *= a2}");
    }
    public void divide()
    {
            WriteLine($"相乘结果为{a1 /= a2}");
    }

为了日后可以扩展或重写就把它们创立为方法,其实每个方法都应改加上virtual以方便日后继承

为了有可读性顺便加上阶乘和乘法表

    public double Factorials(double value)
    {
        if (value == 0||value==1)
        {
            return 1;
        }
        return value *= Factorials(value - 1);
    }
    public double Table(double value)
    {
        for(double i = 0; i <= 10; i++)
        {
            double a = value;
             WriteLine(a*= i);
        }
        return 0;
    }

阶乘运用了一种叫递归的方法,但递归有时会导致内存溢出,因为每次调用都会存储处理数据。

迭代是一种更好的方法,虽然不那么简易

完整代码:

using System;
using static System.Console;
class A
{
    static string a = ReadLine();
    static string enter = ReadLine();
    static string b = ReadLine();
    static double a1;
    static double a2;
    public static void Changeover()//把字符串转为数据
    {
        if (double.TryParse(a, out a1))
        {
            if (double.TryParse(b, out a2))
            {
            }
        }
    }
    public void add()
    {
        Changeover();
        WriteLine($"相加结果为{a1 += a2}");
    }
    public void Subtracts()
    {
        Changeover();
        WriteLine($"相减结果为{a1 -= a2}");
    }
    public void times()
    {
        Changeover();
        WriteLine($"相乘结果为{a1 *= a2}");
    }
    public void divide()
    {
            WriteLine($"相乘结果为{a1 /= a2}");
    }
    public double Factorials(double value)
    {
        if (value == 0||value==1)
        {
            return 1;
        }
        return value *= Factorials(value - 1);
    }
    public double Table(double value)
    {
        for(double i = 0; i <= 10; i++)
        {
            double a = value;
             WriteLine(a*= i);
        }
        return 0;
    }
    public static void Main(string[] vs)
    {
        var z = new A();
        WriteLine("请输入一个值并输入你想进行的操作之后再次输入一个数");
        WriteLine("+为进行加法操作,-为进行减法操作,*为乘法操作,/为除法操作,!为阶乘,table为你输入的值的乘法表");
        if (enter == "+")
        {
            z.add();
        }
        else if (enter == "-")
        {
            z.Subtracts();
        }
        else if(enter=="*")
        {
            z.times();
        }
        else if(enter=="/")
        {
               z.divide();         
        }
        else if(enter=="!")
        {
            Changeover();
            WriteLine($"结果为{z.Factorials(a1)}");
        }
        else if (enter == "table")
        {
            Changeover();
            z.Table(a1);
        }
        ReadLine();
    }
}

小干货第2期:

你可以用#define预编译来提供给编译器一个符号,而#if在收到符号时才执行所包含的语句

#undef来删除符号

下期再见......

上一篇:用了那么多项目管理工具,还是CORNERSTONE这款最好用


下一篇:事件的独立性