小学生恐怖计算题

2023-10-08 02:50
文章标签 小学生 计算题 恐怖

本文主要是介绍小学生恐怖计算题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MathExam—— 在原有的V2.0.0版本上加入三年级四则混合运算题

  • 211606335 吴沂章
  • 211606318 林锃寒

一、预估与实际

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划
• Estimate• 估计这个任务需要多少时间53
Development开发
• Analysis• 需求分析 (包括学习新技术)90720
• Design Spec• 生成设计文档2020
• Design Review• 设计复审1030
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)3010
• Design• 具体设计3020
• Coding• 具体编码360600
• Code Review• 代码复审20300
• Test• 测试(自我测试,修改代码,提交修改)5020
Reporting报告
• Test Repor• 测试报告3020
• Size Measurement• 计算工作量3020
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划3030
合计1793

二、需求分析

  • 特点1

    • 运算符在2~4个
  • 特点2

    • 减法运算的结果不能有负数
  • 特点3

    • 除法运算除数不能为0,不能有余数
  • 特点4

    • 可以加括号

经过分析,我认为,这个程序应当:

  • 一个式子中应要添加多个运算符

  • 计算符号判断,生成随机数

  • 通过调度场和逆波澜算法来实现运算


三、设计

1. 设计思路

  • 第一步实现四则运算题目的生成

  • 第二步实现字符串写入文本

  • 第三步实现从命令行接受参数并传入程序运行

  • 第四步实现 中缀表达式 ------转换------> 后缀表达式

  • 第五步实现对后缀表达式的计算方法

  • 最后修改若干Bug,规范代码名,完善代码,提升质量

  • ...

  • 代码类图
    o_UML%e7%b1%bb%e5%9b%be.png
  • 逆波兰函数流程图:
    timg?image&quality=80&size=b9999_10000&sec=1537306590142&di=ee3d388fe13b37e09fb740e7fb74c5d8&imgtype=0&src=http%3A%2F%2Fpic.chinawenben.com%2Fupload%2F2_dq71qdbkxbaj1d1a3vxj5dv3.jpg

2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地,创建一个Pair文件夹

  • MyEclipse中创建一个类,包含主方法和各函数

  • 准备工作:先在Github上创建仓库,克隆到本地。

  • 技术关键点:

    • 如何令用户在输入 -n n -grade grade 和 -grade grade -n n 的时候都可以成功运行。

    • 如何在运算方法中实现"()"的优先运算

    • 如何在四则运算中添加括号。

    • 如何实现逆波澜算法

    • 如何记录错题。

    • ...

四、编码

  • 本次代码未实现以下功能:
    • 除数为0的错误
    • 差值为负值的错误
    • 四则运算题目的数值的范围为[0,10),不能是2位数

1. 调试日志

  • 日志一:
  • 没有考虑定义的运算符乘号小写字母"x"在入栈时被判定为符合要求的字符,导致判定出错
 private static boolean isOperator(String operator){if (operator.equals("+")||operator.equals("-")||operator.equals("×")||operator.equals("÷")||operator.equals("(")||operator.equals(")")) {return true;}return false;
}
  • 解决方案:将所有乘法中的符号统一定义为输入法中的“×”
    无对应的解决方案代码
  • 日志二:
  • 生成三年级题目时调用i值导致抛异常为空值
for (int j = 0; j < count; j++) {....省略部分代码str_ArithmeticProblem[i] = "( " +n1 + " " + cs[c1] + " " + n2 +" ) " + " " + cs[c2] + " " + n3;....省略部分代码
}
  • 解决方案:将对应的循环值j放入str_ArithmeticProblem[j]中
for (int j = 0; j < count; j++) {....省略部分代码str_ArithmeticProblem[j] = "( " +n1 + " " + cs[c1] + " " + n2 +" ) " + " " + cs[c2] + " " + n3;....省略部分代码
}

2. 关键代码

  • 调度场算法

  • 逆波兰函数
//调度场算法——[中缀表达式转后缀表达式]private void toPostfixExpression(String str_mix){int len = str_mix.length();char c,nextChar;String sc;for (int i = 0 ; i <= len-1 ; i++) {c = str_mix.charAt(i); sc = String.valueOf(c);if(isOperator(sc))  //判断是否是操作符{if(operators.isEmpty()){    //判断为空栈,入栈operators.push(sc);} else {if(priority(operators.peek()) < priority(sc) && !sc.equals(")")){   //栈顶操作符优先级小于当前操作符优先级且操作符不为右括号,入栈operators.push(sc);} else if(priority(operators.peek()) >= priority(sc) && !sc.equals(")")){while(!operators.empty() && !operators.peek().equals("(")   //栈不为空,当前栈顶操作符不为左括号&& priority(operators.peek()) >= priority(sc)){     //操作符优先级小于等于当前栈顶操作符优先级do {operator_Add = operators.pop();postfixExpression.append(operator_Add);operand.push(operator_Add);} while (false);    }   // 栈顶操作符是左括号时停止压栈operators.push(sc);     //否则直接入栈} else if(sc.equals(")")){  //当前扫描到的操作符为右括号(不做入栈操作),依次压栈相匹配的左括号内容do {operator_Add = operators.pop();postfixExpression.append(operator_Add);operand.push(operator_Add);} while (!operators.peek().equals("("));operators.pop();    //弹出栈顶无用操作符左括号}}}else { //非操作符if(!sc.equals(" ")){postfixExpression.append(sc);operand.push(sc);                   }}}while(!operators.empty()){  //结束字符串扫描后操作符的栈不为空则则压栈operator_Add = operators.pop();postfixExpression.append(operator_Add);operand.push(operator_Add);}}//逆波兰函数private int reversePolish() {// TODO Auto-generated method stubchar c;int len = postfixExpression.toString().length();for (int i = 0; i < len; i++) {c = postfixExpression.charAt(i);if(!isOperator(String.valueOf(c))){ //判断非操作符,入栈postfixNumber.push(Integer.parseInt(String.valueOf(c)));} else{int m = postfixNumber.pop();int n = postfixNumber.pop();String operator = String.valueOf(c);postfixNumber.push(Calculation(n, m, operator));    }}return postfixNumber.pop();}

3. 代码规范

本次实验使用的代码规范:

  • 类名使用 UpperCamelCase 风格

  • 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,遵循驼峰形式

  • 变量和常量的命名方式:

    • 非公有(private/protected/default)变量前面要加上小写m
    • 静态变量(static)前面加上小写s
    • 其它变量以小写字母开头
    • 静态常量(static final)全大写
  • 类型与中括号紧挨相连来定义数组

  • 大括号的使用约定。如大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则:

    • 左大括号前不换行
    • 左大括号后换行
    • 右大括号前换行
    • 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行
  • 左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格

4. 结对编程的过程

  • 我们采取的是Ping-Pong式的结对方式

  • 最初先是一起讨论这次项目的编码流程,研究用何种方式实现效果,并模拟程序运行得出这次的代码难点有哪些

  • 然后针对代码需要实现的功能进行分工,确立两个人的任务

  • 编程过程中互相交换意见,同步进程

  • 最后融合代码,并对代码进行复审

五、测试

序号测试代码预期输出结果实际输出结果
1java MathExam -n 10 -grade 1输出10道一年级算术题和预期结果相符
2java MathExam -n 10 -grade 2输出10道二年级算术题和预期结果相符
3java MathExam -n 10 -grade 3输出10道三年级算术题和预期结果相符
4java MathExam -grade 3 -n 10输出10道三年级算术题和预期结果相符
5java MathExam -grade 2 -n 10输出10道二年级算术题和预期结果相符
6java MathExam -grade 1 -n 10输出10道一年级算术题和预期结果相符
7java MathExam -g 3 -n 10不符合参数类型输入规范,结束程序和预期结果相符
8java MathExam -grade 3 -c 10不符合参数类型输入规范,结束程序和预期结果相符
9java MathExam 10 -grade 1不符合参数类型输入规范,结束程序和预期结果相符
10java MathExam -g 10 -c 1不符合参数类型输入规范,结束程序和预期结果相符

六、总结

  • 随着题目要求难度越来越高,所写的代码也越来越长,一定要多写注释提醒自己
  • 先对本次项目进行需求分析,避免重复修改代码时产生不必要的bug
  • 结对编程的过程中,跟自己的搭档要商量好各自的任务,若是各写各的,一人一个版本,会给后续的代码融合增加很大的难度
  • 结对编程中一个人写完了自己的任务,也不要自顾自的放松,这是两个人的项目,应该帮助自己的搭档
  • 结对编程中与队友一起探讨代码中无数bug也是很快乐的
  • 这次代码难度还是很高的,还好我们彼此之间相互鼓励,相互帮助,总算是能给客户看了

o_TIM%e5%9b%be%e7%89%8720180919020307.jpg

转载于:https://www.cnblogs.com/linzenghan/p/9672383.html

这篇关于小学生恐怖计算题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/162191

相关文章

打字侠又发布更新啦,新增小学生课文打字

历经一个月的时间,打字侠又发布了新的功能需求啦🎉🎉🎉 新功能1:提供面向小学生的课文打字练习 具体包括:从小学二年级到小学六年级的中文和英文词汇,总共约2000个中文词组和1600个英文单词。这样,孩子们就可以边打字巩固课堂知识啦。 新功能2:提供打字侠应用下载 很多用户对浏览器打开网站的使用方式觉得麻烦,希望提供打字侠下载的功能。因此,我们开发了打字侠桌面版,目前包括:

“无路之门”,一款VR恐怖冒险游戏

喜欢游戏和恐怖题材的盆友们有福啦,HTC Vive即将推出恐怖冒险游戏“无路之门”, 本游戏将在几周内 登陆Steam Early Access。 SYMMETRICAL是一家意大利独立开发商,它取笑其第一个虚拟现实(VR)游戏的细节,这是一个名为“无路之门”的地下城爬行D&D灵感冒险。 专门为VR设计的“无路之门”让人联想到像“天际”和“黑暗灵魂”这样的电子游戏,属于黑

2024年汉字小达人(上海小学生适用)备考:吃透18道真题,持续更新

2024年第11届汉字小达人比赛的区级自由活动开赛不到两个月了,孩子如何在2024年的汉字小达人活动中取得好成绩呢?根据过去获奖孩子的经验,有两个建议: ①把小学1-5年级的语文课本上的知识点熟悉,重点是字、词、成语、古诗。 ②把历年真题(和背后的知识点)刷熟,举一反三,这对了解汉字小达人比赛,以及巩固语文综合知识很有用。 一、汉字小达人历年真题6大题型18题精选(参考答案和解析见文

【深海王国】小学生都能玩的单片机!番外2:Arduino控制其他元器件

Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督为大家带来单片机的新番外系列——小学生都能玩的单片机!番外2:Arduino控制其他元器件,带你学习如何使用Arduino控制如继电器、舵机、传感器等简单电元件。 (1)Arduino控制继电器开关 之前在语音模块系列章节我们已经详细介绍了继电器,这里就不多说了

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)

Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (8)软串口与SoftwareSerial库使用 在第六节中我们提到了,如果我们Arduino开发板的0、1号引脚接线了,即硬件串口被占用了,想给Arduino下载程序,就需要先

2022年大作业参考报告-使用C++语言开发小学生成绩管理系统、中学生成绩管理系统、大学生成绩管理系统【240621更新】

背景: 目录 第一章 需求分析    2 1.1    问题描述    2 6.1    功能需求    2 6.2    开发环境    2 6.3    开发过程    2 第二章 概要设计    3 2.1    总体设计    3 2.2    类的定义    3 2.3    接口设计    5 2.4    运行界面设计    6 第三章 详细设计    7 3.1    输入模块

【深海王国】小学生都能做的APP?AppInventor、BLE蓝牙、Arduino联合开发你的第一个手机远程控制程序(7)

Hi~ (o^^o)♪, 各位深海王国的同志们,早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督依旧为大家带来小学生都能学会的APP制作教程,帮你一周内快速开发一款可以和单片机无线通讯的手机蓝牙APP,let’s go! (7)完结篇:APP最终美化、配色、logo一应俱全 不知不觉,本系列已经来到了最后一节,大都督看好你!继续加油!最后一节,我们将完成整个手机远程控制

HumbleBundle捆绑包6月18号推出38件Unity和Unreal的3D模型捆绑包美术工具道具环境模块化恐怖FPS和RPG赛博20240618

HumbleBundle今天更新了新的捆绑包,Unity和Unreal的无限创作主题, 主要是场景环境模型、工具、道具等合集,质量挺高。 非常适合FPS、模拟经营、RPG等类型游戏。 HumbleBundle捆绑包6月18号推出38件Unity和Unreal的3D模型捆绑包美术工具道具环境模块化恐怖FPS和RPG赛博202406181505 分三档: 第一档位只有1个场景模型

安卓开发GitHub的入门使用流程---》适合小学生

http://blog.csdn.net/u013278099/article/details/51207948  安卓开发GitHub的入门使用流程---》适合小学生 标签: github 2016-04-21 14:41  1174人阅读  评论(1)  收藏  举报   分类:   android(71)  版权声明:本文为博

小学生作文辅导杂志小学生作文辅导杂志社小学生作文辅导编辑部2024年第2期目录

写法导引     创意引航,笔墨生辉——小学语文习作教学中的创新思维训练     杜娟; 3-5     陶行知“小先生制”教育思想在小学作文练习中的应用探索     张淑勤; 6-8     新课程标准视域下小学语文习作教学策略探析     任真真; 9-11     即时作文:开辟小学习作教学的新路径     王雯雯; 12-14     指向语文核心素养的小学习作教学实践研究