软件工程概论作业

设计思路:

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

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

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

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

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

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

3、1判断node函数是否为空,为空则return

3、2输出左括号

3、3 inOrderTraverse(node.left);

3、4输出本节点权值

3、5 inOrderTraverse(node.right);

3、6输出右括号

4、求值函数int evaluateExpTree(Node)

4、1 设lvalue和rvalue并初始化为0

4、2 如果节点为操作数,返回该值

4、3如果节点不是运算符

4、31递归计算左子树值为lvalue

4、32递归计算右子树值为rvalue

4、33根据节点计算符计算

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+"道题");
    }

}

结果截图:

结对照片

时间: 2024-10-12 16:28:38

软件工程概论作业的相关文章

软件工程概论作业02

这周,我们上了软件工程概论第三节课,终于体会到的程序员的不易,作业一次比一次难,老师提出的要求越来越多,就像未来的客户一样,要求永远无止境. 这次还在上次的要求上提出了新的要求,要求可选择整数还是分数,可指定范围,不可重复. 可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数! 日期 开始时间 结束时间 中断时间 净时间 活动 备注 C U 3/10 14:00 16

软件工程概论作业03

这一周,老师有提出了新的要求. 1.生成随机数,整数的和分数的,分数的用字符串表示,单独写一个分数类,分子分母,写出分数加减乘除的方法. 2.生成随机运算符数组,每道题最多有10个运算数,所以最多有9个运算符. 3.生成表达式,用控制语句选择要生成的表达式. 3.结果的处理,是分数的要化简. package demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatem

软件工程概论作业(1)

1.网站系统开发需要掌握的技术 至少掌握asp.asp.net.php.Jsp一种编程语言和MSSQL或者MYSQL数据库 2.课堂测试的源程序代码 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="

软件工程概论作业03--将随机产生的表达式导入数据库

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Random; import java.util.Scanner; import java.util.Stack; public class Size { publ

软件工程概论作业三

设计思想:构造如下几个类:试题类(class ShiTi): 属性:运算式.运算式结果.运算式逻辑运算顺序和运算数个数 公共方法:各个属性的set/get方法, setTiMu方法中在设置了题目属性后立即设置运算数的个数并执行计算运算式结果的函数 在计算运算式结果的函数中,利用堆栈将运算式转换为后缀表达式进行计算, 每计算一个子表达式就将该表达式的运算数加上产生该运算数的子表达式的序号用's'分隔(例如运算式为1 + 2 + 4 则第一个子表达式的运算数为1s0,2s0,第二个子表达式为3s1,

软件工程概论作业01

软件工程作业01 写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 思路:随机生成两个数进行计算,设立一个随机的参量用来判断是生成整数还是分数:生成分数时先生成分母,然后将分子的上限设置为分母,这样就会生成真分数: package demo; import java.util.Random; import java.util.Scanner; public class work {

软件工程概论-作业02

1.要求:写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算.题目避免重复.可定制出题的数量. 2.思路: 1)产生随机数choose,1或2,1表示生成整数表达式,2表示生成分数表达式,并用一个字符串数组存储表达式便于打印输出(长度由用户输入): 2)用一个字符数组存储"+ - * ÷"等符号,取符号则生成随机数0-3: 3)若choose为1,random生成两个整数作为表达式的左操作数和右操作数,并随机产生操作符:

软件工程概论第五周进度条

所花时间:软件工程概论上课时间(1h5min),web应用技术开发课程(接近4h)课余时间练习(2h)       共计约8h 代码量:登录界面开发292行(web),四则运算代码160行. 博客量:软件工程概论作业01 学习到的知识点:通过Jdbc连接数据库.

软件工程概论第一节课作业

软件工程概论第一节作业 1.网站系统开发需要掌握的技术:       编程语言,编程环境,后期维护       2.本次课堂测试的源程序代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.