小学四则运算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的主要内容,如果未能解决你的问题,请参考以下文章