小学四则运算3

Posted 卿语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小学四则运算3相关的知识,希望对你有一定的参考价值。

小组成员 :严羽卿、杨茵

工作照:技术分享技术分享

设计思路:涉及带括号的运算时,就把三个数作为一组,运算结果存入数组中,最后计算数组的和就可以。如果不带括号,则就是普通的两位数的加减乘除。最后将计算机计算的结果和输入的数进行比较,判断对错’

源代码:

  1 import java.util.Scanner;
  2 import java.util.ArrayList;
  3 public class Test {
  4     public static void main(String[] args){
  5         int N,i,N1,N2;
  6         int sum=0;
  7         String str;
  8         String hh;    
  9         Scanner in=new Scanner(System.in);    
 10         change fra=new change();
 11         System.out.println("请输入需要打印的运算题的数目:");
 12         N=in.nextInt();
 13         System.out.println("请选择是否需要分数运算(Y/N):");
 14         hh=in.next();
 15         if(hh.equals("Y"))//分数运算
 16         {
 17             for(i=0;i<N;i++)
 18             {            
 19                 int a,b,c,d;
 20                 int s1,s2;
 21                 a=(int) (Math.random()*100);
 22                 b=(int) (Math.random()*99+1);
 23                 //分母不等于0
 24                 c=(int) (Math.random()*100);
 25                 d=(int) (Math.random()*99+1);
 26                 int h=(int)(Math.random()*4);
 27                 int aa=0,bb=0,cc=0,dd=0;
 28                 //为了产生分数,分子也不可为零
 29                 if(a==0)
 30                     a=(int) (Math.random()*99+1);
 31                 if(c==0)
 32                     c=(int) (Math.random()*99+1);
 33                 //化简分数
 34                 int j;
 35                 j=fra.change_(a,b);
 36                 aa=a/j;
 37                 bb=b/j;
 38                 //化简分数
 39                 int p;
 40                 p=fra.change_(c,d);
 41                 cc=c/p;
 42                 dd=d/p;
 43                 int j1;
 44                 int s11,s22;
 45                 String str1;
 46                 if(h==0)
 47                 {   
 48                     //化简后,分母等于1时,直接输出分子
 49                     if(bb!=1&&dd!=1)
 50                         System.out.println(aa+"/"+bb+" + "+cc+"/"+dd+"=");
 51                         
 52                     else if(bb==1&&dd!=1)
 53                         System.out.println(aa+" + "+cc+"/"+dd+"=");
 54                     
 55                     else if(bb!=1&&dd==1)
 56                         System.out.println(aa+"/"+bb+" + "+cc+"=");
 57                         
 58                     else
 59                         System.out.println(aa+"+"+cc+"=");
 60                     //分数加法计算
 61                       s1=aa*dd+bb*cc;
 62                       s2=bb*dd;
 63                       j1=fra.change_(s1,s2);
 64                       s11=s1/j1;
 65                       s22=s2/j1;
 66                       str1=s11+"/"+s22;
 67                       str=in.next();
 68                       if(fra.judge_FRA(str1,str)==1)
 69                       {
 70                          sum++;
 71                       }
 72                       System.out.println("正确"+sum+"道题.");            
 73                 }
 74                 else if(h==1)
 75                 {
 76                     //不能产生负数
 77                     int t1,t2;
 78                     if((a/b-c/d)<0)
 79                     {
 80                         t1=aa;
 81                         aa=cc;
 82                         cc=t1;
 83                         t2=bb;
 84                         bb=dd;
 85                         dd=t2;
 86                     }
 87                     
 88                     //化简后,分母等于1时,直接输出分子    
 89                     if(bb!=1&&dd!=1)
 90                         System.out.println(aa+"/"+bb+" - "+cc+"/"+dd+"=");                        
 91                     else if(bb==1&&dd!=1)
 92                         System.out.println(aa+" - "+cc+"/"+dd+"=");
 93                     else if(bb!=1&&dd==1)
 94                         System.out.println(aa+"/"+bb+" - "+cc+"=");
 95                     else
 96                         System.out.println(aa+"-"+cc+"=");
 97                     //分数减法计算
 98                     s1=aa*dd-bb*cc;
 99                     s2=bb*dd;
100                     j1=fra.change_(s1,s2);
101                     s11=s1/j1;
102                     s22=s2/j1;
103                     str1=s11+"/"+s22;
104                     str=in.next();
105                     if(fra.judge_FRA(str1,str)==1)
106                     {
107                         sum++;
108                     }
109                     System.out.println("正确"+sum+"道题.");
110                 }
111                 else if(h==2)
112                 {
113                     
114                     //化简后,分母等于1时,直接输出分子
115                     if(bb!=1&&dd!=1)
116                         System.out.println(aa+"/"+bb+" * "+cc+"/"+dd+"=");
117 
118                     else if(bb==1&&dd!=1)
119                         System.out.println(aa+" * "+cc+"/"+dd+"=");
120              
121                     else if(bb!=1&&dd==1)
122                         System.out.println(aa+"/"+bb+" * "+cc+"=");
123                         
124                     else
125                         System.out.println(aa+"*"+cc+"=");
126                     //分数乘法计算
127                     s1=aa*cc;
128                     s2=bb*dd;
129                     j1=fra.change_(s1,s2);
130                     s11=s1/j1;
131                     s22=s2/j1;
132                     str1=s11+"/"+s22;
133                     str=in.next();
134                     if(fra.judge_FRA(str1,str)==1)
135                     {
136                         sum++;
137                     }
138                     System.out.println("正确"+sum+"道题.");
139                 }
140                 else
141                 { 
142                     
143                     //化简后,分母等于1时,直接输出分子
144                     if(bb!=1&&dd!=1)
145                         System.out.println("("+aa+"/"+bb+")"+" / "+"("+cc+"/"+dd+")"+"=");
146                      
147                     else if(bb==1&&dd!=1)
148                         System.out.println(aa+" / "+"("+cc+"/"+dd+")"+"=");
149                         
150                     else if(bb!=1&&dd==1)
151                         System.out.println("("+aa+"/"+bb+")"+" / "+cc+"=");
152                         
153                     else
154                         System.out.println(aa+"/"+cc+"=");
155                     //分数除法计算
156                     s1=aa*dd;
157                     s2=bb*cc;
158                     j1=fra.change_(s1,s2);
159                     s11=s1/j1;
160                     s22=s2/j1;
161                     str1=s11+"/"+s22;
162                     str=in.next();
163                     if(fra.judge_FRA(str1,str)==1)
164                     {
165                         sum++;
166                     }
167                     System.out.println("正确"+sum+"道题.");
168                 }
169             }
170         }
171         else if(hh.equals("N"))//整数运算
172         {
173             System.out.println("请选择是否需要产生括号的运算题(Y/N):");
174             String str1,str2,str3;
175             double strr2;
176             str=in.next();
177             double strr1=0;
178             double ss;
179             if(str.equals("Y"))
180             {
181                 System.out.println("请输入数值范围:");
182                 N1=in.nextInt();
183                 for(i=0;i<N;i++)
184                 {
185                     ArrayList<Integer> al1=new ArrayList<Integer>();
186                     //申请动态数组存放操作数
187                     ArrayList<Integer> al2=new ArrayList<Integer>();
188                     //申请动态数组存放运算符
189                     int m,n,a,b;
190                     int j,k;
191                     m=(int) (Math.random()*7+3);
192                     //限制操作数个数
193                     n=m-1;
194                     //运算符个数
195                     for(j=0;j<m;j++)
196                     {
197                         a=(int) (Math.random()*(N1-1)+1);
198                         al1.add(a);
199                     }//将操作数压入al1数组
200                     
201                     for(k=0;k<n;k++)
202                     {
203                         b=(int) (Math.random()*4);
204                         al2.add(b);
205                     }//将运算符压入al2数组
206                     if(m==3)//产生的操作数是3个
207                     {
208                         if((int)al2.get(0)>(int)al2.get(1))//比较优先级
209                         {
210                             if((int)al2.get(0)==1)
211                             {
212                                 System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"+"+(int)al1.get(2));
213                                 strr1=(int)al1.get(0)-(int)al1.get(1)+(int)al1.get(2);
214                             }                            
215                             else if((int)al2.get(0)==2)
216                             {
217                                 if((int)al2.get(1)==0)
218                                 {
219                                     System.out.print((int)al1.get(0)+"*"+"("+(int)al1.get(1)+"+"+(int)al1.get(2)+")");
220                                     strr1=(int)al1.get(0)*((int)al1.get(1)+(int)al1.get(2));
221                                 }
222                                 else if((int)al2.get(1)==1)
223                                 {
224                                     System.out.print((int)al1.get(0)+"*"+"("+(int)al1.get(1)+"-"+(int)al1.get(2)+")");
225                                     strr1=(int)al1.get(0)*((int)al1.get(1)-(int)al1.get(2));
226                                 }
227                             }
228                             else if((int)al2.get(0)==3)
229                             {
230                                 if((int)al2.get(1)==0)
231                                 {
232                                     System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"+"+(int)al1.get(2)+")");
233                                     strr1=(int)al1.get(0)/((int)al1.get(1)+(int)al1.get(2));
234                                 }
235                                 else if((int)al2.get(1)==1)
236                                 {
237                                     System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"-"+(int)al1.get(2)+")");
238                                     strr1=(int)al1.get(0)/((int)al1.get(1)-(int)al1.get(2));
239                                 }
240                                 if((int)al2.get(1)==2)
241                                 {
242                                     System.out.print((int)al1.get(0)+"/"+(int)al1.get(1)+"*"+(int)al1.get(2));
243                                     strr1=(int)al1.get(0)/(int)al1.get(1)*(int)al1.get(2);
244                                 }
245                             }
246                         }
247                         else if((int)al2.get(0)<(int)al2.get(1)||(int)al2.get(0)==(int)al2.get(1))//比较优先级
248                         {
249                             if((int)al2.get(0)==0)
250                             {
251                                 if((int)al2.get(1)==0)
252                                 {
253                                     System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"+"+(int)al1.get(2));
254                                     strr1=(int)al1.get(0)+(int)al1.get(1)+(int)al1.get(2);
255                                 }
256                                 else if((int)al2.get(1)==1)
257                                 {
258                                     System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"-"+(int)al1.get(2));
259                                     strr1=(int)al1.get(0)+(int)al1.get(1)-(int)al1.get(2);
260                                 }
261                                 else if((int)al2.get(1)==2)
262                                 {
263                                     System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"*"+(int)al1.get(2));
264                                     strr1=(int)al1.get(0)+(int)al1.get(1)*(int)al1.get(2);
265                                 }
266                                 else if((int)al2.get(1)==3)
267                                 {
268                                     System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"/"+(int)al1.get(2));
269                                     strr1=(int)al1.get(0)+(int)al1.get(1)/(int)al1.get(2);
270                                 }
271                             }
272                             else if((int)al2.get(0)==1)
273                             {
274                                 if((int)al2.get(1)==1)
275                                 {
276                                     System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"-"+(int)al1.get(2));
277                                     strr1=(int)al1.get(0)-(int)al1.get(1)-(int)al1.get(2);
278                                 }
279                                 else if((int)al2.get(1)==2)
280                                 {
281                                     System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"*"+(int)al1.get(2));
282                                     strr1=(int)al1.get(0)-(int)al1.get(1)*(int)al1.get(2);
283                                 }
284                                 else if((int)al2.get(1)==3)
285                                 {
286                                     System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"/"+(int)al1.get(2));
287                                     strr1=(int)al1.get(0)-(int)al1.get(1)/(int)al1.get(2);
288                                 }
289                             }
290                             else if((int)al2.get(0)==2)
291                             {
292                                 if((int)al2.get(1)==2)
293                                 {
294                                     System.out.print((int)al1.get(0)+"*"+(int)al1.get(1)+"*"+(int)al1.get(2));
295                                     strr1=(int)al1.get(0)*(int)al1.get(1)*(int)al1.get(2);
296                                 }
297                                 else if((int)al2.get(1)==3)
298                                 {
299                                     System.out.print((int)al1.get(0)+"*"+(int)al1.get(1)+"/"+(int)al1.get(2));
300                                     strr1=(int)al1.get(0)*(int)al1.get(1)/(int)al1.get(2);
301                                 }
302                             }
303                             else if((int)al2.get(0)==3)
304                             {
305                                 System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"/"+(int)al1.get(2)+")");
306                                 strr1=(int)al1.get(0)/((int)al1.get(1)/(int)al1.get(2));
307                             }
308                         }
309                         System.out.print("=");
310                         ss=in.nextDouble();
311                         if(fra.judge(strr1,ss)==1)
312                         {
313                             sum++;
314                         }
315                         System.out.println("正确"+sum+"道题.");
316                     }
317                     else if(m>=4)//产生的操作大于等于4个
318                     {
319                         double sumss=0;
320                         int r;
321                         int rr=0;
322                         int jj;
323                         double list[]=new double[7];//存放和
324                         double sums[]=new double[4];
325                         for(r=0;r<7;r++)
326                         {
327                             list[r]=0;
328                         }
329                         for(r=0;r<4;r++)
330                         {
331                             sums[r]=0;
332                         }
333                         if(al2.size()%2==0)
334                         {
335                             jj=al2.size()/2;
336                         }
337                         else
338                             jj=(al2.size()-1)/2;
339                         for(j=0;j<=jj;j=j+2)//输出运算表达式
340                         {
341                             k=j;
342                             if((int)al2.get(j+2)==2||(int)al2.get(j+2)==3)
343                             {
344                                 list[j+1]=1;
345                                 sums[rr+1]=1;
346                             }
347                              list[jj]=(int)al1.get(al1.size()-1);
348                             System.out.print("(");
349                             if((int)al2.get(j)>(int)al2.get(j+1))//比较运算符优先级
350                             {
351                                 if((int)al2.get(j)==1)//第一个出现减法
352                                 {
353                                     System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"+"+(int)al1.get(k+2));
354                                     list[j]=(int)al1.get(k)-(int)al1.get(k+1)+(int)al1.get(k+2);
355                                 }
356                                 else if((int)al2.get(j)==2)//第一个出现乘法
357                                 {
358                                     if((int)al2.get(j+1)==0)
359                                     {
360                                         System.out.print((int)al1.get(k)+"*"+"("+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)+")");
361                                         list[j]=(int)al1.get(k)*+((int)al1.get(k+1)+(int)al1.get(k+2));
362                                     }
363                                     else if((int)al2.get(j+1)==1)
364                                     {
365                                         System.out.print((int)al1.get(k)+"*"+"("+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)+")");
366                                         list[j]=(int)al1.get(k)*((int)al1.get(k+1)-(int)al1.get(k+2));
367                                     }
368                                 }
369                                 else if((int)al2.get(j)==3)//第一个出现除法
370                                 {
371                                     if((int)al2.get(j+1)==0)
372                                     {
373                                         System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)+")");
374                                         list[j]=(int)al1.get(k)/((int)al1.get(k+1)+(int)al1.get(k+2));
375                                     }
376                                     else if((int)al2.get(j+1)==1)
377                                     {
378                                         if((int)al1.get(k+1)==(int)al1.get(k+2))
379                                         {
380                                             System.out.print((int)al1.get(k)+"/"+"("+((int)al1.get(k+1)+1)+"-"+(int)al1.get(k+2)+")");
381                                             list[j]=(int)al1.get(k)/(((int)al1.get(k+1)+1)-(int)al1.get(k+2));
382                                         }
383                                         else 
384                                         {
385                                             System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)+")");
386                                             list[j]=(int)al1.get(k)/((int)al1.get(k+1)-(int)al1.get(k+2));
387                                         }
388                                     }
389                                     if((int)al2.get(j+1)==2)
390                                     {
391                                         System.out.print((int)al1.get(k)+"/"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2));
392                                         list[j]=(int)al1.get(k)/(int)al1.get(k+1)*(int)al1.get(k+2);
393                                     }
394                                 }
395                             }
396                             else if((int)al2.get(j)<(int)al2.get(j+1)||(int)al2.get(j)==(int)al2.get(j+1))
397                             {
398                                 if((int)al2.get(j)==0)
399                                 {
400                                     if((int)al2.get(j+1)==0)//第一个出现加法
401                                     {
402                                         System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"+"+(int)al1.get(k+2));
403                                         list[j]=(int)al1.get(k)+(int)al1.get(k+1)+(int)al1.get(k+2);
404                                     }
405                                     else if((int)al2.get(j+1)==1)
406                                     {
407                                         System.out.print((int)al1.get(k)+"+"+(

以上是关于小学四则运算3的主要内容,如果未能解决你的问题,请参考以下文章

小学四则运算口算练习app---No.3

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

小学四则运算训练改进

小学四则运算

小学四则运算

小学四则运算