zoukankan      html  css  js  c++  java
  • 软件工程个人作业01

      1 package Demo;
      2 
      3 import java.util.Scanner;
      4 
      5 public class size {
      6     public static void main(String[]args)
      7     {
      8         String ch="y";//是否退出循环
      9         int choose=0;//判断是否添加真分数
     10         int []cc1=new int [2];//记录正确和错误的题数
     11         int []cc2=new int [2];//用来接收正确和错误的题数
     12         int yn=0;//运行一次while循环时,只让第一次询问是否添加真分数
     13         
     14         Scanner scan=new Scanner(System.in);
     15         while(ch=="y")
     16         {
     17             if(yn==0)
     18             {
     19                 yn++;
     20                 System.out.println("你学过真分数吗:1.学过。2没学过");
     21                 choose=scan.nextInt();
     22             }
     23             else{
     24                 if(choose==1)
     25                 {
     26                     
     27                     System.out.println("你想做几个题呢");
     28                     int num=scan.nextInt();
     29                     cc2=fuza(num);
     30                     cc1[0]+=cc2[0];
     31                     cc1[1]+=cc2[1];
     32                     System.out.println("好棒,是继续努力还是先休息一会,请选择:1.继续。2休息一会");
     33                     {
     34                         int rl=scan.nextInt();
     35                         if(rl==2)
     36                         {
     37                             ch="z";
     38                             System.out.println("你一共作答"+(cc1[0]+cc1[1])+"道题,"+"其中共答对了"+cc1[0]+"道题,"+"答错了"+cc1[1]+"道题.");
     39                         }
     40                     }
     41                 
     42                 }
     43                 else 
     44                 {
     45                     
     46                     System.out.println("你想做几个题呢");
     47                     int num=scan.nextInt();
     48                     cc2=simpleys(num);
     49                     cc1[0]+=cc2[0];
     50                     cc1[1]+=cc2[1];
     51                     System.out.println("好棒,是继续努力还是先休息一会,请选择:1.继续。2休息一会");
     52                     {
     53                         int rl=scan.nextInt();
     54                         if(rl==2)
     55                         {
     56                             ch="z";
     57                             System.out.println("你一共作答"+(cc1[0]+cc1[1])+"道题,"+"其中共答对了"+cc1[0]+"道题,"+"答错了"+cc1[1]+"道题.");
     58                         }
     59                     }
     60                 }
     61             }
     62             
     63         }
     64     }
     65     static int[] yunsuan2(int a,int b,int c,int d,int e)//实现两个真分数的四则运算,a,b代表前一个数的分子和分母,c,d代表后一个数的分子和分母,e表示运算符号的序号
     66     {
     67         int []cc1=new int[3];
     68         cc1[2]=0;
     69         int f=0,g=0;//f和g分别用来表示求得计算结果的分子和分母
           int h=0;//h用来接收两个数的最大公约数。 70 if(e==0) 71 { 72 if(b==d)//两个数的分母相同 73 { 74 f=a+c; 75 g=b; 76 if(f<g)//maxyue()需要让较大数在前面,所以需要区分f,g的大小 77 { 78 h=maxyue(g,f); 79 f=f/h; 80 g=g/h; 81 } 82 else 83 { 84 h=maxyue(f,g); 85 f=f/h; 86 g=g/h; 87 } 88 } 89 else 90 { 91 g=b*d/maxyue(b,d); 92 a=g/b*a; 93 c=g/d*c; 94 f=a+c; 95 if(f<g) 96 { 97 h=maxyue(g,f); 98 f=f/h; 99 g=g/h; 100 } 101 else{ 102 h=maxyue(f,g); 103 f=f/h; 104 g=g/h; 105 } 106 } 107 } 108 else if(e==1) 109 { 110 if(b==d) 111 { 112 f=a-c; 113 if(f<=0) 114 { 115 cc1[2]=1; 116 } 117 g=b; 118 if(f<g) 119 { 120 h=maxyue(g,f); 121 f=f/h; 122 g=g/h; 123 } 124 else{ 125 h=maxyue(f,g); 126 f=f/h; 127 g=g/h; 128 } 129 } 130 else 131 { 132 g=b*d/maxyue(b,d); 133 a=g/b*a; 134 c=g/d*c; 135 f=a-c; 136 if(f<0) 137 { 138 cc1[2]=1; 139 } 140 if(f<g) 141 { 142 h=maxyue(g,f); 143 f=f/h; 144 g=g/h; 145 } 146 else{ 147 h=maxyue(f,g); 148 f=f/h; 149 g=g/h; 150 } 151 } 152 } 153 else if(e==2) 154 { 155 f=a*c; 156 g=b*d; 157 if(f<g) 158 { 159 h=maxyue(f,g); 160 } 161 else 162 { 163 h=maxyue(g,f); 164 } 165 f=f/h; 166 g=g/h; 167 } 168 else 169 { 170 f=a*d; 171 g=b*c; 172 if(f>g) 173 { 174 h=maxyue(f,g); 175 } 176 else 177 { 178 h=maxyue(g,f); 179 } 180 f=f/h; 181 g=g/h; 182 } 183 cc1[0]=f; 184 cc1[1]=g; 185 return cc1;//返回结果的分子和分母,和是否可以打印出来作为题目 186 } 187 private static int[] fuza(int num) { 188 String []a1=new String[num+1]; 189 String []a2=new String[num+1]; 190 int []cc1=new int [2]; 191 int []cc2=new int[2]; 192 int zj=0,cj=0;//分别记录正确的题数和错误的题数 193 int i=0; 194 int m=0;//判断是否打印出来 195 String l=""; 196 String rs=""; 197 Scanner sc=new Scanner(System.in); 198 String rs2;//用户的回答 199 int r1=0; 200 while(i<num) 201 { 202 m=0; 203 l=""; 204 rs=""; 205 int a=(int)(Math.random()*10); 206 int b=(int)(Math.random()*10); 207 int c=(int)(Math.random()*10); 208 int d=(int)(Math.random()*10); 209 int e=(int)(Math.random()*4); 210 211 String f=""; 212 String g=""; 213 if(a>=b||c>=d||c==0||d==0||b==0||a==0)//产生的随机数都不为0,且让两个数的分子小于分母。 214 { 215 m=1; 216 217 } 218 else 219 { 220 cc1=yunsuan2(a,b,c,d,e); 221 if(cc1[2]==1) 222 { 223 m=1; 224 } 225 else 226 { 227 int h=maxyue(a,b); 228 int k=maxyue(c,d); 229 if(h==1) 230 { 231 f="("+a+"/"+b+")"; 232 } 233 else 234 { 235 a=a/h; 236 b=b/h; 237 f="("+a+"/"+b+")"; 238 } 239 240 if(k==1) 241 { 242 g="("+c+"/"+d+")"; 243 244 } 245 else 246 { 247 c=c/k; 248 d=d/k; 249 g="("+c+"/"+d+")"; 250 } 251 a1[i]=f; 252 a2[i]=g; 253 for(int j=0;j<i;j++) 254 { 255 if(a1[j].equals(f)&&a2[j].equals(g)) 256 { 257 m=1; 258 a1[i]=""; 259 a2[i]=""; 260 break; 261 } 262 } 263 if(m==0) 264 { 265 if(e==0) 266 { 267 l="+"; 268 } 269 else if(e==1) 270 { 271 l="-"; 272 } 273 else if(e==2) 274 { 275 l="*"; 276 } 277 else 278 { 279 l="/"; 280 } 281 282 if(cc1[0]>=cc1[1]&&cc1[0]%cc1[1]==0) 283 { 284 r1=cc1[0]/cc1[1]; 285 rs+=""+r1; 286 } 287 else 288 { 289 rs+="("+cc1[0]+"/"+cc1[1]+")"; 290 } 291 System.out.println("请作答第"+(i+1)+"题"+":"+f+l+g+"="); 292 System.out.print("请输入答案:"); 293 rs2=sc.next(); 294 if(rs2.length()>1) 295 { 296 rs2="("+rs2+")"; 297 } 298 if(rs2.equals(rs)) 299 { 300 System.out.println("恭喜你,回答正确!"); 301 zj++; 302 } 303 else 304 { 305 cj++; 306 System.out.println("哦哦,回答错误!正确答案是:"+rs); 307 } 308 i++; 309 310 } 311 312 } 313 } 314 } 315 System.out.println("你刚刚做了"+(i)+"个题,"+"其中共做对了"+zj+"道题,"+"做错了"+cj+"个题"); 316 cc2[0]=zj; 317 cc2[1]=cj; 318 return cc2; 319 } 320 static int[] simpleys(int num) 321 { 322 Scanner sc=new Scanner(System.in); 323 int []cc1=new int [num+1]; 324 int []cc2=new int[num+1]; 325 int []cc3=new int[2]; 326 int i=0;//控制打印个数 327 int m=0;//判断是否打印出来 328 int rs;//输入结果 329 int t1=0;//记录正确的题数 330 int f1=0;//记录错误的题数 331 while(i<num) 332 { 333 int a=(int)(Math.random()*100); 334 int b=(int)(Math.random()*100); 335 int c=(int)(Math.random()*4); 336 String d=""; 337 int t=0; 338 if(a<b) 339 { 340 t=a; 341 a=b; 342 b=t; 343 } 344 cc1[i]=a; 345 cc2[i]=b; 346 for(int j=0;j<i;j++) 347 { 348 if(cc1[j]==a&&cc2[j]==b) 349 { 350 m=1; 351 break; 352 } 353 } 354 if(c==0) 355 { 356 d="+"; 357 } 358 else if(c==1) 359 { 360 d="-"; 361 } 362 else if(c==2) 363 { 364 d="*"; 365 } 366 else 367 { 368 m=0; 369 if(b==0||a % b!=0||a<b) 370 { 371 m=1; 372 } 373 d="/"; 374 } 375 376 377 if(m==0)//筛选出不能被打印的情况,例如除法中除数为0的情况 378 { 379 380 System.out.println("请作答第"+(i+1)+"个题"+":"+a+d+b+"="); 381 i++; 382 System.out.println("请输入你的答案:"); 383 rs=sc.nextInt(); 384 if(rs==yunsuan1(c,a,b)) 385 { 386 System.out.println("恭喜你,回答正确,你真棒!"); 387 t1++; 388 } 389 else 390 { 391 f1++; 392 System.out.println("哦哦,回答错了哦,正确结果是:"+yunsuan1(c,a,b)); 393 } 394 } 395 } 396 System.out.println("你刚刚做了"+(i)+"个题,"+"其中共做对了"+t1+"道题,"+"做错了"+f1+"个题"); 397 cc3[0]=t1; 398 cc3[1]=f1; 399 return cc3; 400 } 401 static int yunsuan1(int c,int a,int b)//简单的两个数的运算 402 { 403 int x; 404 if(c==0) 405 { 406 x=a+b; 407 } 408 else if(c==1) 409 { 410 x=a-b; 411 } 412 else if(c==2) 413 { 414 x=a*b; 415 } 416 else 417 { 418 x=a/b; 419 } 420 return x; 421 } 422 static int maxyue(int y,int x)//最大公约数 423 { 424 int r=y; 425 while(r!=0) 426 { 427 r=x%y; 428 x=y; 429 y=r; 430 } 431 return x; 432 } 433 }

       实现目标:  实现100以内的两个数之间的四则运算,适合2到4年学生使用,另外添加了真分数的运算。

      设计思路:  首先写简单的两个数的四则运算,用random()方法产生两个数和一个运算符号,然后定义一个方法,用来计算两个数,根据运算符号的不同,当运算为减法时考虑不产生负数,除法的时候除数不为0,然后判断是否可以作为题打印出来,打印出来,让用户输入答案,将结果和运算的结果进行比较,如果正确提示用户回答正确,回答错误的话就提示用户错误,并提供正确答案,还有为了不让题出现重复,用两个数组存取产生过的两个数,判断一下,如果重复就不把这道题打印出来。

    当编写真分数时大部分跟上面的写法相同,不同的是真分数需要产生五个随机数,4个随机数的结果分别作为两个数的分子分母,同时为了显示起来好看,把产生的数据进行化简,和加括号,用String类型的变量来存储,计算的方法:加减法计算时分母相同,

    可以直接将两个分子相加减,不同的话需要先通分,找两个分母的最小公倍数,分子分母都成上相同的倍数,然后在进行加减运算,乘除运算时乘法直接让两个分子和分母分别相乘,成除法排除两数分母为0,除法让两数的分子分母错位相成,最后结果需要化简,

    打印出来,由用户回答,最后总结用户所做题目的正错情况。

      实验总结:(1)学会random()用法。

            (2)学会更相减损术。

            (3)学会continue用法,break用法,这些总是搞错,continue可以再循环用来结束本次循环,break是结束循环。

      这只是最简单的两个功能,以后会慢慢把功能加上去,直到实现成为一个能在线答题的系统。

  • 相关阅读:
    20181120-1 每周例行报告
    20181113-2 每周例行报告
    20181030-4 每周例行报告
    20181023-3 每周例行报告
    第六周例行报告
    软件功能说明书final修订
    第十二周——例行报告
    PSP总结报告
    第十一周——例行报告
    PSP Daily软件beta版本——基于NABCD评论,及改进建议
  • 原文地址:https://www.cnblogs.com/qingtianxt/p/6498500.html
Copyright © 2011-2022 走看看