博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
四则运算程序生成
阅读量:6155 次
发布时间:2019-06-21

本文共 7180 字,大约阅读时间需要 23 分钟。

作业基本要求

 基本要求:

  • 除了整数以外,还能支持真分数的四则运算。
  • 对实现的功能进行描述,并且对实现结果要求截图。

设计思想:首先思考运算数字范围,考虑小学生的运算能力,然后分类运算方法,分为加减乘除混合运算,

然后可以选择是继续做题还是退出程序,可以总结做对或者做错的题数,方便计算正确以及错误的题数。

源代码

using System;  using System.Collections.Generic;  using System.Text;  using System.Text.RegularExpressions;    namespace ConsoleApplication1  {      class Class1      {          private static Dictionary
_operatorLevel; public static void Main(string[] arg) { Console.WriteLine("Type in the source expr"); string sourceExpression = Console.ReadLine(); Console.WriteLine(InsertBlank(sourceExpression)); string rpnExperssion = ConvertToRPN(InsertBlank(sourceExpression)); Console.WriteLine(rpnExperssion); Console.WriteLine(GetResult(rpnExperssion)); Console.ReadLine(); } public static double GetValue(double left, double right, char _operator) { switch (_operator) { case '+': return left+right; case '-': return left-right; case '*': return left*right; case '/': return left/right; } return 0; } public static double GetResult(string source) { Stack
stack = new Stack
(); var list = source.Split(' '); for (int i = 0; i < list.Length; i++) { string current = list[i]; if (Regex.IsMatch(current, "^([0-9]{1,}){1}")) { stack.Push(current); } else if (OperatorLevel.ContainsKey(current)) { double right = double.Parse(stack.Pop()); double left = double.Parse(stack.Pop()); stack.Push(GetValue(left, right, current[0]).ToString()); } } return double.Parse(stack.Pop()); } public static string ConvertToRPN(string source) { StringBuilder result = new StringBuilder(); Stack
stack = new Stack
(); string[] list = source.Split(' '); for (int i = 0; i < list.Length ; i++) { string current = list[i]; if (Regex.IsMatch(current, "^([0-9]{1,}){1}")) { result.Append(current + " "); } else if (OperatorLevel.ContainsKey(current)) { if (stack.Count > 0) { var prev = stack.Peek(); if (prev == "(") { stack.Push(current); continue; } if (current == "(") { stack.Push(current); continue; } if (current == ")") { while (stack.Count > 0 && stack.Peek() != "(") { result.Append(stack.Pop() + " "); } //Pop the "(" stack.Pop(); continue; } if (OperatorLevel[current] < OperatorLevel[prev]) { while (stack.Count > 0) { var top = stack.Pop(); if (top != "(" && top != ")") { result.Append(top + " "); } else { break; } } stack.Push(current); } else { stack.Push(current); } } else { stack.Push(current); } } } if (stack.Count > 0) { while (stack.Count > 0) { var top = stack.Pop(); if (top != "(" && top != ")") { result.Append(top + " "); } } } return result.ToString(); } public static string InsertBlank(string source) { StringBuilder sb = new StringBuilder(); var list = source.ToCharArray(); foreach (var temp in list) { if (OperatorLevel.ContainsKey(temp.ToString())) { sb.Append(" "); sb.Append(temp.ToString()); sb.Append(" "); } else { sb.Append(temp); } } return sb.ToString(); } //运算符字典 方便查询运算符优先级 public static Dictionary
OperatorLevel { get { if(_operatorLevel==null) { _operatorLevel = new Dictionary
(); _operatorLevel.Add("+", 0); _operatorLevel.Add("-", 0); _operatorLevel.Add("(", 1); _operatorLevel.Add("*", 1); _operatorLevel.Add("/", 1); _operatorLevel.Add(")", 0); } return _operatorLevel; } } }}
void main(){    printf("\n欢迎进入小学四则运算\n\n");        while(1)        {                int con=0,choose=0;            printf("请选择:\n");            printf("加法运算请输入(1)\n");            printf("减法运算请输入(2)\n");            printf("乘法运算请输入(3)\n");            printf("除法运算请输入(4)\n");            printf("混合运算请输入(5)\n");            if(con==0)                scanf("%d",&choose);            switch(choose)            {                case 1:add();break;                case 2: minu(); break;                case 3: mul(); break;                case 4: di(); break;                case 5: hunhe(); break;            }            printf("\n重新选择?请输入(1)\n");            printf("\n退出运算?请输入(2)\n");            scanf("%d",&con);            if(con==1)                con=1;            if(con==2)                break;        }        printf("您总共完成%d道题\n正确%d道\n错误%d道\n",right+wrong,right,wrong);}
 

程序截图

 

 

 

 

 

 

总结:

通过这次作业,我发现自己在编程方面还有许多的不足。自己在C#方面还有许多的东西要学习。这次作业中我通过网络,书籍,还有询问同学,才将作业完成。编程需要平时的积累,在平日我们积少成多,在编程时我们才能更好地编程。以后在上课时,我要更多的跟着老师走,有不懂的多问老师。

转载于:https://www.cnblogs.com/Monologue/p/5279997.html

你可能感兴趣的文章
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>
SQL优化技巧
查看>>
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>
Dijkstra算法
查看>>
css 动画 和 响应式布局和兼容性
查看>>
csrf 跨站请求伪造相关以及django的中间件
查看>>
MySQL数据类型--与MySQL零距离接触2-11MySQL自动编号
查看>>
生日小助手源码运行的步骤
查看>>
Configuration python CGI in XAMPP in win-7
查看>>
bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
查看>>
CF 888E Maximum Subsequence——折半搜索
查看>>