简单的四则运算题目生成及求值小程序

程序发布至github

题目要求

除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
运算符为 +, −, ×, ÷
并且要求能处理用户的输入,并判断对错,打分统计正确率。
要求能处理用户输入的真分数, 如 1/2, 5/12 等
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10

需求分析

  • 通过-n参数控制题目个数,通过-s参数执行对错检验输出正确率
  • 生成max=10以内的随机的整数或真分数(分母比分子大),随机的 +, −, ×, ÷符号,组合成四则运算运算题目,输出到文本文件
  • 读入文本文件,解析表达式求值,对比用户的答案,统计正确率
  • 学习新技术
    • 文件的读写
    • markdown
    • string流,string与int的相互转换

设计文档

用户输入命令行,程序根据命令行执行相应功能,Myapp.exe -n 10生成10道随机四则运算题目并输出到文本,Myapp.exe -s读入文本统计正确率并输出到控制台。

具体定义:

  • 运算符号只包含+, −, ×, ÷,=。没有括号。
  • 题目类型:[整数][符号][整数][符号][整数] 和 [真分数][符号][真分数][符号][真分数]
    操作数+运算符+操作数
  • 运算:n1/d1+ (-)n2/d2 通分
    n1/d1* (/)n2/d2 分子分母相乘
    所得结果r统一化简

程序架构:

  • 解析用户输入的命令行。Myapp.exe -n 10,Myapp.exe -s
  • Myapp.exe -n 10 ,返回题目个数
  • 循环生成题目直到满足题目数n
  • 随机生成整数或真分数,运算符,组成一道题目string
  • 一道题目加上 ’=’ 一行,输出到文本文件
  • Myapp.exe -s ,表达式求值并统计正确率
  • 从文本中逐行读入题目和答案string
  • bool result(string one) 将string中算术表达式部分压入optr和opnd栈中计算出结果res,最后从string中解析出答案ans,比对答案,正确返回true,错误返回false。
    -函数返回true则tc+1,false则fc+1。
  • 统计结果tc/(tc+fc)并输出到控制台

代码规范

-随机生成low到high之间的数字的函数int random(int low ,int high)
-随机生成整数,分数,运算符的函数int rNat(low ,high),string rFra(int x),string rOpe(void)
-表达式比对并进行答案比对bool result(string one)

代码说明

//表达式求值并返回正确与否
bool result(string one) {
    istringstream sin(one);
    string ch;
    string e1, e2, theta;
    stack<string> optr, opnd;
    optr.push("=");
    sin >> ch;
    while (ch!="=" || optr.top()!="=") {
        if (!in(ch)) {
            opnd.push(ch);
            sin >> ch;
        }
        else {
            switch (precede(optr.top(), ch)) {
            case '>':
                theta = optr.top(); optr.pop();
                e2 = opnd.top(); opnd.pop();
                e1 = opnd.top(); opnd.pop();
                opnd.push(operate(e1, theta, e2));
                break;
            case '<':
                optr.push(ch);
                sin >> ch;
                break;
            case '=':
                optr.pop();
                sin >> ch;
                break;
            }
        }
    }
    e1=opnd.top();
    if (sin >> e2) {
        if (e1 == e2)return true;
    }
    else return false;
}

软件测试

1110639-20170308095958281-1656876987.png

PSP

  • 手动记录有错漏之处(我还是写个windows程序自动记录比较准确且轻松!)
PSP2.1PersonalSoftwareProcessStagesTime(%)SeniorStudentTime(%)
Planning计划80
·Estimate估计这个任务需要多少时间80
Development开发8292
·Analysis需求分析(包括学习新技术)64
·DesignSpec生成设计文档58
·DesignReview设计复审40
·CodingStandard代码规范32
·Design具体设计1011
·Coding具体编码3661
·CodeReview代码复审78
·Test测试(自我测试,修改代码,提交修改)138
Reporting报告98
·测试报告30
·计算工作量20
·并提出过程改进计划30

总结

  • 前期需求分析及设计文档 做的越详细越正确后期写代码就会越轻松。因为程序架构与流程有了,写代码时只需特定的地方写详细就好。如果一开始就写代码,没有架构后期调试就会很麻烦且代码臃肿。当然写好架构的前提是先学好一门语言。
  • 学习看和查英文帮助文档。毕竟网上的大多个人博客写不是很详细(写这个小程序就有这种感觉了)。
  • 认真学习C++一门。在各门语言之间转来转去实在混乱,通晓一门足以知晓其他语言的大体情况了。

转载于:https://www.cnblogs.com/StayHereForever/p/6518023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值