软件工程概论作业03

 

设计思路:

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

结果截图:

 

 

合作照片:

 

转载于:https://www.cnblogs.com/my1204/p/5325840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件工程导论是考研电子信息专业的一门重要课程。根据引用和引用的内容,软件工程导论的学习可以通过以下步骤进行: 1. 下载和学习资料:可以下载引用中提到的xmind脑图和引用中提到的复试笔记。这些资料可以帮助你整理和理解软件工程导论的知识点。 2. 重点整理知识点:根据引用[1]中提到的xmind脑图,可以将软件工程导论的知识点进行整理和分类。可以根据复试笔记中的内容,将知识点分为不同的模块,如软件工程导论的基本概念、软件开发过程、软件项目管理等。 3. 学习管理信息系统和其他相关课程:引用中提到了管理信息系统和其他课程的知识点。这些课程与软件工程导论有一定的关联,学习这些课程可以帮助你更好地理解和应用软件工程导论的知识。 4. 复习编译原理、计算机网络和数据库:引用中提到了编译原理、计算机网络和数据库的知识点。这些知识点在软件工程导论中也是重要的内容,复习这些知识可以加深对软件工程导论的理解。 总之,软件工程导论的考研学习可以通过下载和学习相关资料,整理知识点,学习相关课程,并复习相关知识点来进行。这样可以帮助你更好地准备考研,掌握软件工程导论的重要知识。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [【考研整理】软件工程导论.zip](https://download.csdn.net/download/weixin_40908748/12424518)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [电子信息专业 - 考研复试笔记分享(软件工程导论-第六版 + 管理信息系统-马慧).rar](https://download.csdn.net/download/weixin_41731475/12454588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值