从《构建之法》第一章的 “程序” 例子出发,完成一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
 
     1、参与运算的操作数(operands)除了100以内的整数以外,还要支持真分数的四则运算,例如:1/6 + 1/8
    =7/24。操作必须随机生成。
     2、运算符(operators)为 +, −, ×, ÷ (如运算符个数固定,则不得小于3)运算符的种类和顺序必须随机生成。
     3、要求能处理用户的输入,并判断对错,打分统计正确率。
     4、使用 -n 参数控制生成题目的个数,例如执行下面命令将生成5个题目
          (以C/C++/C#为例) calgen.exe -n 5
          (以python为例) python3 calgen.py -n 5
       附加功能(算附加分)
            1、支持带括号的多元复合运算
            2、运算符个数随机生成(考虑小学生运算复杂度,范围在1~10)
 

2、解题思路

 
  • 我的整体思路是将所有对象看做是一个有分子、分母和符号的结构体,分数表示成分子、分母和“|”符号,整数表示成分子为整数,分母为1和符号为“|”,加法表示成分子为0,分母为1和符号为“+”,减法表示成分子为0,分母为1和符号为“-”,......,都是以这种形式在栈和队列中表示。只有当要输出的时候才转换成原来的形式。
 
  • 对生成的运算式子进行控制。在生成整数时用rand()函数控制生成的数在100范围内,对分数,只有当分子和分母都在1~10范围内且分子小于分母才有效,否则重新生成分数。对于每次生成的式子都会用额外的队列存储,当运算的最后结果不为负数且分母和分子都不大于100时,这个式子才有效可以显示出来,否则丢掉重新生成。
    
  • 项目主要包含math.h和calgen.cpp两个文件。
 
  • math.h主要封装了结构体的定义和一系列对分数运算的函数。
 
  • calgen.cpp主要包含生成数字,生成分数,生成运算符,生成式子,将式子转换成后缀表达式,计算结果等函数。
 

3.代码说明

    1、Fraction结构体

1 struct Fraction {
2     int deno; //Denominator
3     int numer; //Numerator
4     char symbol;//Operator
5 };
View Code

相关文章:

猜你喜欢
  • 2022-01-22
  • 2022-01-05
  • 2021-12-31
相关资源
相似解决方案