定制小学四则运算题目

一 题目

  1. 题目避免重复;
  2. 可定制(数量/打印方式)
  3. 可控制下列参数:

    是否有乘除法;

    是否有括号(最多可以支持十个数参与运算);

    数值范围;

    加减有无负数;

    除法有无余数;

二 设计思路

  分情况讨论编写代码;

  先按是否有括号分为两种情况;

    有括号时用二叉树随机生成四则运算题;

    没括号时按各种不同的题目要求限制生成的随机数和运算符号。

运行结果截屏:

程序源代码:

  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("\n请选择要求:"
 14                 +"\n  是否有乘除法;(True/False)"
 15                 +"\n  是否有括号(最多可以支持十个数参与运算)(True/False);"
 16                 +"\n  数值范围(True(1~10)/False(1~100));"
 17                 +"\n  加减乘除有无负数(True/False);"
 18                 +"\n  除法有无余数(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             //sc.close();
 26             System.out.println("请输入要出题的个数");
 27             Scanner N = new Scanner(System.in);
 28             int index=N.nextInt();
 29             //N.close();
 30
 31             for(int ii=0;ii<index;ii++)
 32             {
 33                 if(a[1]==false)
 34                 {
 35                     int a1=RandomNum(100),a2=RandomNum(100);
 36                     int sign=RandomNum(4);
 37                     if(sign==3&&a[4]==false)
 38                     {
 39                         a1=(a1%15)*(a2%10);
 40                         System.out.print("\n"+a1);
 41                         PrintSign(sign);
 42                         System.out.print(a2%10+"  =");
 43                         continue;
 44                     }
 45                     if(a[0]==false)
 46                     {
 47                         if(a[3]==false)
 48                         {
 49                             if(a[2]==false)
 50                             {
 51
 52                                 System.out.print("\n"+a1);
 53                                 PrintSign(sign%2);
 54                                 System.out.print(a2+"  =");
 55                             }
 56                             else if(a[2]==true)
 57                             {
 58                                 System.out.print("\n"+a1%10);
 59                                 PrintSign(sign%2);
 60                                 System.out.print(a2+"  =");
 61                             }
 62                         }
 63                         else if(a[3]==true)
 64                         {
 65                             int ssign=RandomNum(2);
 66                             if(ssign==0){
 67                                 a1=-a1;
 68                             }
 69                             if(a[2]==false)
 70                             {
 71                                 System.out.print("\n"+a1);
 72                                 PrintSign(sign%2);
 73                                 System.out.print(a2+"  =");
 74                             }
 75                             else if(a[2]==true)
 76                             {
 77                                 System.out.print("\n"+a1%10);
 78                                 PrintSign(sign%2);
 79                                 System.out.print(a2%10+"  =");
 80                             }
 81                         }
 82                     }
 83                     else if(a[0]==true)
 84                     {
 85                         if(a[3]==false)
 86                         {
 87                             if(a[2]==false)
 88                             {
 89                                 System.out.print("\n"+a1);
 90                                 PrintSign(sign);
 91                                 System.out.print(a2+"  =");
 92                             }
 93                             else if(a[2]==true)
 94                             {
 95                                 System.out.print("\n"+a1%10);
 96                                 PrintSign(sign);
 97                                 System.out.print(a2%10+"  =");
 98                             }
 99                         }
100                         else if(a[3]==true)
101                         {
102                             int ssign=RandomNum(2);
103                             if(ssign==0){
104                                 a1=-a1;
105                             }
106                             if(a[2]==false)
107                             {
108                                 System.out.print("\n"+a1);
109                                 PrintSign(sign);
110                                 System.out.print(a2+"  =");
111                             }
112                             else if(a[2]==true)
113                             {
114                                 System.out.print("\n"+a1%10);
115                                 PrintSign(sign);
116                                 System.out.print(a2%10+"  =");
117                             }
118                         }
119
120                     }
121                 }
122                 else if(a[1]==true)
123                 {
124                     int size=RandomNum(9);
125                     int[] array=new int[size*2+4];
126                     if(a[0]==false){
127                         for(int i=0;i<=size;i++){
128                             array[i]=RandomNum(2);
129                         }
130                     }
131                     else if(a[0]==true){
132                         for(int i=0;i<=size;i++){
133                             array[i]=RandomNum(4);
134                         }
135                     }
136                     if(a[2]==true){
137                         for(int i=size+1;i<=size*2+2;i++){
138                             array[i]=RandomNum(70)+4;
139                         }
140                     }
141                     else if(a[2]==false){
142                         for(int i=size+1;i<=size*2+2;i++){
143                             array[i]=RandomNum(96)+4;
144                         }
145                     }
146
147                     if(a[3]==true){
148                         for(int i=size+1;i<=size*2+2;i++){
149                             int ssign=RandomNum(2);
150                             if(ssign==0){
151                             array[i]=-array[i];
152                             }
153                         }
154                     }
155
156                     LinkedList<Node> nodeList = new LinkedList<Node>();
157                     for(int nodeIndex=0;nodeIndex<array.length;nodeIndex++){
158                          nodeList.add(new Node(array[nodeIndex]));
159
160                     }
161                     creatBinTree(array,nodeList);
162                     Node root = nodeList.get(0);
163                     inOrderTraverse(root);
164                     System.out.println("  =  ");
165                 }
166             }
167         }
168     }
169     public static int RandomNum(int i)
170     {
171         Random a=new Random();
172         int a1=a.nextInt (i);
173         return a1;
174     }
175     public static void PrintSign(int sign)
176     {
177         if(sign==0){
178             System.out.print("  +  ");
179         }
180         else if(sign==1){
181             System.out.print("  -  ");
182         }
183         else if(sign==2){
184             System.out.print("  *  ");
185         }
186         else if(sign==3){
187             System.out.print("  /  ");
188         }
189         else
190             System.out.print(sign);
191     }
192
193     public static class Node
194     {
195         Node leftchild;
196         Node rightchild;
197         int data;
198
199         Node(int newData){
200             leftchild=null;
201             rightchild=null;
202             data=newData;
203         }
204     }
205
206     public static void creatBinTree(int array[],LinkedList<Node> nodeList){
207
208
209         for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){
210             nodeList.get(parentIndex).leftchild = nodeList
211                     .get(parentIndex * 2 + 1);
212             nodeList.get(parentIndex).rightchild = nodeList
213                     .get(parentIndex * 2 + 2);
214         }
215     }
216     public static void inOrderTraverse(Node node) {
217         if (node == null)
218             return;
219         if (node.leftchild != null) {
220         System.out.print("(");
221         }
222         inOrderTraverse(node.leftchild);
223         PrintSign(node.data );
224         inOrderTraverse(node.rightchild);
225         if (node.rightchild != null) {
226             System.out.print(")");
227         }
228     }
229
230 }
时间: 2024-08-26 15:37:57

定制小学四则运算题目的相关文章

自动生成小学四则运算题目并进行效能分析-改进版

github地址:https://github.com/lzhida/First-assignment/tree/newbranch 改进: 可以删除一些无意义的括号 题目要求: 1.能自动生成小学四则运算题目,并且不能出现负数: 2.支持真分数四则运算 PSP表格     预计耗时(分钟) 是实际耗时(分钟) Planning 计划 30 30 ·Estimate 估计这个任务需要多少时间 180 240 Development 开发 150 180 ·Analysis 需求分析 5 10 ·

能自动生成小学四则运算题目的程序

题目要求 能自动生成小学四则运算题目 除了整数外,还要支持真分数的四则运算 支持多个运算符,也就是混合运算 程序支持判断对错,累计分数并倒计时 分析 分为几个函数功能模块:int getChoice() :    功能:用户选择功能 void showMenu():  功能:显示功能的菜单 void doExercise(int n):  功能:计分器 int test(int n);    功能:进行一道题的测试过程 int main();  主函数 源代码转载于李思雨,博客链接:http:/

自动生成小学四则运算题目

目前这个小学四则运算题目的生成器还不完善,仅支持整数的四则运算,在接下来的时间里会利用空余时间继续修改程序. import randomdef Subject_Creater(n): # n 为题目个数 x = 0 y = 0 z = "" i = 0 sum = 0.0 while True: x = random.randint(0,10) # 为变量 x 随机赋值 y = random.randint(1,10) # 为变量 y 随机赋值 z = random.choice(&q

超级无敌小学四则运算题目程序

尝试自己写一个能自动生成小学四则运算题目的命令行“软件”,分别满足下面的各种需求: a)自动生成小学四则运算题目,除整数以外,还要支持真分数的四则运算:运用计算机C语言中的rand函数,rand是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子. b)能接受用户输入答案,运用if语句来判断对错.最后给出总共对错的数量: c)运用for循环来实现一次批量给出100道的题目,并且运用计算机C语言中的rand函数,rand是真正的随机数生成器,而srand()会设置供rand(

Individual Project &quot;写一个能自动生成小学四则运算题目的程序&quot;

一.题目简介 写一个能自动生成小学四则运算题目的程序. 初步拟定要实现的功能后,估计一下自己需要花多长时间.编程过程中记录自己实际用了多长时间. 然后和同学们比较一下各自程序的功能.实现方法的异同等等. 二.源码的github链接 https://github.com/gaino1/IndividualProject 三.所设计的模块测试用例.测试结果截图 四.问题及解决方案.心得体会 要想学好C语言,要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自

实现一个自动生成小学四则运算题目的命令行程序

Github项目地址:https://github.com/sumilekaedei/Myapp.git 题目:实现一个自动生成小学四则运算题目的命令行程序. 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1

简单小程序——产生三十道小学四则运算题目

题目要求程序可以生成三十道小学四则运算题目. 因为要随机生成题目,则需要产生随机数,因此我上网搜索了生成随机数的方法,选择了使用Random类得到规定范围内的随机数.因为一个运算需要三个元素,两个参与运算的数字,一个运算符(加减乘除),因此需要获得三个随机数,其中一个随机数的范围为1~4,对应加减乘除四个运算符.在程序中需要特别注意的是除法的运算题目生成,由于是小学题目,因此要生成可以整除的运算式.因此在除法的运算阶段,我进行了判断,若当前产生的两个随机数不能实现整除或者除数为零,便重新获得两个

结对项目----实现一个自动生成小学四则运算题目的命令行程序

一.Github项目地址:https://github.com/lyh27/exercise 团队成员:卢耀恒3118005065    莫政3118005067 二.需求 自然数:0, 1, 2, …. 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …. 运算符:+, −, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),

自动生成小学四则运算题目(Python实现)

Github项目地址: https://github.com/pirigg/- 题目描述: 通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算. Psp表格: PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min) Planning 计划 50 60 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 20 30 Analysis 需求分析 (包