zoukankan      html  css  js  c++  java
  • 定制小学四则运算

    工作照片:

    程序源代码:

      1 import java.util.Random ;
      2 import java.util.Scanner;
      3 import java.lang.reflect.Array;
      4 import java.util.LinkedList;
      5 import java.util.List;
      6 
      7 public class FourOperations1 
      8 {
      9     public static void main(String[] ages)
     10     {
     11         while(1>0)
     12         {
     13             System.out.print("
    请选择要求:"
     14                 +"
      是否有乘除法;(True/False)"
     15                 +"
      是否有括号(最多可以支持十个数参与运算)(True/False);"
     16                 +"
      数值范围(True(1~10)/False(1~100));"
     17                 +"
      加减乘除有无负数(True/False);"
     18                 +"
      除法有无余数(True/False);");
     19             Scanner sc = new Scanner(System.in);
     20             Boolean[] a=new Boolean[5];
     21             for(int i=0;i<5;i++)
     22             {
     23                  a[i]=sc.nextBoolean();
     24             }
     25             System.out.println("请输入要出题的个数");
     26             Scanner N = new Scanner(System.in);
     27             int index=N.nextInt();
     28             int right=0,wrong=0;
     29         
     30             for(int ii=0;ii<index;ii++)
     31             {    
     32                 if(a[1]==false)
     33                 {
     34                     
     35                     int a1,a2,sign;
     36                     a1=RandomNum(100);
     37                     a2=RandomNum(100);
     38                     sign=RandomNum(4);
     39                     
     40                     /**按照用户规定的各种要求对数据进行修改使数据合乎规范**/
     41                     if(a[0]==false){
     42                         sign=sign%2;
     43                     }
     44                     else{
     45                         if(sign==3&&a[4]==false){
     46                             a1=a1*a2;
     47                         }    
     48                     }
     49                     if(a[3]==true&&(sign==0||sign==1)){
     50                         int ssign=RandomNum(2);
     51                         if(ssign==0){
     52                             a1=-a1;
     53                         }
     54                         int ssign2=RandomNum(2);
     55                         if(sign==0){
     56                             a2=-a2;
     57                         }
     58                     }        
     59                     if(a[2]==true){
     60                         a1=a1%10;
     61                         a2=a2%10;
     62                     }
     63                     if(a[4]==false){
     64                         a1=a1*a2;
     65                     }
     66                     //无效算式被取消
     67                     if(sign==3&&a2==0){
     68                         ii--;
     69                     }
     70                     else{
     71                         System.out.print(a1);
     72                         PrintSign(sign);
     73                         System.out.print(a2+"  =  ");
     74                         int jjudge,result;
     75                         if(sign==0){
     76                             result=a1+a2;
     77                         }
     78                         else if(sign==1){
     79                             result=a1-a2;
     80                         }
     81                         else if(sign==2){
     82                             result=a1*a2;
     83                         }
     84                         else{
     85                             result=a1/a2;
     86                         }
     87                         jjudge=judge(result);
     88                         if(jjudge==0){
     89                             right++;
     90                         }
     91                         if(jjudge==1){
     92                             wrong++;
     93                         }
     94                     }
     95                 }
     96                 else if(a[1]==true)
     97                 {
     98                     int size=RandomNum(9);
     99                     int[] array=new int[size*2+4];
    100                     /**二叉树非叶子结点的取值,即四则运算运算符的随机选择**/
    101                     if(a[0]==false)//条件 没有乘除法
    102                     {
    103                         for(int i=0;i<=size;i++){
    104                             array[i]=RandomNum(2);
    105                         }
    106                     }
    107                     else {
    108                         for(int i=0;i<=size;i++){
    109                             array[i]=RandomNum(4);
    110                         }
    111                     }
    112                     /**二叉树叶子结点的取值,即四则运算运算数的随机取值**/
    113                     if(a[2]==true)//数的取值范围为0~10
    114                     {
    115                         for(int i=size+1;i<=size*2+2;i++)
    116                         {
    117                             array[i]=RandomNum(6)+4;//防止取值为0~3 打印时显示成运算符
    118                         } 
    119                     }
    120                     else{
    121                         for(int i=size+1;i<=size*2+2;i++){
    122                             
    123                             array[i]=RandomNum(96)+4;
    124                         } 
    125                     }
    126                     //限制条件:运算数随机选择是否为负数
    127                     if(a[3]==true){
    128                         for(int i=size+1;i<=size*2+2;i++){
    129                             int ssign=RandomNum(2);
    130                             if((array[i/2-1]==0||array[i/2-1]==1)&&ssign==0){
    131                             array[i]=-array[i];
    132                             }
    133                         } 
    134                     } 
    135                     /**将数组结点构建成二叉树**/
    136                     LinkedList<Node> nodeList = new LinkedList<Node>();
    137                     for(int nodeIndex=0;nodeIndex<array.length;nodeIndex++){
    138                          nodeList.add(new Node(array[nodeIndex]));       
    139                     }
    140                     creatBinTree(array,nodeList);
    141                     Node root = nodeList.get(0);
    142                     inOrderTraverse(root);
    143                     System.out.println("  =  "); 
    144                     values(root);   
    145                     int jjudge=judge(root.result);
    146              
    147                     if(jjudge==0){
    148                         right++;
    149                     }
    150                     if(jjudge==1){
    151                         wrong++;
    152                     }
    153                 }
    154             }
    155             System.out.println("正确题数:"+right+"错误题数:"+wrong);
    156         }
    157     }
    158     
    159     /**取要求范围内的随机数**/
    160     public static int RandomNum(int i)
    161     {
    162         Random a=new Random();
    163         int a1=a.nextInt (i);
    164         return a1;
    165     }
    166     
    167     /**打印运算符**/
    168     public static void PrintSign(int sign)
    169     {
    170         if(sign==0){
    171             System.out.print("  +  ");
    172         }
    173         else if(sign==1){
    174             System.out.print("  -  ");
    175         }
    176         else if(sign==2){
    177             System.out.print("  *  ");
    178         }
    179         else if(sign==3){
    180             System.out.print("  /  ");
    181         }
    182         else
    183             System.out.print(sign);
    184     }
    185     
    186     /**定义二叉树结构**/
    187     public static class Node
    188     {
    189         Node leftchild;
    190         Node rightchild;
    191         int data;
    192         int result;//各二叉树分支之下的四则运算结果
    193         
    194         Node(int newData){
    195             leftchild=null;
    196             rightchild=null;
    197             data=newData;
    198             result=data;
    199         }
    200     }
    201     /**构建二叉树**/
    202     public static void creatBinTree(int array[],LinkedList<Node> nodeList){
    203         
    204         for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){
    205             nodeList.get(parentIndex).leftchild = nodeList.get(parentIndex * 2 + 1);
    206             nodeList.get(parentIndex).rightchild = nodeList.get(parentIndex * 2 + 2);            
    207         }
    208     }
    209     /**中序遍历二叉树    即打印四则运算算式**/
    210     public static void inOrderTraverse(Node node) {  
    211         if (node == null)  
    212             return;  
    213         if (node.leftchild != null) {
    214         System.out.print("(");  
    215         }
    216         inOrderTraverse(node.leftchild);  
    217         PrintSign(node.data );  
    218         inOrderTraverse(node.rightchild); 
    219         if (node.rightchild != null) {
    220             System.out.print(")");  
    221         }
    222     } 
    223     /**计算四则运算的值,和括号内每一步运算的值 采用递归算法**/
    224     public static void values(Node node){
    225         if (node.leftchild== null) {
    226              return;
    227         }
    228         values(node.leftchild);
    229         values(node.rightchild);
    230         if(node.data==0){
    231             node.result=node.leftchild.result+node.rightchild.result;
    232             }
    233         else if(node.data==1){
    234             node.result=node.leftchild.result-node.rightchild.result;
    235         }
    236         else if(node.data==2){
    237             node.result=node.leftchild.result*node.rightchild.result;
    238         }
    239         else 
    240         {
    241             if(node.rightchild.result==0){
    242                 System.out.println("被除数为零,该算式无效!");
    243                 return;
    244             }
    245             node.result=node.leftchild.result/node.rightchild.result;
    246         }
    247     }
    248     /**判断用户输入答案是否正确**/
    249     public static int judge(int answer){
    250          System.out.println("  请输入您的答案:  "); 
    251             Scanner sc2 = new Scanner(System.in);
    252             int userResult=sc2.nextInt();
    253             System.out.println(" 正确答案是:"+answer  ); 
    254             if(userResult==answer){
    255                 return 0;
    256             }
    257             else {
    258                 return 1;
    259             }
    260     }
    261 }

    程序运行结果截屏

                                   周活动总结表

                                                                                                                           学生:李锦

                                                                                                                           日期:2016/3/26

     任务(min)

    日期      

    听课

    编写程序

    阅读课本

    准备考试

     思考(思路/问题)

    日总计(min)

    周日

    0

    周一

    100

     0

    0

     10

    110

    周二

     60

     30

    90

    周三

     0

    0

    周四

    90 

     30

    120

    周五

    0

    周六

    240

     30

     30

    300

    周总计

    100

    300

    60

     70

    600

                                                                                                  事件记录日志

                                                                                                                                           教师:王建民老师

                                                                                                                                           学生:李锦

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    3/21

    8:00

    9:50

     10

    100

    听课

    3/22

    13:00

    13:30

    30

    思考程序的框架

    3/22

    14:00

    15:00

     0

    60

    修改上次程序的框架,使其适应添加功能

     

     

    3/24

    15:00

    15:30

    0

    30

    阅读构建之法

    3/24

    16:00

    18:00

    30

    90

    加入判断结果和计数部分

    3/26

    11:00

    18:00

    120

    300

    加入带括号运算的计算机结果部分

     吃饭 休息

     

                                                                                         

                                                                                                        缺陷记录日志

                                                                                                                                    学生:李锦

                                                                                                                                    日期:2016/3/26

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    3/26

    1

    编码

    编译

    10min

    描述:运用递归算法求四组运算各分部的结果时,逻辑不清,代码有误。

     3/26

    2

    编码

    编译

    10min

    描述:在带括号的运算中,二叉树的一个子分支为除法且被除数为零,程序运行出错

     3/26

    3

    编码

    编译

    60min

    描述:将scanner对象提前关闭,使程序不能运行。

    感想心得:

    写程序就是在计算机沟通,你写不好就是你不会组织语言,或逻辑不清。

    在你说不清的时候你就会另找一种表达方式,或者把你的话改一种说法,在你讲得多的时候,你就会非常自然非常清楚得来描述问题了。

  • 相关阅读:
    tcp笔记
    sublime使用技巧
    mysql笔记
    ubuntu安装mysql
    正则表达式笔记
    网络编程笔记
    swoole安装异步reids
    mysql的时间存储格式
    nginx环境的搭建
    php的闭包函数use的使用
  • 原文地址:https://www.cnblogs.com/amiee/p/5323596.html
Copyright © 2011-2022 走看看