软件工程第四周作业之四则运算-C#实现
拿到题目的时候,快放假了,也没心思做。十月七号的一下午大概从两点做到八点半,加上十月八号的十二点半到两点半,做了一共八个半小时,去掉吃饭半个小时那么一共做了八个小时。
逆波兰表达式我是扒的别人代码,没有自己写一遍。
记得有一位老师曾经在课上讲过,每个人按照约定完成自己的工作,这是现代工业的基础。
学习了一些C#语言。
我写代码生成了带括号的四则运算表达式。数是随机的,括号是暴力生成的,特暴力。
有理数计算懒得写了,女神青睐不值钱。
加上括号之后怎么避免产生无限小数呢?这个我没有避免,仍然有时候会算出带小数的,比较少。
加上括号之前的比较好处理。
由于第一个数一定不会做被除数(出现在分母里)
我直接把第2,3,4个数都构造成2^m*5^n,这样一定可以得到一个有限小数,当然,可能存在更好更漂亮的方法。
下面贴一些关键代码。
static void Main(string[] args)
{ int num;//The number of expressions
int cnt = ;
int token = ;
var arguments = CommandLineArgumentParser.Parse(args);//command line parameter
int anslen = ;//The number of the answers of expressions that have been used.
double[] ansrep;//array to maintain answers that have been used
ansrep = new double[];
ansrep[] = -;
if (!arguments.Has("-c"))//如果命令行参数没有-c
num = ;
else
{
num = int.Parse(arguments.Get("-c").Next);//命令行参数中得到要输出的表达式数量
token = ;
}
if (token==)
{
for (int i = ; i < num; i++)
{
Test t = new Test();//new Test
t.opinit();
t.GetBracketExp();
// t.GetExp();
//t.NoRepeatedAns(anslen, ansrep);
ansrep[(anslen++) - ] = t.ansr;
t.DispExp();//display expression
Console.Write("?");
double ans = double.Parse(Console.ReadLine());
// Console.WriteLine("{0},{1}",ans,t.ansr);
if (Math.Abs(ans - t.ansr) < 1e-)//answer is right
{
Console.WriteLine("You are very clever!!!");
cnt++;
}
else//answer is wrong
{
if (Math.Abs((double)Math.Round(t.ansr) - t.ansr) < 1e-)//Intenger
{
Console.WriteLine("Sorry,the answer is {0}", (int)t.ansr);
}
else//decimal
{
string floatValue = t.ansr.ToString();
floatValue = floatValue.TrimEnd('.', '');
Console.WriteLine("Sorry,the answer is {0}", floatValue); }
}
/* for (int j = 0; j < anslen; j++)
{
Console.WriteLine("{0:f5}", ansrep[j]);
}*/
}
}
else
{
for (int i = ; i < num; i++)
{
Test t = new Test();//new Test
t.opinit();
t.GetBracketExp();
// t.GetExp();
//t.NoRepeatedAns(anslen, ansrep);
ansrep[(anslen++) - ] = t.ansr;
t.DispExpAns(t);//display expression and answer }
}
Console.WriteLine("Total 20 Problems,you have solved {0}problem(s)", cnt);
}
}
这是我的主函数。
值得一提的是,读取命令行参数也是用的别人代码,这两个加起来有接近三百行之多。

结对编程的照片,最后修改一些代码的格式,找一些bug,我的搭档王玉玲同学耐心的给予我帮助和指导,作为一个领航者给出一些方向上的意见。
https://git.coding.net/Rainbows/F4.git
这是我代码的git地址
结对编程争论的点、体会稍后补充
软件工程第四周作业之四则运算-C#实现的更多相关文章
- 软件工程第四周作业-PSP
psp表格 类别 内容 开始时间 结束时间 中断时间 delta时间 学习 学习C# 10.6下午7:00 10.6下午8:00 - 60min 写代码 写主函数以及一些小的方法 10.7下午2:00 ...
- 20169212《Linux内核原理与分析》第四周作业
Linux第四周作业 1. 堆栈知识 首先回顾了下堆栈相关的知识,堆栈机制是高级语言可以运行的一个基础,这一块需要重点掌握.函数发生调用时,如图 call指令:将eip的按顺序执行的下一条指令(因为在 ...
- 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结
软件工程结对编程作业总结 11061160 顾泽鹏 11061151 庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...
- 2019年春季学期第四周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计一 这个作业要求在哪里 2019春季学期第四周作业 我的课程目标 重新学习有关数组的问题 这个作业在哪个具体方面帮助我实现目标 对于置换有了新的见解 参考文献 中国 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第四周作业
2018-2019-1 20189221<Linux内核原理与分析>第四周作业 教材学习:<庖丁解牛Linux内核分析> 第 3 章 MenuOS的构造 计算机三大法宝:存储程 ...
- 20169211《Linux内核原理与分析》第四周作业
20169211<Linux内核原理与分析>第四周作业内容列表 1.教材第3.5章节知识学习总结: 2.实验楼配套实验二实验报告: 1.<linux内核设计与实现>教材第3.5 ...
- “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔
“希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔 队名: “希希敬敬对” 龙江腾(队长) 201810775001 杨希 201810812008 何敬 ...
- “希希敬敬对”队软件工程第九次作业-beta冲刺第四次随笔
“希希敬敬对”队软件工程第九次作业-beta冲刺第四次随笔 队名: “希希敬敬对” 龙江腾(队长) 201810775001 杨希 201810812008 何敬 ...
- “希希敬敬对”队软件工程第九次作业-beta冲刺第三次随笔
“希希敬敬对”队软件工程第九次作业-beta冲刺第三次随笔 队名: “希希敬敬对” 龙江腾(队长) 201810775001 杨希 201810812008 何敬 ...
随机推荐
- mysql碰到的问题总结
1.问题描述: 连接数据库出现大约10s延迟后才能连接,排除网络问题 解决方案: 通过抓包工具tcpdump抓包分析mysql在连接开始有近10s的空白请求,问题原因就在这 ,不知道在执行什么请求,后 ...
- python字符编码转换说明及深浅copy介绍
编码说明: 常用编码介绍: ascii 数字,字母 特殊字符. 字节:8位表示一个字节. 字符:是你看到的内容的最小组成单位. abc : a 一个字符. 中国:中 一个字符. a : 0000 10 ...
- Sass变量及嵌套
1. 变量:SASS允许使用变量,所有变量以$开头. 变量声明:$highlight-color: #000; 注意:变量可以在css规则块定义之外存在.如下例子: $nav-color: #F90; ...
- python反射怎么用
反射: 通过字符串的形式对 对象 进行增删改查 setattr 设置某个属性的值 class A(object): def __init__(self): self.name = "sath ...
- php的基础知识(一)
php(超文本预处理器)定义: php(外文名:php:Hertext Preprocessor,中文名:“超文本预处理器”)是一种通用的开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于 ...
- 帝国cms伪静态设置方法(收藏)
众所周知,动态页面不利于收录和排名.伪静态可以完美的解决这问题,配合百度云加速CDN,可以让动态页面有静态页面一样快的访问速度. 今天开拓族给大家带来帝国CMS伪静态的详细设置方法. 1.栏目设置为动 ...
- ruby中的return方法及class实例方法的initialize方法
return是函数的返回值 class Mtring def initialize(str) @name = str end def aa ary = @name.split(/:/) return ...
- 《JavaScript实用效果整理》系列分享专栏
整理一些使用的JavaScript效果,在Web开发中遇到的比较好的动态效果,都收藏在这里,对以后的网站开发增加不少的色彩 <JavaScript实用效果整理>已整理成PDF文档,点击可直 ...
- JVM基础知识及拓展
我们可以吧JVM的基本结构分为四块:类加载器.执行引擎.运行时数据区和本地接口.一般来说Java程序在JVM中的执行流程如下: ①.首先我们会利用javac命令将我们所编写的.java源代码文件变异成 ...
- vuetify.js框架 下拉框数据改变DOM原数据未清除
今天遇到一个奇怪的bug 需求很简单,就是将“引擎能力”下拉框选中的值作为筛选条件传入到“样本类型”下拉框中,默认“样本类型”下拉框显示所有样本类型 看图: 如图所示,功能很简单. 其实还是对vuet ...