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


    程序发布至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;
    }
    

    软件测试

    PSP

    • 手动记录有错漏之处(我还是写个windows程序自动记录比较准确且轻松!)
    PSP2.1 PersonalSoftwareProcessStages Time(%)SeniorStudent Time(%)
    Planning 计划 8 0
    ·Estimate 估计这个任务需要多少时间 8 0
    Development 开发 82 92
    ·Analysis 需求分析(包括学习新技术) 6 4
    ·DesignSpec 生成设计文档 5 8
    ·DesignReview 设计复审 4 0
    ·CodingStandard 代码规范 3 2
    ·Design 具体设计 10 11
    ·Coding 具体编码 36 61
    ·CodeReview 代码复审 7 8
    ·Test 测试(自我测试,修改代码,提交修改) 13 8
    Reporting 报告 9 8
    · 测试报告 3 0
    · 计算工作量 2 0
    · 并提出过程改进计划 3 0

    总结

    • 前期需求分析及设计文档 做的越详细越正确后期写代码就会越轻松。因为程序架构与流程有了,写代码时只需特定的地方写详细就好。如果一开始就写代码,没有架构后期调试就会很麻烦且代码臃肿。当然写好架构的前提是先学好一门语言。
    • 学习看和查英文帮助文档。毕竟网上的大多个人博客写不是很详细(写这个小程序就有这种感觉了)。
    • 认真学习C++一门。在各门语言之间转来转去实在混乱,通晓一门足以知晓其他语言的大体情况了。
  • 相关阅读:
    C++下遍历文件夹
    pycharm入门的简易使用教程
    easyUI—— datagrid 日期比较天数,小时
    Js获取当前日期时间+日期印证+判断闰年+日期的天数差+日期格式化+JS判断某年某月有多少天
    js获取一个月份最大天数和获取月的最后一天
    根据样式往里添加动态数据
    在同一个数据库表中添加不同的数据(笛卡尔积)
    修改某个数据可属性值根据三层 BLL
    根据条件删除
    xmlHttp.status的值(HTTP状态表)
  • 原文地址:https://www.cnblogs.com/StayHereForever/p/6518023.html
Copyright © 2020-2023  润新知