欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

加减乘除四则运算

程序员文章站 2022-04-14 17:08:06
个人项目实战-四则混合运算 coding.net源码地址 :https://git.dev.tencent.com/qyj814/fours.git 一.实验要求 基本任务: 使用JAVA编程语言,独立完成一个3到5个运算符的四则运算练习的软件。 软件基本功能要求如下: 程序可接收一个输入参数n,然 ......

个人项目实战-四则混合运算

 

 

coding.net源码地址 :https://git.dev.tencent.com/qyj814/fours.git                                                                                                               

 

一.实验要求

基本任务

    使用java编程语言,独立完成一个3到5个运算符的四则运算练习的软件。

软件基本功能要求如下:

  • 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
  • 每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出      3÷5+2=2.6,2-5+10=7等算式。
  • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
  • 当程序接收的参数为4时,以下为一个输出文件示例。

2018010203

13+17-1=29

11*15-5=160

3+10+4-16=1

15÷5+3-2=4

软件附加功能要求如下:(请有余力的同学完成)

  • 支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号数必须大于2对,且不得超过运算符的个数。
  • 扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6      + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如      1/2+1/6=2/3,而非4/6,且计算过程中与结果都须为真分数

 

二.操作步骤

      首先,分析题意,做基本的需求分析,总体设计等;其次,根据详细设计编写代码并进行测试;最后,上传文件到coding.net上。

 

三.代码分析

      主要文件

加减乘除四则运算

1.创建整数核心代码

加减乘除四则运算
public string[] createproblem(){
        random random = new random();
        int operatorcount =3 + random.nextint(3); //随机操作符的个数(3-5个)
        int operand[] = new int[operatorcount + 1]; //操作数个数
        int[] operatorindex = index(operatorcount, 4, random);

        for(int i = 0; i < operatorcount + 1; i++){
            operand[i] = random.nextint(101);//随机生成(0-100)之间的数
        }

        string formula = stitchingformula(operatorcount, operand, operatorindex);

        //计算结果
        calculator calculator = new calculator();
        int res = calculator.algorithm(formula);
        string formulares[] = new string[2];

        if (res > 0){
            formulares[0] = formula;
            formulares[1] = string.valueof(res);
        }else {
            return createproblem();
        }
        return formulares;
    }
view code

2.创建分数核心代码

加减乘除四则运算
public string[] createproblem(){
        random random = new random();
        int operatorcount = 1 + random.nextint(3); //操作符的个数(1-3)个

        createinteger create = new createinteger();
        int[] operatorindex = create.index(operatorcount,2, random); //操作符的下标

        //生成第一个操作数
        int[] coprimenumber1 = createcoprimenumbers(random);
        int x = coprimenumber1[0];
        int y = coprimenumber1[1];

        string s = x + "/" + y;

        for(int i=0; i < operatorcount; i++){
            //生成剩下的操作数
            int[] coprimenumber = createcoprimenumbers(random);
            int numx = coprimenumber[0];
            int numy = coprimenumber[1];

            string currentopreator = operator[operatorindex[i]];
            if(currentopreator.equals("+")){  
                //加法
                   int count = 0;
                   if(x * numy + y * numx > y * numy) {
                          numx = y - x - 1;
                          numy = y;
                          if(numx <= 0)
                              numx = 1;
                              numy = 2 * y;
                       } 
                   
                   x = x * numy + y * numx;
                   y = y * numy;
                   
                   int greatfactor = greatfactor(numx,numy);
                   numx /= greatfactor; //最终结果化简
                   numy /= greatfactor;
             }
             else {   
                 //减法
                  if(x * numy - y * numx < 0){ 
                          numx = x -1;
                          numy = y;
                          if(numx <= 0)
                              numx = 1;
                              numy = 2*y;
                       } 
 
                   x = x * numy - y * numx;
                   y = y * numy;
                   
                   int greatfactor = greatfactor(numx,numy);
                   numx /= greatfactor; //最终结果化简
                   numy /= greatfactor;
              }
               string num = numx + "/" + numy;
               s += currentopreator + num;
         }
        
         int greatfactor = greatfactor(x,y);
         x /= greatfactor; //最终结果化简
         y /= greatfactor;

         string res = shamtoproperfraction(x, y);
         s += "=";

         string formulares[] = {s, res};
         return formulares;
     }
view code

3.计算核心代码

加减乘除四则运算
private int calculate(int a, int b, string stmp) { //计算a stmp b的值
        int res = 0; //存结果
        char s = stmp.charat(0);
        switch (s) {
            case '+': {
                res = a + b;
                break;
            }
            case '-': {
                res = a - b; //产生负数就不合格

                break;
            }
            case '*': {
                res = a * b;
                break;
            }
            case '÷': {
                if(b==0)
                    return -1;
                else if(a%b!=0) //产生小数就不合格
                    return -2;
                else
                    res = a / b;
                break;
            }
        }
        return res;
    }
view code

4.生成问题并输出到文件核心代码

加减乘除四则运算
public void generateproblem(int num) throws ioexception {
        //项目根目录生成文件
          file file = new file("./result.txt");
          
          if(file.exists()) {
              file.delete();
              file.createnewfile();
          }
            
          fileoutputstream fileoutput = new fileoutputstream(file);
          printstream fileprintstream = new printstream(fileoutput);
          
            random random = new random();
          
            createfraction createfraction = new createfraction();
            createinteger createinteger = new createinteger();

            string[] problem = new string[2];
            fileprintstream.println("2017012454");
            for(int i = 1; i <= num; i++){
                int choose = random.nextint(2);
                //选择生成分数还是整数
                if (choose == 0){
                    problem = createinteger.createproblem();
                }else {
                    problem = createfraction.createproblem();
//                      problem = createinteger.createproblem();
                } 
                outputfile(problem, fileprintstream);
//                system.out.println(i);
            }
           
            fileoutput.close();
            fileprintstream.close();
            system.out.println("文件创建成功 ");
        }
view code


四.psp分析

psp2.1 任务内容 计划共完成需要的时间(h) 实际完成需要的时间(h)
planning 计划 3 5
estimate  估计这个任务需要多少时间,并规划大致工作步骤    
development 开发 60 83
analysis 需求分析 (包括学习新技术)    
design spec 生成设计文档    
design review 设计复审 (和同事审核设计文档)    
coding standard 代码规范 (为目前的开发制定合适的规范)    
design 具体设计    
coding 具体编码    
code review 代码复审    
test 测试(自我测试,修改代码,提交修改)    
reporting 报告 5 7
test report 测试报告    
size measurement 计算工作量    
postmortem & process improvement plan 事后总结, 并提出过程改进计划    

 

 

五.心得体会

        这个项目我用了两个周末四天,外加两周内零零散散的时间,一共用了八十多个小时,即使这样,我的代码还是有很多不足,比如说:生成整数问题时例子太少(由于本人实在写不下去了,都快写吐了);生成分数问题时,一部分定义成了不太随机了,因为生成随机数的范围太小,所以生成问题时不满足条件的情况太多了,while循环一直卡着,所以我就索性定义成了不随机的。要说我这两周写代码以来最大的体会,就是自己知识还是不足,遇到不懂的问题就得上网去查,一查又浪费了很多时间;写出来的代码也不是准确的,debug又花好多时间;总而言之,做完项目让我觉得我要好好学习了。