zoukankan      html  css  js  c++  java
  • 软件工程概论作业

    设计思路:

    1、定义类node,变量有node类型root leftright以及string类型weight

    2、初始化函数(以一个新节点为当前节点,根节点为null),设置一个计数器flag=0

       21初始化weight值,随机数字或符号(若i>=3则必为数将算式限定在10个数以内)

           211weight值为符号则i++且调用此初始化函数,(以left为当前节点,本函数中节       点为根节点。)

           212weight为符号则i++且调用此初始化函数,(以right为当前节点,本函数中节点为根节点。)

      

    3、遍历函数 void inOrderTraverse(Node node)

       31判断node函数是否为空,为空则return

       32输出左括号

       33 inOrderTraverse(node.left); 

       34输出本节点权值

       35 inOrderTraverse(node.right); 

       36输出右括号

    4、求值函数int evaluateExpTree(Node)

       41 lvaluervalue并初始化为0

       42 如果节点为操作数,返回该值

       43如果节点不是运算符

           431递归计算左子树值为lvalue

           432递归计算右子树值为rvalue

           433根据节点计算符计算

    5、判断答案是否正确

    实验代码:

    package demo;
    import java.util.Random;
    import java.util.Scanner;
    
    
    class Node
        {
            public Node root;
            public Node left;
            public Node right;
            public String weight;
            
            public void setroot(Node r) {root=r;}//根植
            
            public void setleft(Node l)    {left=l;}//左子树
            
            public void setright(Node r) {right=r;}//右子树
            
            public void setweight(String w) {weight=w;}//判断运算符号
            
            public String getweight() {return weight;}
        }
        
        
    public  class show{
         
        //控制式子长度
        static int flag=0;
        static    String length="";
        
        static void setTree(Node zz,Node root)//初始化树
        {
            
            zz.left=new Node();
            zz.right=new Node();
            zz.setroot(root);
            int panding=new Random().nextInt(2);
            
            if(panding==1)
            {
                //生成符号
            
                int fuhao=new Random().nextInt(4);
                if(fuhao==0) zz.setweight("+");
                if(fuhao==1) zz.setweight("-");
                if(fuhao==2) zz.setweight("*");
                if(fuhao==3) zz.setweight("*");
                setTree(zz.left,zz);
                setTree(zz.right,zz);
            }
            if(panding==0)
            {
                int num=new Random().nextInt(100);
                zz.setweight(""+num);
                flag++;
                
            }
            
        }
    
        static     void inOrderTraverse(Node zz)//遍历生成算式
        {
            
            if(zz.weight==null) return;
            else{
                length=length+"(";
                inOrderTraverse(zz.left);
                length=length+zz.getweight();
                inOrderTraverse(zz.right);
                length=length+")";
                
            }
            
        }
        static    int evaluateExpTree(Node zz)//求值
        {
            int lvalue=0,rvalue=0;
            int ans=0;
            if(zz.left.getweight()!=null){
                lvalue=evaluateExpTree(zz.left);
                rvalue=evaluateExpTree(zz.right);
            }
            else 
            {    
            
                ans=Integer.parseInt(zz.getweight());
            }
        
            if(zz.weight.charAt(0)=='+') ans=lvalue+rvalue;
            if(zz.weight.charAt(0)=='-') ans=lvalue-rvalue;
            if(zz.weight.charAt(0)=='*') ans=lvalue*rvalue;
            if(zz.weight.charAt(0)=='/') ans=lvalue/rvalue;
        
            return ans;
        }
        
        
        public static  void main(String args[])
        {
                int j=0;
                System.out.println("请在等号后输入结果:");
                Scanner zhi=new Scanner(System.in);
                int []b=new int[30];
                for(int i=0;i<30;i++)
                {
                    Node initial = new Node();
                    Node ltree=new Node();
                    Node rtree=new Node();
                    initial.setweight("+");
                    
                    initial.setleft(ltree);
                    initial.setright(rtree);
                    //判断数字位数,超过则重新出题
                    while(flag==0||flag>4)
                    {
                        flag=0;setTree(ltree,initial);
                    }
                    flag=0;
                    while(flag==0||flag>4)
                    {
                        flag=0;setTree(rtree,initial);
                    }
                    
                    inOrderTraverse(initial);
                    length=length+"=";
                    System.out.println(length);
                    b[i]=zhi.nextInt();
                    if(b[i]==evaluateExpTree(initial))
                    {
                    j++;
                    System.out.println("结果正确");
                    
                    }
                    else System.out.println("结果错误,正确结果为:"+evaluateExpTree(initial)); 
                    length="";
                    flag=0;
                    
                
                }
                
                    System.out.println("做对了"+j+"道题");
        }
    
    }
    View Code

    结果截图:

    结对照片

  • 相关阅读:
    Linux学习 -- Shell编程 -- 字符截取命令
    Linux学习 -- Shell编程 -- 正则表达式
    Linux学习 -- Shell基础 -- Bash变量
    Linux学习 -- Shell基础 -- Bash基本功能
    Linux学习 -- Shell基础 -- 概述
    Linux学习 -- 备份与恢复
    Linux学习 -- 启动管理
    Linux学习 -- 日志管理
    chapter9_3 协同程序实现迭代器
    chapter9_2 管道与过滤器
  • 原文地址:https://www.cnblogs.com/my1204/p/5612539.html
Copyright © 2011-2022 走看看