拿到题目的时候,快放假了,也没心思做。十月七号的一下午大概从两点做到八点半,加上十月八号的十二点半到两点半,做了一共八个半小时,去掉吃饭半个小时那么一共做了八个小时。

逆波兰表达式我是扒的别人代码,没有自己写一遍。

记得有一位老师曾经在课上讲过,每个人按照约定完成自己的工作,这是现代工业的基础。

学习了一些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#实现的更多相关文章

  1. 软件工程第四周作业-PSP

    psp表格 类别 内容 开始时间 结束时间 中断时间 delta时间 学习 学习C# 10.6下午7:00 10.6下午8:00 - 60min 写代码 写主函数以及一些小的方法 10.7下午2:00 ...

  2. 20169212《Linux内核原理与分析》第四周作业

    Linux第四周作业 1. 堆栈知识 首先回顾了下堆栈相关的知识,堆栈机制是高级语言可以运行的一个基础,这一块需要重点掌握.函数发生调用时,如图 call指令:将eip的按顺序执行的下一条指令(因为在 ...

  3. 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结

    软件工程结对编程作业总结 11061160  顾泽鹏 11061151  庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...

  4. 2019年春季学期第四周作业Compile Summarize

    这个作业属于哪个课程 C语言程序设计一 这个作业要求在哪里 2019春季学期第四周作业 我的课程目标 重新学习有关数组的问题 这个作业在哪个具体方面帮助我实现目标 对于置换有了新的见解 参考文献 中国 ...

  5. 2018-2019-1 20189221《Linux内核原理与分析》第四周作业

    2018-2019-1 20189221<Linux内核原理与分析>第四周作业 教材学习:<庖丁解牛Linux内核分析> 第 3 章 MenuOS的构造 计算机三大法宝:存储程 ...

  6. 20169211《Linux内核原理与分析》第四周作业

    20169211<Linux内核原理与分析>第四周作业内容列表 1.教材第3.5章节知识学习总结: 2.实验楼配套实验二实验报告: 1.<linux内核设计与实现>教材第3.5 ...

  7. “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...

  8. “希希敬敬对”队软件工程第九次作业-beta冲刺第四次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第四次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...

  9. “希希敬敬对”队软件工程第九次作业-beta冲刺第三次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第三次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...

随机推荐

  1. CentOS 6.8安装Ceph

    机器规划 IP 主机名 角色 10.101.0.1 ceph01 mon admin mds 10.101.0.2 ceph02 ods 10.101.0.3 ceph03 ods 10.101.0. ...

  2. Java 序列化与反序列化(Serialization)

    一.什么是?为什么需要? 序列化(Serialization)是将对象的状态信息转化为可以存储或者传输的形式的过程,反序列化则为其逆过程. 内存的易失性:传输需要:一些应用场景中需要将对象持久化下来, ...

  3. C# 设计模式之 单例模式

    单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我…… public class Singleton{    private static ...

  4. composer切换中国镜像

    替换 composer.lock 文件中的 https://files.phpcomposer.com/files/ 为 https://dl.laravel-china.org 命令行 compos ...

  5. php_Trait

    * Trait Answer* Trait : 关键字 Trait* 使用 use* 我的理解 是为了解决php不能多继承的一个处理方式* 在使用的时候 可以让两个不相关的类 产生联系* Trait ...

  6. Java学习笔记十七:Java中static使用方法

    Java中static使用方法 一:Java中的static使用之静态变量: 我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的 ...

  7. gmtime与mktime的重新编写

    这几日发现Linux的mktime与gmtime所处理的数据类型是32位的,即代表时间设置只能设置到2038年,在公司的产品要实现这个时间的突破还是得自己写一个新的处理时间的函数. 作为一个刚毕业的程 ...

  8. 后端系统开发利器之gflags

    gflags是Google的一个开源项目,用于解析程序运行参数.gflags简单易用,它的好处在于统一配置格式,减少开发工作量.在工程实践中,gflags在简化开发和测试方面表现非常出色,它还有一个很 ...

  9. python--函数汇总

    函数: 定义和特性: 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名()即可 特性:1,代码重用2,保持一致性3,可扩展性 函数的创建: 一,格式:p ...

  10. python3 使用语音库pyttsx3

    python3 使用语音库pyttsx3 环境linux+python3.6 sudo pip install pyttsx3 sudo apt-get install espeak 代码实例 imp ...