援建工程作业04,二柱子4

                                                                              实验名称:四则运算四

                                                                               程序员:吕泽坤    

                                                                               日期: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 }

 实验截图:

 

posted @ 2016-04-09 11:10  无限yier  阅读(171)  评论(0编辑  收藏  举报