week_2 四则运算

coding地址: https://coding.net/u/lvgx/p/week_2/git?public=true

一. 需求分析

  1.接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题

  2.每个数字在 0 和 100 之间,运算符在3个到5个之间。

  3.每个练习题至少要包含2种运算符。

  4.所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。

  5.练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

附加需求(改进部分):

    1.支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。

    2.扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1      /6=2/3,而非4/6,且计算过程中与结果都须为真分数

二.功能设计

  实现点击可执行程序,出现提示词“请输入要生成的运算式”,运行结束,显示运算式,且运算式满足题目要求。最后计算结束,可以点击文件“result.txt”,对照答案。

三.设计实现

  设计了三个类

    main:主函数,实现输出运算式,运算的功能

    symbol:随机实现运算符

    randomnumber:随机生成随机数

四.算法详解

  1.生成随机数

    有Math类的random()方法以及Random类生成随机数两种方式,选择了第一种较为熟悉便捷的方法,并将生成随机数的方法装入一个类,便于调用,实现模块化

  2.生成随机符号

    将四种运算符装入一个数组中,通过生成随机数,对应到数组的检索值,并且个数满足设定范围,当几个随机符号一致时,将最后一个重新生成且不同于其他符号,并且覆盖掉最后一个字符,实现生成随机运算符的步骤

  3.生成运算式

    将生成的随机数放在一个数组里,将生成的运算符放在一个数组里,将二者合并,去除逗号括号,输出

  4.获取生成个数N

    通过函数获取输入数字,并判断其是否为正整数,且满足设定范围。

  5.运算式的计算

    通过迭代进行运算符优先级的判定,进行正常的运算

  6.txt文件的生成

五.测试运行

  

六.代码

  

int results;
        int n=numberTest();
        //生成问题----------------------------------------------------
        Result result = new Result();
        String[] boxs = new String[n];

        for(int j=0; j<n;) {
                //随机生成运算符的个数
                int Snum = (int) (Math.random() * 4 + 2);
                //随机生成的数字个数
                int Nnum = Snum + 1;

                //创建一个链表,并填入随机数
                int[] nums = new int[Nnum];
                for (int i = 0; i <= nums.length - 1; i++) {
                    nums[i] = (int) (Math.random()*101);
                }

                //创建一个字符链表,并填入随机运算符
                char[] sysmbols = new char[Snum];
                for (int i = 0; i <= sysmbols.length - 1; i++) {
                    sysmbols[i] = Symbol.symbol();
                }

                //连接两个链表,获得运算式
                Object[] temp = new Object[Snum + Nnum+3];
                for (int i = 0; i <Snum + Nnum; i += 2) {
                    temp[i] = nums[i / 2];
                }
                for (int i = 1; i <Snum + Nnum; i += 2) {
                    temp[i] = sysmbols[i / 2];
                }

                List<Integer>resultN = new ArrayList<>();
                for (int i = 0; i < nums.length; i++) {
                    resultN.add(nums[i]);
                }
                List <Character>resultS = new ArrayList<>();
                for (int i = 0; i < sysmbols.length; i++) {
                    resultS.add(sysmbols[i]);
                }

                Box box = new Box(resultN,resultS);
                results = result.getResult(box);
                if(results > 0 ) {
                    temp[Snum + Nnum] = ‘=‘;
                    temp[Snum + Nnum+1] = results;
                    temp[Snum + Nnum+2]= "\r\n";
                    boxs[j] = Arrays.toString(temp).replace(‘,‘, ‘ ‘).replace(‘[‘, ‘ ‘).replace(‘]‘, ‘ ‘) ;
                    j++;
                }
                else
                    continue;
            //生成完毕--------------------------------------------------------
            //输出
                result.outQuestion(boxs);
                System.out.println(Arrays.toString(temp).replace(‘,‘, ‘ ‘).replace(‘[‘, ‘ ‘).replace(‘]‘, ‘ ‘));

七.总结

  其实对于java我并不是非常熟悉,可以说非常薄弱了,对于一个程序,我可能有一定的思维,但是因为不熟悉这门语言而不能熟练的运用相关函数,所以觉得这次作业对我来讲比较困难。通过这次作业,我深深的明白自己的代码能力有多薄弱,别人很快能编辑好的函数方法,我却要查询尝试多次才能实现。这促使我对java学习,有了一个微小的提高,因为只有不断应用,才能更加深刻的了解他的含义。所以我个人觉得,通过项目可以较好的促进个人的学习。还有非常感谢课代表张航同学,是他的耐心和帮助,才能使我在规定时间完成作业。故而有些内容是借鉴张航同学的博客http://www.cnblogs.com/zanghh/

  还有我觉得讨论式学习有助于大家共同的提高,就比如说大家交流,互相学习发现还可以通过js成熟的eval函数可以简化运算过程等

八.PSP

  


SP2.1


任务内容


计划共完成需要的时间(h)


实际完成需要的时间(h)


Planning


计划


25


50


·        Estimate


·   估计这个任务需要多少时间,并规划大致工作步骤


25


50


Development


开发


20


45


·        Analysis


·         需求分析 (包括学习新技术)


3


5


·        Design Spec


·         生成设计文档


0


0


·        Design Review


·         设计复审 (和同事审核设计文档)


0


0


·        Coding Standard


·         代码规范 (为目前的开发制定合适的规范)


0


0


·        Design


·         具体设计


3


5


·        Coding


·         具体编码


10


25


·        Code Review


·         代码复审


2


4


·        Test


·         测试(自我测试,修改代码,提交修改)


2


6


Reporting


报告


5


5


·         Test Report


·         测试报告


4


4


·         Size Measurement


·         计算工作量


0.5


0.5


·         Postmortem & Process Improvement Plan


·         事后总结, 并提出过程改进计划


0.5


0.5

九.不足

  通过这次小小的项目,我认识到自己知识储备量的不足,也意识到不动手,只会一些理论的东西,并不能提高自己的能力。我会更加努力,做出更好的程序

原文地址:https://www.cnblogs.com/lvgx/p/8645762.html

时间: 2024-10-20 20:53:23

week_2 四则运算的相关文章

自动生成小学四则运算题目(C语言)

这个简易四则运算是我在百度上找的博主叫53余雅诗的一篇c语言代码,网址为http://www.cnblogs.com/ys1101/p/4368103.html,功能是可以选择加减乘除进行简易的四则运算,判断对错.我在VS2017上编译没有bug,因为功能只有整数运算,所以我在此基础上加了真分数的四则运算以及统计得分等,最后成功运行程序.我把我的源代码放在github上,地址为https://github.com/xiaofancheng/helloworld.

四则运算题目生成程序

a.需求分析 看了大家对于本课程的目标和规划,很多同学都希望能提高自己的实践能力,没有捷径可走,就是练习.练习再练习!那么就从第一个个人项目开始吧,用一周的时间完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 =

四则运算题目生成程序(基于控制台)

题目描述: 能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率 要求能处理用户输入的真分数, 如 1/2, 5/12 等 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目 功能设计: 1.  通过随机数的生成,实现+, ?, ×, ÷的确定 2.  +, ?, ×, ÷分别赋予整

第一周 结对编程四则运算

项目需求:程序随机生成四则运算计算题,并在用户填写答案后判断答案正误. 结对成员:李峤 任务分配:算法思想及采用的主要函数由李峤负责. 部分代码输入及结果测试由本人负责. 大体分成两个模块 :1.随机生成四则运算计算题 2.判断录入答案正误 主要代码如下: 1 #include<stdio.h> 2 #include<string.h> 3 #include<time.h> 4 #include<stdlib.h> 5 int main() 6 { 7 ch

判断随机生成的四则运算结果

功能:1.随机生成一个四则运算 2.用户输入式子结果后判断是否正确(结果取整) #include<stdio.h> #include<string.h> #include<stdlib.h> #include<stack> using namespace std; int n,t,n1; struct ZX { char a; bool b;//if b=0 括号 if b=1 数字 } ; stack<ZX>s1; void atersz(ZX

四则运算作业初步_064121陶源

这个四则运算的功能很有限,只能进行两个数的加减乘除四种运算,能显示最简分数结果,但没法将能化为整数的分数变成整数,比如6/3,最后会显示成2/1. 代码类型是C++,技巧上,参考了网上的operator重载操作符这个技巧,自己本不知道这个知识点. 分数化简的过程自己也是参考了其他资源,然后自己仔细阅读并理解,在旁边用例子注释. 编译平台是在Mac OS系统的Xcode上编译的,第一次在非vc++平台上编译. 代码:                                        

二柱子四则运算3

二柱子四则运算3 可怜的二柱子……又一次被坑了…… 老师又在上次的“二柱子四则运算2”的基础上增添了要求,如下: 1.学生写的程序必须能判定用户的输入答案是否正确.直到题目结束,告诉用户做对了几道题. 2.程序必须能处理四种运算的混合模式. 注意:连续的减法和除法,应该遵守左结合的规定. 连续除法要打括号,否则会引起歧义. 一.实验思路 二.实验源代码 三.实验总结和反思 最后,附上我和我的小伙伴的工作照……没有正脸.老师们不要介意啦啦啦~~~~ 小伙伴博客内容页:http://www.cnbl

软件工程第一次作业,小学生四则运算的出题程序

一.背景 阿超有个儿子上小学二年级,老师每天让家长给孩子出30道加减法题,虽然不多,但是每天都做也算是个负担,阿超作为一个老牌程序员当然想用计算机来解决这个小问题,目前对于这个问题对于任何语言都不是问题,比如: C/C++.C#.Java.Python.VB.JavaScript.Perl…… 具体要求如下: 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!) 除了整数外,还要支持真分数的四则运算 请大家用任何一种自己擅长的语言来编写这段程序,并把程序的介绍和自

软件工程之四则运算--Github

由于现在配置问题,然后借用同学电脑将代码上传至Github,网址为:https://github.com/be821/RealFour 参考相关Github文档: 1. http://my.oschina.net/u/1050949/blog/194536?fromerr=IBt08Hdf 2. http://www.linuxidc.com/Linux/2013-06/85372p3.htm 3. http://blog.csdn.net/yanzi1225627/article/detail