博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件工程概论作业一
阅读量:6195 次
发布时间:2019-06-21

本文共 8127 字,大约阅读时间需要 27 分钟。

   随机生成四则运算式(整式和真分数式)

程序设计思想:

整数式:

利用Random类的nextInt()方法随机生成0-99之间的两个整数作为运算数,再利用nextInt()生成一个0-3的整数作为运算符(0代表加、1代表减、2代表乘、3代表除)

代码为:

x = rd.nextInt(100);    y = rd.nextInt(100);    z = rd.nextInt(4);//运算符

生成的运算式存储在一个字符串中,例如加法的

if(z == 0) {      t = "" + x + " + " + y  + "=" + (x + y);}

 

因为得数不能为负数和浮点数,所以要增加条件限制:

当运算符是减法(即z == 1)时,x 不能小于 y 

当运算符是除法(即z == 3)时,除数y不能是0,而且x 必须是y的倍数,

条件限制代码:

if(z == 0) {                    t = "" + x + " + " + y  + "=" + (x + y);                                    }else if(z == 1 && x >= y) {//减法                    t = "" + x + " - " + y  + "=" + (x - y);                                    }else if(z == 2) {                    t = "" + x + " * " + y  + "=" + (x * y);                                    }else{//除法                    if(y != 0){//除数不能是0                        if(x % y == 0)//必须能整除                            t = "" + x + " / " + y  + "=" + (x / y);                    }                }

因为不能出现重复的题目,所以要对生成的题目跟已生成的题目进行比较,如果重复则丢弃该题目,继续生成题目:

检验是否重复的代码:

if(buChong(jss,t,i)){    jss[i++] = t;}响应的buChong函数定义//检测是否重复(检测j是否与jss数组的前n个重复)重复返回FALSE 不重复返回TRUE    public static boolean buChong(String[] jss,String j,int n) {        for(int i = 0;i < n;i++) {            if(jss[i].equals(j)){                return false;            }        }        return true;    }

然后循环n次(n为出题数目)

 

真分数式:

真分数式与整数式设计思想相同,所不同的是限制条件多,随机生成真分数时,先生成两个整数a,b作为分母,

然后再生成两个整数作为分子,但是第一个整数要小于a,第二个整数要小于b,这样生成的四个整数组合起来就是两个真分数

条件限制:分母都不能为0,相加、相乘、相除的结果要小于1,相减不能出现负数。

并且每个分数都要进行约简

条件限制代码:

        if(y != 0){                    if(z == 0) {                        if((x * b + y * a) < (a * b))                            t = "" + yueJian(x, a) + " + " + yueJian(y, b) + "=" + yueJian((x * b + y * a), (a * b));                                        }else if(z == 1) {                        if((x * b - y * a) >= 0 && (x * b - y * a) < (a * b))                            t = "" + yueJian(x, a) + " - " + yueJian(y, b) + "=" + yueJian((x * b - y * a), (a * b));                                        }else if(z == 2) {                        if((x * y) < (a * b))                            t = "" + yueJian(x, a) + " * " + yueJian(y, b) + "=" + yueJian((x * y),(a * b));                                        }else{                        if((y / b) != 0){                            if((x * b) < (a * y))                                t = "" + yueJian(x, a) + " / " + yueJian(y, b) + "=" + yueJian((x * b),(a * y));                        }                    }         }

约简函数:

先找出分子和分母的最大公约数,然后分子和分母分别除以最大公约数

函数定义:

//约简分子分母,如果分子为0则返回0    public static String yueJian(int a,int b){                int y;        int ac = a,bc = b;        if(a == 0)            return "0";        while(a != b - a){            y = b - a;            if(a > y){                b = a;                a = y;            }else{                b = y;            }        }        y = a;        int z = ac / y;        int m = bc / y;        return "" + z + "/" + m;    }

程序总代码:

1 package zuoYe;  2   3 import java.util.Random;  4 import java.util.Scanner;  5   6 public class SiZeA {  7   8     public static void main(String[] args) {  9         // TODO Auto-generated method stub 10         int N; 11         Scanner scan = new Scanner(System.in); 12         System.out.println("请输入总数:"); 13         N = scan.nextInt(); 14         String[] jss = new String[N]; 15         System.out.println("1、整数计算式,2、真分数计算式"); 16         int p = scan.nextInt(); 17  18         if(p == 1) { 19             jss = createZhengShuJiSuanShi1(N); 20         }else { 21             jss = createZhenFenShuJiSuanShi(N); 22         } 23          24         //显示结果 25         int s = 0; 26         for(int i = 0;i < N;i++) { 27             String[] t = jss[i].split("="); 28             System.out.print((i + 1) + " : " + t[0] + "="); 29             String r = scan.next(); 30             if(r.equals(t[1])){ 31                 System.out.println("回答正确!"); 32                 s++; 33             }else{ 34                 System.out.println("回答错误!"); 35             } 36         } 37         scan.close(); 38         System.out.println("答题完成,共答题" + N + "个,正确" + s + "个,正确率:" + (s * 100 / N) + "%"); 39     } 40      41     //生成真分数计算式 42     public static String[] createZhenFenShuJiSuanShi(int n) { 43         int x,y,z,a,b,i = 0; 44         String[] jss = new String[n]; 45         String t = ""; 46         Random rd = new Random(); 47          48         while(i < n) { 49             a = rd.nextInt(100); 50             b = rd.nextInt(100); 51              52              53              54             if(a != 0 && b != 0){ 55                 x = rd.nextInt(a); 56                 y = rd.nextInt(b); 57                 z = rd.nextInt(4); 58                 t = ""; 59                 if(y != 0){ 60                     if(z == 0) { 61                         if((x * b + y * a) < (a * b)) 62                             t = "" + yueJian(x, a) + " + " + yueJian(y, b) + "=" + yueJian((x * b + y * a), (a * b)); 63                      64                     }else if(z == 1) { 65                         if((x * b - y * a) >= 0 && (x * b - y * a) < (a * b)) 66                             t = "" + yueJian(x, a) + " - " + yueJian(y, b) + "=" + yueJian((x * b - y * a), (a * b)); 67                      68                     }else if(z == 2) { 69                         if((x * y) < (a * b)) 70                             t = "" + yueJian(x, a) + " * " + yueJian(y, b) + "=" + yueJian((x * y),(a * b)); 71                      72                     }else{ 73                         if((y / b) != 0){ 74                             if((x * b) < (a * y)) 75                                 t = "" + yueJian(x, a) + " / " + yueJian(y, b) + "=" + yueJian((x * b),(a * y)); 76                         } 77                     } 78                     if((!t.equals("")) && buChong(jss,t,i)){ 79                         jss[i++] = t; 80                     } 81                 } 82             } 83         } 84         return jss; 85     } 86      87     //生成整数计算式 88     public static String[] createZhengShuJiSuanShi1(int n) { 89         int x,y,z,i = 0; 90         String[] jss = new String[n]; 91         String t = ""; 92         Random rd = new Random(); 93         while(i < n) { 94             x = rd.nextInt(100); 95             y = rd.nextInt(100); 96             z = rd.nextInt(4); 97              98                 if(z == 0) { 99                     t = "" + x + " + " + y  + "=" + (x + y);100                     101                 }else if(z == 1 && x >= y) {102                     t = "" + x + " - " + y  + "=" + (x - y);103                     104                 }else if(z == 2) {105                     t = "" + x + " * " + y  + "=" + (x * y);106                     107                 }else{108                     if(y != 0){109                         if(x % y == 0)110                             t = "" + x + " / " + y  + "=" + (x / y);111                     }112                 }113                 114                 if(buChong(jss,t,i)){115                     jss[i++] = t;116                 }117             118         }119         return jss;120     }121     122     123     //约简分子分母,如果分子为0则返回0124     public static String yueJian(int a,int b){125         126         int y;127         int ac = a,bc = b;128 129         if(a == 0)130             return "0";131         while(a != b - a){132             y = b - a;133             if(a > y){134                 b = a;135                 a = y;136             }else{137                 b = y;138             }139         }140         y = a;141         int z = ac / y;142         int m = bc / y;143         return "" + z + "/" + m;144     }145     146     //检测是否重复(检测j是否与jss数组的前n个重复)重复返回FALSE 不重复返回TRUE147     public static boolean buChong(String[] jss,String j,int n) {148         for(int i = 0;i < n;i++) {149             if(jss[i].equals(j)){150                 return false;151             }152         }153         return true;154     }155 156 157 158 }

运行结果截图:

 

 课上未完成原因:

  对程序的整体没有分析透彻,没有一个完整的逻辑思路,逻辑思路不清晰,程序结构没有分析清楚,打字慢。

转载于:https://www.cnblogs.com/liuxining/p/6492240.html

你可能感兴趣的文章
修改Xcode配置并支持iPhone上dylib工程 实例
查看>>
iphone-命令行编译--xcodebuild
查看>>
java keytool证书工具使用小结
查看>>
全新的PDO数据库操作类(仅适用Mysql)
查看>>
ImportError: No module named setuptools 解决方案
查看>>
Microsoft Team Foundation Server 2010 安装 序列号 注册码
查看>>
转 OFBiz安全组
查看>>
WMI服务故障,VBS脚本无法运行错误
查看>>
常见充值方式介绍及对比
查看>>
2012最新75款好看的英文字体免费下载【中篇】
查看>>
SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)
查看>>
Google Cloud Messaging for Android (GCM)已推出,将取代C2DM框架
查看>>
敏捷结果30天之第十二天:效率角色-你是启动者还是完成者
查看>>
第十八章 19 结构体与函数
查看>>
Sharepoint学习笔记—Site Definition系列--7、如何在Site Definition中引入Master Page (1、Master Page的引入)...
查看>>
VMware-workstation-full-9.0.0-812388+完美汉化补丁+有效密钥
查看>>
ActivityGroup 实现tabHost
查看>>
桌面应用程序员简单尝试Rich JavaScript Application
查看>>
SQL Server R2 地图报表制作(一)
查看>>
[转]信息系统项目管理师考试论文写作技巧
查看>>