注册 登录
编程论坛 C# 论坛

求个大神 帮忙写段作业代码

wszj1314 发布于 2015-12-24 22:40, 5004 次点击
  例:  控制台应用计算机

  例:控制台输入 :4*4回车得到结果,
      控制台输入:5加8除以4 回车得到结果,
      控制台输入:  16.54*14.2加6减2  回车得结果。  
 
  可以无限循环的c# 代码,  现在课程还在基础班,不要太深入代码,求大神帮忙!
10 回复
#2
shghe2015-12-29 11:09
一个个的读取字符串就OK了
#3
hubinyes2015-12-29 15:18
这太难了
#4
林振强小更2016-01-08 10:28
不会
#5
小亲个2016-01-08 22:47
作业应该自己完成昂
#6
丨渊丨2016-01-25 16:36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 计算器
{
    class Program
    {
        static void Main(string[] args)
        {
           Console.WriteLine("请输入一个算式");
           string str = Console.ReadLine();//接受收入的运算
           string[] separator = {"+","-","*","/" };//用来分割str,获得数字
           string[] number = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };// 用来分割str,获得操作符
           List<string> lstr = new List<string>();//定义一个string的泛型集合
           lstr.AddRange(str.Split(separator, StringSplitOptions.RemoveEmptyEntries));//将str分割得到的数字存到泛型集合中
           List<string> lopretor = new List<string>();//定义一个string的泛型集合
           lopretor.AddRange(str.Split(number,StringSplitOptions.RemoveEmptyEntries));//将str分割得到的运算符存到泛型集合中
            //删除小数点,留下+ - * /
           while (true)
           {
               lopretor.Remove(".");
               if (!lopretor.Contains("."))
               {
                   break;
               }
           }  
           //foreach (var item in lopretor)
           //{
           //    Console.WriteLine(item);
           //}
           double result = 0;//定义一个结果用来接收
           for (int i = 0; i < lopretor.Count; i++)//循环遍历lpretor的集合,读取其中存储的操作符
           {
               Opretor o = Factory.GetOpretor(lopretor[i]);//调用Factory的GetOpretor方法,根据lopretor[i]的值返回一个Opretor对象
               if (i == 0)//该运算符的索引为0
               {
                   result = o.GetResult(Convert.ToDouble(lstr[i]), Convert.ToDouble(lstr[i + 1]));//将lstr的前2个数字做运算
               }
               else//该运算符的索引位置不为0时
               {
                    result=o.GetResult(result, Convert.ToDouble(lstr[i + 1]));//将第一次的结果result传入方法中做运算
               }
            
           }
           Console.Write(result);
           Console.ReadKey();
        }
    }
    //定义一个工厂类
    public class Factory
    {
        public static Opretor GetOpretor(string op)
        {
            Opretor opre = null;
            switch(op)
            {
                case "+": opre = new Add();
                    break;
                case "-": opre = new Cut();
                    break;
                case "*": opre = new Mul();
                    break;
                case "/": opre = new Div();
                    break;
                default: return null;
            }
            return opre;
        }
    }
    //定义一个运算类
    public class Opretor
    {
        //声明一个虚方法
        public virtual double GetResult(double num1, double num2)
        {
            return 0;
        }      
    }
    //定义一个加法类,继承运算类
    public class Add : Opretor
    {
        //重写运算类中GetResult的方法
        public override double GetResult(double num1, double num2)
        {
            return num1 + num2;
        }
    }
    //定义一个减法类,继承运算类
    public class Cut : Opretor
    {
        //重写运算类中GetResult的方法
        public override double GetResult(double num1, double num2)
        {
            return num1 - num2;
        }
    }
    //定义一个乘法类,继承运算类
    public class Mul : Opretor
    {
        //重写运算类中GetResult的方法
        public override double GetResult(double num1, double num2)
        {
            return num1 * num2;
        }
    }
    //定义一个除法类,继承运算类
    public class Div : Opretor
    {
        //重写运算类中GetResult的方法
        public override double GetResult(double num1, double num2)
        {
            return num1 / num2;
        }
    }
}
#7
丨渊丨2016-01-25 16:37
上面是我自己写的一个C#的控制台计算器, 你添加个循环就可以满足你的需求了
#8
丨渊丨2016-01-25 16:59
我写的那个计算器多少还是有些问题的     你输入4+8/4得到的结果会是3,而不是6, 会取到第一次运算的结果,来参与第二次运算,而不是按照加减乘除的运算循序。
#9
米粒大小32016-01-25 17:03
回复 6楼 丨渊丨
你这个好像没有考虑计算先后顺序
#10
米粒大小32016-01-25 17:04
回复 8楼 丨渊丨
已经很厉害了
#11
丨渊丨2016-01-25 18:45
回复 10楼 米粒大小3
刚才 我用win7自带的 计算器 输入 4+8 / 4 得到的结果是3   因为计算器就是在你输入第二个运算符的时候,参加运算的数字就是你第一次运算得到的结果还有你输入的第三个数,  按照计算器的运算顺序来说,我写的计算器的代码应该没什么问题

但是我提示用户 “请输入一个算式”

那这个算式  应该 按照 加减乘除 的运算顺序来 算数的
1