软件工程作业 四则运算(一)

软件工程的课上老师布置了一个题目,要求实现一个四则运算程序,可以从txt文件中读取算式并运算结果(要支持分数),判断用户输入的结果是否正确并给出正确答案。

完成这个题目我用到了之前数据结构上机题的程序,在那个上机题中实现了中缀表达式转后缀表达式并运算。我这次的作业程序是以那个为基础改的。要实现这次题目的功能要解决的问题主要有以下几点:

  1.要读取算式并运算,需要将读取的中缀表达式转换为后缀表达式才可以运算。

  2.需要支持分数运算,要定义一个分数类来存储分数的分子和分母。

由于之前的程序结构并不是很好,接口定义也不好可重用性不强。所以这次对代码做了很大修改,这也从一方面体现了软件工程的意义,之前的代码只是为了完成要求而实现的,结构设计不好并且不规范导致其易用性、可移植性不强,这次又花了很多功夫大量修改之前的代码来满足这次的题目。

下面是我分数类的代码

1 class num {
2 public:
3  int numerator;    //分子
4  int denominator;   //分母
5 };

下面是我对分数运算的实现

 1 void compute(char op, num a, num b) {
 2   switch (op) {
 3    num result;
 4   case'+':result.denominator = a.denominator*b.denominator;
 5    result.numerator = b.denominator*a.numerator + b.numerator*a.denominator;
 6    s.push(result);
 7    break;
 8   case'-':result.denominator = a.denominator*b.denominator;
 9    result.numerator = b.numerator*a.denominator - a.numerator*b.denominator;
10    s.push(result);
11    break;
12   case'*':result.denominator = a.denominator*b.denominator;
13    result.numerator = a.numerator*b.numerator;
14    s.push(result);
15    break;
16   case'/':if (a.numerator == 0.0) {
17    cerr << "除数为0!" << endl;
18    clear();
19   }
20     else {
21      result.numerator = b.numerator*a.denominator;
22      result.denominator = b.denominator*a.numerator;
23      s.push(result);
24     }
25     break;
26   }
27  }

运行效果如图,左方为txt文档内容

小结:完成了分数运算的基本功能,不过还有很多功能不完善。比如结果只能全部输入为分数形式要不不识别,没有约分功能等。会在之后添加完善这些功能。

原文地址:https://www.cnblogs.com/bjut13070017/p/5243779.html