软件工程作业01


设计思想:用随机数来代表运算符号和分数的运算,在分数运算中借用最小公倍数和最大公约数来进行同分从而使得结果是最简的。
程序源代码:
 package 四则运算;
  2 import java.util.*;
  3 public class suanshi {
  4     public static void main(String args[]){
  5          System.out.println("请输入要生成的数学题的数目:" );
  6         
  7         Scanner scanner = new Scanner(System.in);
  8         int n = scanner.nextInt();
  9         
 10         //随机生成一个代表分数运算还是简单运算的数字
 11         int temp = (int)(Math.random()*2)+1;
 12         //生成随机数
 13         int firstNum = (int)(Math.random()*10);
 14         int secondNum = (int)(Math.random()*10);
 15         int thirdNum = (int)(Math.random()*10);
 16         int fourthNum = (int)(Math.random()*10);
 17         //生成随机的1-4来代表加减乘除
 18         int index = 1+(int)(Math.random()*4);
 19         
 20         System.out.println("式子中是否含有乘除法:1.是    2.否");
 21         Scanner scanner1 = new Scanner(System.in);
 22         int cc = scanner.nextInt();
 23         if(cc==1)
 24         for(int i=0;i<n;i++)
 25             {
 26             
 27             if(temp == 1)
 28             {
 29             //编辑
 30             if(index == 1)
 31                 {
 32                 System.out.println((i+1)+"."+" "+firstNum+ "+" +secondNum+ "=");
 33                 Scanner in1 = new Scanner(System.in);
 34                 int a = in1.nextInt();
 35                 if(a==firstNum+secondNum)
 36                     System.out.println("回答正确");
 37                 else
 38                     System.out.println("回答错误,正确答案为:"+(firstNum+secondNum));
 39                 }
 40             if(index == 2)
 41                 {
 42                 System.out.println((i+1)+"."+" "+firstNum+ "-" +secondNum+ "=");
 43                 Scanner in2 = new Scanner(System.in);
 44                 int b = in2.nextInt();
 45                 if(b==firstNum-secondNum)
 46                     System.out.println("回答正确");
 47                 else
 48                     System.out.println("回答错误,正确答案为:"+(firstNum-secondNum));
 49                 }
 50             if(index == 3)
 51             {
 52                 System.out.println((i+1)+"."+" "+firstNum+ "*" +secondNum+ "=");
 53                 Scanner in3 = new Scanner(System.in);
 54                 int a = in3.nextInt();
 55                 if(a==firstNum*secondNum)
 56                     System.out.println("回答正确");
 57                 else
 58                     System.out.println("回答错误,正确答案为:"+(firstNum*secondNum));
 59             }
 60             if(index == 4)
 61             {
 62                 if(firstNum!=0)
 63                     System.out.println((i+1)+"."+" "+secondNum+ "/" +firstNum+ "=");
 64                 else if(secondNum!=0)
 65                     System.out.println((i+1)+"."+" "+firstNum+ "/" +secondNum+ "=");
 66                 else
 67                     {
 68                     System.out.println(30 + "/" + 15 + "=?");
 69                     }
 70                 Scanner in4 = new Scanner(System.in);
 71                 double a = in4.nextDouble();
 72                 if(a==firstNum/secondNum)
 73                     System.out.println("回答正确");
 74                 else
 75                     System.out.println("回答错误,正确答案为:"+(firstNum/secondNum));
 76             
 77             }
 78             }
 79             //分数的加减运算
 80             if(temp==2)
 81             {
 82                 if(index==1)
 83                 {
 84                     System.out.println((i+1)+". "+firstNum+"/"+secondNum+" + "+thirdNum+"/"+fourthNum);
 85                     int a = min(secondNum,fourthNum);//分母的最小公倍数
 86                     int b = a/secondNum;//通分后第一个式子要乘的数
 87                     int c = a/fourthNum;//通分后第二个式子的要乘的数
 88                     int m = firstNum*b;//通分后第一个式子的分子
 89                     int d = thirdNum*c;//同分后第二个式子的分子
 90                     int w = m+d;//相加后的分子;
 91                     int f = max(a,w);
 92                     double g = (w/f)/(a/f);
 93                     Scanner in5 = new Scanner(System.in);
 94                     double h = in5.nextDouble();
 95                     if(h==g)
 96                         System.out.println("回答完全正确");
 97                     else
 98                         System.out.println("回答错误,正确答案为:"+g);
 99                 }
100                 if(index == 2)
101                 {
102                     System.out.println((i+1)+". "+firstNum+"/"+secondNum+" - "+thirdNum+"/"+fourthNum);
103                     int a = min(secondNum,fourthNum);
104                     int b = a/secondNum;//通分后第一个式子要乘的数
105                     int c = a/fourthNum;//通分后第二个式子的要乘的数
106                     int m = firstNum*b;//通分后第一个式子的分子
107                     int d = thirdNum*c;//同分后第二个式子的分子
108                     int fenJian = m-d;//相减后的分子
109                     int f = max(a,fenJian);
110                     double g = (fenJian/f)/(a/f);
111                     Scanner in6 = new Scanner(System.in);
112                     double h = in6.nextDouble();
113                     if(h==g)
114                         System.out.println("回答完全正确");
115                     else
116                         System.out.println("回答错误,正确答案为:"+g);
117                 }
118                 if(index == 3)
119                 {
120                     System.out.println((i+1)+". "+firstNum+"/"+secondNum+" * "+thirdNum+"/"+fourthNum);
121                     int Sfenzi = firstNum*thirdNum;//相乘后的分子
122                     int Sfenmu = secondNum*fourthNum;//相乘后的分子
123                     int c = max(Sfenzi,Sfenmu);//分子和分母的最大公约数
124                     int Efenzi = Sfenzi/c;
125                     int Efenmu = Sfenmu/c;
126                     double de = Efenzi/Efenmu;//约分后的得数
127                     Scanner in7 = new Scanner(System.in);
128                     double h = in7.nextDouble();
129                     if(h==de)
130                         System.out.println("回答正确");
131                     else
132                         System.out.println("回答错误,正确答案为:"+de);
133                 }
134                 if(index == 4)
135                 {
136                     //分数的除法就是乘以第二个数的倒数
137                     if(secondNum!=0&&fourthNum!=0&&thirdNum/fourthNum!=0)
138                         System.out.println((i+1)+"."+" "+firstNum+ "/" +secondNum+ " / "+thirdNum+"/"+fourthNum);
139                     
140                     else
141                         {
142                         System.out.println(30 + "/" + 15 + "=?");
143                         }
144                     int Sfenzi = firstNum*fourthNum;//分子
145                     int Sfenmu = secondNum*thirdNum;//分母
146                     int c = max(Sfenzi,Sfenmu);
147                     int Efenzi = Sfenzi/c;
148                     int Efenmu = Sfenmu/c;
149                     double de = Efenzi/Efenmu;
150                     Scanner in8 = new Scanner(System.in);
151                     double h = in8.nextDouble();
152                     if(h==de)
153                         System.out.println("回答正确");
154                     else
155                         System.out.println("回答错误,正确答案为:"+de);
156                 }
157                 
158             }
159             }
160         
161         
162 }
163 
164     
165 
166 
167 
168 
169 //求最大公约数与最小公倍数
170 
171   
172   public static int max(int a ,int b)
173   {
174       //循环法求两个数的最大公约数
175       
176       //保证第一个参数大于第二个参数
177       if(a<b)
178       {
179           int temp;
180           temp=a;
181           a=b;
182           b=temp;
183       }
184       while(a%b!=0)   //在余数不为零时循环
185       {
186           int temp=a%b;
187           a=b;
188           b=temp;
189       }
190       return b;  //返回最大公约数
191   }
192   
193   public static int min(int a,int b)
194   {
195       //求最小公倍数
196       return a*b/max(a,b);
197   }
198   
199 }

程序截图:
上课未及时完后的原因:上课的时候还是对分块化的编程不熟悉,导致对程序不知道如何去写,似乎是无从下手,下课后及时思考了这些让程序得以运行,还有没有想到运算符号如何替代,下课与同学的交流中得到感觉。

反思:要继续多写程序多认真的思考一些,对于模块化编程要继续熟悉。
原文地址:https://www.cnblogs.com/kangzhijia/p/6492121.html