• 软件工程作业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 }

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

    反思:要继续多写程序多认真的思考一些,对于模块化编程要继续熟悉。
  • 相关阅读:
    hdu 1272 小希的迷宫
    hdu 1318 Palindromes
    ANR traces中内存占用情况解读
    请教会linux shell脚本的=~是什么意思?
    kernel struct definition location
    SecureCRT sysrq键设置
    sysrq
    Linux中断管理 (1)Linux中断管理机制【转】
    Linux suspend 流程介绍(2)之 freeze task
    Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)
  • 原文地址:https://www.cnblogs.com/kangzhijia/p/6492121.html
Copyright © 2020-2023  润新知