2016012079+小学四则运算练习报告

https://coding.net/u/Aojim_Lee/p/lianxi/git/tree/master/?public=true

一.需求分析:

可控制题目数量的四则运算出题软件,

要求单个题目中至少出现两种运算符,

运算符个数控制在3~5个之间,

要求运算数值大小在0~100之间

运算过程中不得出现小数、负数

二.功能设计

满足题设基本功能,实现100以内自然数的四则运算

三.设计实现

Main:主类,负责控制题目个数,调用Build类创建文件,输出算式

Generate:函数构造类,负责出题,并测试运算过程是否符合需求,调用运算类将生成的式子完整化

Calculator:运算类,负责运算出函数构造类生成的式子

Build:文件创建类,负责创建文件,调用Generate类,将产生的式子以循环的方式打印到创建的文件当中

四.算法详解

鉴于在中序表达式中,计算机无法处理运算符的先后顺序问题,故将生成的运算式子利用栈分别存放数字和运算符,再转换成为计算机可处理的后序表达式

五.测试运行

六.代码

class Generate{
    public static String generateQ(){        
        String[] operator = {"+","-","*","÷"};
        Random random = new Random();
        int qLen = random.nextInt(3) + 3;
        int[] num = new int[qLen + 1];         //运算数个数
        for(int n=0;n<qLen+1;n++){       
            num[n] = random.nextInt(101);
        }
        int[] op = new int[qLen];
        for(int i=0;i<qLen;i++){
            op[i] =random.nextInt(4);
            int judge=0;
            while(i>0){
                if(op[i]==op[i-1]){
                    judge++;
                }            
            }
            while(i==qLen-1){
                if(judge==i){
                    i--;
                }
            }
        }        
        for(int j=0;j<qLen;j++){
            if(op[j]==1){             //算式中出现减号时对于数据的控制
                if(op[j+1]==2){       //对于减号后紧跟乘号所产生的减数放大问题的处理
                    while(num[j]-(num[j+1]*num[j+2])<0){
                        num[j+1]=random.nextInt(101);
                        num[j+2]=random.nextInt(101);
                    }
                }
                else{
                    while(num[j]<num[j+1]){
                        num[j+1] = random.nextInt(101);
                    }
                }
            }
            if(op[j]==3){            //对于算式中除号的处理
                num[j+1]=random.nextInt(10)+1;
                num[j]=(random.nextInt(9)+2)*num[j+1];
            }
            while(j>0){              //当减号前出现除号导致被减数便小问题的处理
                if(op[j]==1 && op[j-1]==3){
                    while(num[j-1]/num[j]-num[j+1]<0){
                        num[j+1]=random.nextInt(101);
                    }
                }
            }
        }
        String text = new String();//生成算式
        if(qLen == 3){
            text = num[0]+operator[op[0]]+num[1]+operator[op[1]]+num[2]+operator[op[2]]+num[3]+"=";
        }
        if(qLen == 4){
            text = num[0]+operator[op[0]]+num[1]+operator[op[1]]+num[2]+operator[op[2]]+num[3]+operator[op[3]]+num[4]+"=";
        }
        if(qLen == 5){
            text = num[0]+operator[op[0]]+num[1]+operator[op[1]]+num[2]+operator[op[2]]+num[3]+operator[op[3]]+num[4]+operator[op[4]]+num[5]+"=";
        }
        int answer = Calculator.calQ(text);
        if(answer>=0){
            text = text + answer;
        }else{
            return generateQ();
        }
        return text;
    }
}

static private int getw(char c){
        if(c==‘*‘ || c==‘÷‘) return 2;
        else if(c==‘+‘ || c==‘-‘) return 1;
        else return -1;
    }
    
    static private int calc(int a, int b, char c) {
        if(c == ‘+‘) return a + b;
        else if(c == ‘-‘) return a - b;
        else if(c == ‘*‘) return a * b;
        else if(c == ‘÷‘) return a / b;
        else return -1;
    }
    
    static public int calQ(String text){
        char[] te = new char[100];
        te = text.toCharArray();
        int[] numList = new int[20];//数组存放数字
        char[] opList = new char[20];//数组存放操作符
        int temp = 0, pn = -1, pc = -1;//中间变量与栈顶元素
        for(int i=0;i<te.length;i++){
            if(Character.isDigit(te[i])){
                temp = temp*10 + te[i]-‘0‘;//字符转换
                if(i == te.length-1){
                    numList[++pn] = temp;
                }else{
                    numList[++pn] = temp;
                    temp = 0;
                    while(pc!=-1 && getw(opList[pc])>=getw(te[i])){
                        int num1 = numList[pn--];
                        int num2 = numList[pn--];
                        char te1 = opList[pc--];
                        numList[++pn] = calc(num2,num1,te1);
                    }
                    opList[++pc] = te[i];
                }
            }
        }
        return numList[0];
    }

七.总结

一开始在看到这个题目的时候,内心是真的在颤抖,因为的确是知道自己有几斤几两,也开始尝试着再去把原本没有学好的,忘得差不多的java从头捡起来,每天也都是花了不少的时间去刷慕课,到了周四才发现,这种学习方法实在是一种错误,因为短时间内根本无法从头再来,于是自己也开始静下心来,在网上搜索相关的博客,找到对应的知识点进行攻克,其中也看了不少积极的同学的代码,也询问了相关同学在算法上面的一些理解,然后才发现有针对性的去学习的时候效率才是最高的,虽然时间还是不够,但是越到快接近期限时间的时候,就逼自己逼迫的越紧凑,等到真正敲完,才发现,真心是学到了不少的东西

原文地址:https://www.cnblogs.com/AJLee/p/8647422.html

时间: 2024-10-12 14:00:05

2016012079+小学四则运算练习报告的相关文章

2016011990小学四则运算练习软件项目报告

 小学四则运算练习软件项目报告 项目克隆地址:https://git.coding.net/chenf640/workhome2_2.git 目录: 一.需求分析 二.功能设计 三.设计实现 四.算法详解 五.测试运行 六.代码展示 七.psp 八.总结 -------------------------------------------------- 一.需求分析 (一)功能需求  基本功能: 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题. 每个数字

2016012075+小学四则运算练习软件项目报告

2016012075+小学四则运算练习软件项目报告 一.需求分析 二.功能设计 三.设计实现 四.算法详解 五.测试详解 六.代码展示 七.总结 八.PSP展示 coding.net地址:https://git.coding.net/sparkleStar/arithmetic.git,代码在Main.java中 一.需求分析 1.编写目标 使用Java编程语言,独立完成一个3到5个运算符的四则运算练习的命令行软件开发. 2.基本功能需求 (1)程序可接收一个输入参数n,然后随机产生加减乘除(分

2016012045 +小学四则运算联系项目报告

  2016012045 +x小学四则运算联系项目报告 代码仓库地址:https://git.coding.net/Enther/operation.git 一.需求分析. 此项目主要是为面向小学生的小学数学四则运算练习所用,所以归纳出以下几点要求: (1)     对于每个数而言不能过大,且其中不涉及小数与负数,即仅考虑100内整数形式的运算. (2)     题目中最少包含两个运算符且保证不一样,且涉及加减乘除. (3)     程序中需要输入参数n作为随机产生题目数量. 二.功能设计. 此

201571030335/201571030320《小学四则运算练习软件》结对项目报告

源码链接地址:  https://github.com/woaichimangguo(我的201571030335) https://github.com/mashifang(小伙伴的201571030320) 一. 需求分析: (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分. (2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下: (3)程序为用户提供三种进阶四

201571030121《小学四则运算练习软件软件需求说明》结对项目报告

201571030107/201571030121<小学四则运算练习软件软件需求说明>结对项目报告 结对小伙伴:冯晓(201571030107) 任务一 首先,我们进行了实例体验,把我们已经上线的<小学生四则运算网站>链接发给我们调研的人,在他们体验过我们的程序后在填写需求分析调查问卷,这样可以更好的得到一个反馈,让我们的需求分析更加清楚. 网站链接:http://123.56.24.117:8080/ 其次,我们主要采取了精准的问卷调查方式来进行需求分析,调查的主要对象为老师和有

2016012036+小学四则运算练习软件项目报告

需求分析 首先明确项目需要,一个可以定做小学四则运算的程序.所以需要我们能够随机生成不同的四则运算,范围应在100以内,包含"+,-,*,÷"四种操作.要求:不存在小数,题目尽量不重复. 功能设计 基本功能应当包括,读入用户想要定制的算式数,以及对应的运算符数量,然后生成对应数目和难度的四则运算式子.并由程序自己计算,给出相应的答案. 扩展功能可以用:在算式中包含括号,计算存在真分数的式子. 设计实现 由计算机生成随机的第一个数字.运算符.后续数字.完成计算.显示结果等等. 在生成后续

2015710301020/201571030119《小学四则运算练习软件软件需求说明》结对项目报告

任务一:以小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动 1.实践软件需求获取方式 调查问卷: 利用问卷星平台,列出来28道题分别对老师.家长以及小学生进行了问卷调查. 问卷样本链接:https://www.wjx.cn/jq/22531831.aspx 2.调查问卷分析 任务二:采用适当的建模方法描述任务1所获取的需求,请调研用户复查. 任务三: 1.<小学四则运算练习软件软件需求说明>链接:https://shimo.im/docs/OtKU7suLE2QKTihS

201571030120/201571030119《小学四则运算练习软件软件需求说明》结对项目报告

任务一:以小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动 1.需求获取方式 (1)老师:搭档父亲是一名小学老师,由她提前和他通了电话,他答应帮她把电子版的调查问卷发放给他的同事.然后让他对我们的原型进行了分析. (2)家长和学生:亲戚中有小孩上小学,我们将包含我们软件原型和博客的调查问卷发给他们,同时获取了小学生和家长的意见,考虑小学生的理解能力有限,我们提前和家长进行了沟通,帮助孩子理解题目并作答. 2.调查问卷设计(https://www.wjx.cn/m/22531

201571030122/201571030129《小学四则运算练习软件软件需求说明》结对项目报告

<小学四则运算练习软件>博文链接:http://www.cnblogs.com/mzll/p/8709480.html GitHub的链接地址:https://github.com/13993013291/Shiyan3.git 任务一:        以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 1.调研对象:老师,学生以及家长: 2.调研方法:主要是问卷调查,其次通过即时通讯工具访谈了下当老师的同学: 3.问卷样本链接:h