zoukankan      html  css  js  c++  java
  • 软件工程作业 四则运算(一)

    软件工程的课上老师布置了一个题目,要求实现一个四则运算程序,可以从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文档内容

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

  • 相关阅读:
    第五周
    第三章 程序的机器级表示
    第二章 信息的表示和处理
    嵌入式Linux应用开发——Linux下的C编程基础
    Linux基础入门(20135207 王国伊)
    Java实验报告(实验四)
    linux系统之pam模块
    linux 从入门到跑路-时间,日期问题
    linux 从入门到跑路-Shell和部分命令
    linux 从入门到跑路-挂载,命令的执行顺序
  • 原文地址:https://www.cnblogs.com/bjut13070017/p/5243779.html
Copyright © 2011-2022 走看看