实验名称:四则运算四
程序员:吕泽坤
日期:2016-04-10
(一)实验要求:
1、 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
2、生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
3、每道题目中出现的运算符个数不超过3个,括号不限
4、程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。
例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。
3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
把程序变成一个网页程序, 用户通过设定参数,就可以得到各种题目,并可实现在线答题并评判。
(二)设计思路:
1确定题目数量:N
2随机分配运算符数量,a>0;a<3
3随机分配在运算符数组 fu[]
4随机分配数组整数
5根据运算符个数分类
6运算符个数为 :1
分别表示加减乘除运算;
计算算式结果sum;
输入 所做答案:
比较判断对错
7运算符个数为 :2
进行判断连续运算符为*,“/”;
进行括号表示乘除运算;
分别表示加减乘除运算;
计算算式结果sum;
输入 所做答案:
比较判断对错
程序代码:
1 package size04; 2 import java.lang.*; 3 import java.util.Scanner; 4 public class test { 5 static Scanner input=new Scanner(System.in); 6 public static void main(String []arg){ 7 //System.out.println("hello"); 8 System.out.println("请输入题目数量"); 9 //Scanner input=new Scanner(System.in); 10 int N=input.nextInt(); 11 System.out.println("题目数量"+N); 12 int i=1,j=0; 13 for(i=1;i<N+1;i++) 14 { 15 16 System.out.println("题目 :"+i ); 17 //随机给出运算符数量 18 int a=(int)(Math.random()*2)+1; 19 System.out.println("运算符数量:"+a+" "); 20 String []fu=new String[a]; 21 int fff=0 22 ; 23 for(j=0;j<a;j++) 24 { 25 String s[]={"+","-","*","/"}; 26 int c=(int)(Math.random()*4); 27 if(c==2||c==3) 28 { 29 fff++; 30 } 31 String d=s[c]; 32 fu[j]=d; 33 } 34 System.out.println("运算符:"+" "); 35 for(j=0;j<a;j++) 36 { 37 System.out.print(fu[j]+" "); 38 System.out.println(" :"); 39 } 40 //随机生成整数数组 41 int b=a+1;//表示整数个数 42 int []num=new int[b]; 43 for(j=0;j<b;j++) 44 { 45 int d=(int)(Math.random()*101); 46 num[j]=d; 47 } 48 49 50 if(a==1) 51 { 52 yunsuan1(a,fu,num); 53 //a运算符数量 54 55 } 56 if(a==2) 57 { 58 yunsuan2(a,fu,num); 59 } 60 61 /*if(a==3) 62 { 63 yunsuan3(a,fu,num,fff); 64 }*/ 65 66 67 } 68 69 } 70 /*public static void yunsuan3(int a,String fu[],int num[],int fff) 71 { 72 int n=a; 73 int sum=0; 74 75 if(fff<=1) 76 { 77 if(fu[0]=="*") 78 } 79 }*/ 80 public static void yunsuan2(int a,String fu[],int num[]) 81 { 82 int n=a,f=0; 83 int sum=0,sum2=0; 84 if(fu[0]=="*"&&fu[1]=="*") 85 { 86 f=1; 87 } 88 if(fu[1]=="/"&&fu[0]=="/") 89 { 90 f=1; 91 } 92 if(f==1) 93 { 94 System.out.println("("+num[0]+fu[0]+num[1]+")"+fu[1]+num[2]+"="); 95 if(fu[1]=="*") 96 { 97 sum=num[0]*num[1]*num[2]; 98 } 99 if(fu[1]=="/") 100 { 101 gcd(num[0],num[1]); 102 sum2=num[0]/num[1]; 103 gcd(sum2,num[2]); 104 sum=sum2/num[2]; 105 } 106 } 107 else if(f!=1) 108 { 109 System.out.println(num[0]+fu[0]+num[1]+fu[1]+num[2]+"="); 110 if(fu[0]=="+"&&fu[1]=="+") 111 { 112 sum=num[0]+num[1]+num[2]; 113 114 } 115 if(fu[0]=="+"&&fu[1]=="-") 116 { 117 sum=num[0]+num[1]-num[2]; 118 119 } 120 if(fu[0]=="+"&&fu[1]=="*") 121 { 122 sum=num[0]+num[1]*num[2]; 123 124 } 125 if(fu[0]=="+"&&fu[1]=="/") 126 { 127 sum=num[0]+num[1]/num[2]; 128 129 } 130 if(fu[0]=="-"&&fu[1]=="+") 131 { 132 sum=num[0]-num[1]+num[2]; 133 134 } 135 if(fu[0]=="-"&&fu[1]=="-") 136 { 137 sum=num[0]-num[1]-num[2]; 138 139 } 140 if(fu[0]=="-"&&fu[1]=="*") 141 { 142 sum=num[0]-num[1]*num[2]; 143 144 } 145 if(fu[0]=="-"&&fu[1]=="/") 146 { 147 sum=num[0]-num[1]/num[2]; 148 149 } 150 if(fu[0]=="*"&&fu[1]=="-") 151 { 152 sum=num[0]*num[1]-num[2]; 153 154 } 155 if(fu[0]=="*"&&fu[1]=="+") 156 { 157 sum=num[0]-num[1]-num[2]; 158 159 } 160 if(fu[0]=="*"&&fu[1]=="/") 161 { 162 sum2=num[0]*num[1]; 163 sum=sum2/num[2]; 164 165 } 166 if(fu[0]=="/"&&fu[1]=="-") 167 { 168 sum=num[0]/num[1]-num[2]; 169 170 } 171 if(fu[0]=="/"&&fu[1]=="+") 172 { 173 gcd(num[0],num[1]); 174 sum2=num[0]/num[1]; 175 176 sum=sum2+num[2]; 177 178 } 179 if(fu[0]=="/"&&fu[1]=="*"&&num[1]!=0) 180 { 181 gcd(num[0],num[1]); 182 sum2=num[0]/num[1]; 183 184 sum=sum2*num[2]; 185 186 } 187 } 188 System.out.println("请输入答案:"); 189 int answer=input.nextInt(); 190 if(sum==answer) 191 { 192 System.out.println("答案正确:"); 193 } 194 else if(sum!=answer) 195 { 196 System.out.println("答案错误:"); 197 System.out.println("正确答案: "+sum); 198 199 } 200 201 } 202 public static void yunsuan1(int n,String fu[],int num[]) 203 { 204 205 int a=n,j=0; 206 207 208 209 210 int sum = 0,sum2=0; 211 if(fu[0]=="+") 212 { 213 sum=num[0]+num[1]; 214 System.out.println(num[0]+fu[0]+num[1]+"="); 215 } 216 217 if(fu[0]=="-"&&num[0]>=num[1]) 218 { 219 sum=num[0]-num[1]; 220 System.out.println(num[0]+fu[0]+num[1]+"="); 221 222 } 223 if(fu[0]=="-"&&num[0]<num[1]) 224 { 225 sum=num[1]-num[0]; 226 System.out.println(num[1]+fu[0]+num[0]+"="); 227 } 228 if(fu[0]=="*") 229 { 230 sum=num[0]*num[1]; 231 System.out.println(num[0]+fu[0]+num[1]+"="); 232 } 233 if(fu[0]=="/"&&num[1]!=0) 234 { 235 System.out.println(num[0]+fu[0]+num[1]+"="); 236 gcd(num[0],num[1]); 237 sum=num[0]/num[1]; 238 System.out.println(sum); 239 } 240 System.out.println("请输入答案:"); 241 int answer=input.nextInt(); 242 if(sum==answer) 243 { 244 System.out.println("答案正确:"); 245 } 246 if(sum!=answer) 247 { 248 System.out.println("答案错误:"); 249 System.out.println("正确答案:"+sum); 250 } 251 252 253 } 254 255 public static int gcd(int x,int y) 256 { 257 if(y == 0) 258 return x; 259 else 260 return gcd(y,x%y); 261 } 262 263 }
实验截图: