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

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

四则运算生成程序


一、题目要求

我们选择了小学四则运算自动生成程序的作为此次结对编程的任务。如下题目要求:

  • 能够自动生成四则运算练习题
  • 可以定制题目数量;
  • 用户可以选择运算符
  • 用户设置最大数(如十以内、百以内等)
  • 用户选择是否有括号、是否有小数
  • 用户选择输出方式(如输出到文件、打印机等)
  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二、角色分配

本次结对编程的过程中和小伙伴的角色分配如下:

  • 驾驶员:李 鑫
  • 领航员:李宏达

驾驶员主要负责代码的编写,领航员引导驾驶员提供思路、修正驾驶员错误等以及对程序的测试工作。


三、程序编写

  • 代码链接
  • 代码内容

    • 头文件引入

      #ifndef PCH_H#define PCH_H#include 
      #include
      #include
      #include
      #include
      #include
      #include
      #include
      #endif //PCH_H
    • 类定义

      class  Calculation {public:    int quantity;  //题目数量    int maximum;   //最大数    int elem_len;  //每个式子参与运算的个数    bool brackets; //括号    bool decimal;  //小数    vector 
      opt{}; //计算符号 vector
      expression{}; //生成表达式 vector
      answer{}; //表达式答案public: void Create(); //生成表达式 void SetQuantity(int q); //设置题目数量 void SetMaximum(int m); //设置最大数值 void SetBrackets(bool b); //设置是否有括号 void SetDecimal(bool d); //设置是否有小数 void SetElem_len(int len); //设置每个式子中数值的个数 void AddOpt(string op) { //运算符号 this->opt.push_back(op); } void SaveFile(); //输出文件 Calculation(int q, int m, bool b, bool d);};
    • 类实现

      Set前缀方法均为对参数的设置;string类型vector变量expression用于保存生成的表达式;Create() 方法用于生成表达式。

      void Calculation::Create() {    srand((unsigned int)(time(NULL)));    for (int x = 0; x < quantity; x++) {        string tmp;        int left = rand() % (elem_len - 1);   // 括号左位置        int right = rand() % (elem_len - left - 1) + left + 1; //括号右位置        while (left == 0 && right == elem_len - 1) {            left = rand() % (elem_len - 1);   // 括号左位置            right = rand() % (elem_len - left - 1) + left + 1; //括号右位置        }        for (int i = 0; i < elem_len; i++) {            string temp = "";            float number = rand() % maximum + 1 + (float)(rand() % maximum) / maximum;            if (this->decimal) { //小数                temp = roundAny(number, 2);            }            else {                temp = roundAny(number, 0);            }            if (brackets) { //括号                if (i == left) {                    temp = "(" + temp + " ";                }                else if (i == right) {                    temp = temp + ")";                }                else {                    temp = temp + " ";                }            }            else {                temp = temp + " ";            }            if (temp.size() == 2) {                temp = "  " + temp;            }            else if (temp.size() == 3) {                temp = " " + temp;            }            tmp += temp;            if (i < elem_len - 1)                tmp += opt[rand() % (opt.size())] + " ";            else                tmp += " = ";        }        expression.push_back(tmp);        //std::cout << expression[x] << endl;    }}

      剩余部分方法实现

      1645394-20190503125710555-530503798.jpg

      1645394-20190503125820950-7892613.jpg

  • 补充函数

    static std::string roundAny(float r, int precision) {  std::stringstream buffer;  buffer << std::fixed << std::setprecision(precision) << r;  return buffer.str();}

    此函数用于将浮点型数据转换成特定位小数的字符串。


四、结果

项目完成的结果:

  • 常规输入输出

    1645394-20190503125937105-965521447.jpg

  • 包含小数

    1645394-20190503130025736-849599758.jpg

  • 输出文件

    1645394-20190503130050734-603985040.jpg


五、总结

   在这次结对编程中,要十分感谢我的领航员李宏达同学。 在程序实现的过程中,他提出了许多真知灼见,让我少犯了许多的错误,这也是为什 么我能在较短的时间内就完成编码。我们两个人互相配合的不错,在完成C++编码的过 程中相处愉快。我们除了使用C++完成主体的编码,还探索了使用 C#扩展的图形界面。我们计划使用dll(动态链接库)C++的类进行封装,之后在C#中进行调用,但经过一番 尝试因自己本身的才学疏浅未能成功完成此计划。后计划使用C#重写 类,因时间关系而放弃。

  总的来说这次结对编程收获匪浅,让我对合作的有了一定的接触,也学 会了一些协调合作的方法。对任务的内容算得上大体上都完成了,但还不算太好,在 编码前期并没有对任务进行设计研究等。

转载于:https://www.cnblogs.com/leexin/p/10800890.html

你可能感兴趣的文章
Ubuntu 下安装Go语言
查看>>
Application对象
查看>>
命令查看当前电脑安装所有版本.NET Core SKD
查看>>
《Photoshop CS4手绘艺术技法》
查看>>
random
查看>>
使用CSP防止XSS攻击
查看>>
unity3d--NGUI制作中文字体
查看>>
Bean属性的常用配置
查看>>
Spring容器中Bean的生命周期
查看>>
Springboot使用步骤
查看>>
Spring其他注解
查看>>
Spring属性注入
查看>>
Springboot-配置文件
查看>>
Spring-自动配置
查看>>
Springboot-日志框架
查看>>
SpringBoot-静态资源映射
查看>>
SpringBoot-webjars
查看>>
SpringBoot-thymeleaf
查看>>
IDEA 调试 JAVA ConcurrentLinkedQueue
查看>>
P1908-逆序对
查看>>