定制小学四则运算

工作照片:

程序源代码:

  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             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对象提前关闭,使程序不能运行。

感想心得:

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

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

时间: 2024-08-17 14:05:32

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

定制小学四则运算题目

一 题目 题目避免重复: 可定制(数量/打印方式) 可控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与运算): 数值范围: 加减有无负数: 除法有无余数: 二 设计思路 分情况讨论编写代码: 先按是否有括号分为两种情况: 有括号时用二叉树随机生成四则运算题: 没括号时按各种不同的题目要求限制生成的随机数和运算符号. 运行结果截屏: 程序源代码: 1 import java.util.Random ; 2 import java.util.Scanner; 3 import ja

2016012036+小学四则运算练习软件项目报告

需求分析 首先明确项目需要,一个可以定做小学四则运算的程序.所以需要我们能够随机生成不同的四则运算,范围应在100以内,包含"+,-,*,÷"四种操作.要求:不存在小数,题目尽量不重复. 功能设计 基本功能应当包括,读入用户想要定制的算式数,以及对应的运算符数量,然后生成对应数目和难度的四则运算式子.并由程序自己计算,给出相应的答案. 扩展功能可以用:在算式中包含括号,计算存在真分数的式子. 设计实现 由计算机生成随机的第一个数字.运算符.后续数字.完成计算.显示结果等等. 在生成后续

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

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

小学四则运算APP 第一个冲刺阶段 第六天

团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是重新排列整齐ResultActivity的布局代码activity_result.xml 代码如下: activity_result.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and

小学四则运算APP 第一个冲刺阶段 第五天

团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是实现练习功能的成功 代码: public class CalculatorActivity extends Activity { private final Random num1=new Random(); private final Random num2=new Random(); private final Random r = new Random(); private

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

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

生成300道小学四则运算题

通过Java编写一个能够自动生成三百道小学四则运算的小demo 通过Ramdom获取随机数 algorithm的值确定运算法则 parameter值确定循环次数 package D; import java.text.DecimalFormat; import java.util.Random; public class Demo { public static void main(String[] args) { operation(); } public static void operat

题目一小学四则运算

a.需求分析 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率. 要求能处理用户输入的真分数, 如 1/2, 5/12 等 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目M

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

目前这个小学四则运算题目的生成器还不完善,仅支持整数的四则运算,在接下来的时间里会利用空余时间继续修改程序. 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