• 软件工程第一个程序:像阿超那样,花20分钟写一个能自动生成小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算。


    软件工程第一个程序:像阿超那样,花20分钟写一个能自动生成小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算。

    首先,阿超花20分钟干了什么呢:用编程的方法 完成了老师布置给家长的 每天出30道加减法题目给孩子做的 任务。那我们的任务就是还原阿超当时所写的小程序:出30道加减法题目,并追加一个功能:支持真分数。如此。

    需要注意的是阿超的儿子小学二年级,那小学二年级的数学作业是什么样的呢。图片来自天猫

    加法不过百,减法不变负,乘数除数不过十。

    先不考虑真分数,我们先还原阿超的小程序,去年暑假学的Java,那就用Java好了,新建个工程默认路径下再建个类,点自动生成主函数。先编写一个可以生成题目的函数,返回题目字符串。再编写另一个程序,调用生成题目的函数,并接收返回值,再以一定的格式输出。任务就完成了。

    首先,生成题目getQuestion()函数用到的核心语句,即Math.random():产生一个[0,1)之间的随机数。用1+(int)(Math.random()*100)得到100以内整数,随机出现加减乘除运算,用的也是这句Math.random()代码,既然是随机,那也是平均的。多少到多少定为加法,多少到多少定为减法,看需要。然后就是些细节了,如果加法的和大于100,两个加数均除2;减法的差小于0,则减数与被减数调换;乘法需要两个都为个数,对10取余数就行了;除法要除数为个位,并且不能为0,那就加10后再对10取余;最后把题目化为String类型返回。

    接着编写print30Questions()打印30道题函数,来个循环,像上边图片里似的一行打印仨,输出getQuestion()的返回值就行了。OK。

    最后在主方法里调用print30Questions()函数。看看结果还是可以的。代码如下:

    public class c30questions {
    
        public static void main(String[] args) {
    
            print30Questions();
        }
        
        private static void print30Questions() {
            //说明:打印30道题函数,把接收到的题目字符串按照指定格式输出。
            for (int i = 0; i < 10; i++) {
                System.out.print( i+1 );
                System.out.print("." + getQuestion() + "    ");
                System.out.print( i+11 );
                System.out.print("." + getQuestion() + "    ");
                System.out.print( i+21 );
                System.out.println("." + getQuestion());
            }
        }
    
        private static String getQuestion() {
            //说明:getQuestion()得到题目函数,随机生成题目,返回题目字符串。
            int t = 0;
            String strz = "";    
            
            int x=1+(int)(Math.random()*100);        
            int y=1+(int)(Math.random()*100);    
            int z=1+(int)(Math.random()*100);
            
            if( z<=25 ) {
                strz = "×";
                x = x % 10;
                y = y % 10;//两个各位数相成
            }
            if( z>25 && z<=50 ) {
                strz = "÷";
                y = ( y % 10 ) + 1;//除数不能为0是不是
            }
            if( z>50 && z<=75) {
                strz = "+";
                if ((x+y) > 100) {        
                    x = x / 2;
                    y = y / 2;//乘法相加结果不大于100
                }        
            }
            if( z>75 ) {
                strz = "-";
                if( x < y ){
                    t = y;
                    y = x;
                    x = t;//保证减法是大数减去小数
                }
            }            
            
            String strx = String.valueOf( x );
            String stry = String.valueOf( y );
    
            String ques = " " + strx + strz + stry + "=";
            
            if(ques.length()==5)ques = ques + " ";
            if(ques.length()==4)ques = ques + "  ";
            if(ques.length()==3)ques = ques + "   ";//保持格式
            
            return ques;
        }//getQuestion
    
    }

    输出的结果:

    再来看看追加功能:支持真分数。分子比分母小的分数,叫做真分数。阿超的儿子是小学二年级,分子和分母是个位就行了。然后注意除法时除数的分子不能为0。把getQuestion()改一下,重命名为getPfQuestion();代码如下:

        private static String getPfQuestion() {
            //说明:getPfQuestion()得到真分数题目函数,随机生成真分数题目,返回真分数题目字符串。
            int t = 0;
            String strz = "";    
            
            int x1=1+(int)(Math.random()*10);
            int x2=1+(int)(Math.random()*10);//分母
            
            int y1=1+(int)(Math.random()*10);
            int y2=1+(int)(Math.random()*10);//分母
            
            if( x2 <= x1 ){
                t = x2;
                x2 = x1;
                x1 = t;
                if( x1 == x2 ) {
                    x1 = x1 - 1;//保证分子比分母小
                }
            }
            
            if( y2 <= y1 ){
                t = y2;
                y2 = y1;
                y1 = t;
                if( y1 == y2 ) {
                    y1 = y1 - 1;//保证分子比分母小
                }
            }
            
            int z=1+(int)(Math.random()*100);
            
            if( z<=25 ) {
                strz = "×";
            }
            if( z>25 && z<=50 ) {
                strz = "÷";
                if( y1 == 0 )
                y1 = y1 + 1;//除数的分子不能为0是不是
            }
            if( z>50 && z<=75) {
                strz = "+";    
            }
            if( z>75 ) {
                strz = "-";
                if( x1/x2 > y1/y2 ) {
                    
                    t = x1;
                    x1 = y1;
                    y1 = t;
                    
                    t = x2;
                    x2 = y2;
                    y2 = t;//保证减法是大数减去小数
                }
            }            
            
            String strx1 = String.valueOf( x1 );
            String strx2 = String.valueOf( x2 );
            String stry1 = String.valueOf( y1 );
            String stry2 = String.valueOf( y2 );
    
            String ques = " " + strx1 + "/" + strx2 + strz + stry1 + "/" + stry2 + "=";
                
            return ques;
        }//getPfQuestion

    输出的结果:

     

                                                                                                                                                              J.X.Dinosaur

  • 相关阅读:
    PIL PNG格式通道问题的解决方法
    opencv-python 学习初探2 去图片水印
    Appium、selenium与Robot Framework
    性能监控0
    XML
    Python3 读取和写入excel
    Python识别字符型图片验证码
    python进程、线程、协程
    算法和程序
    Zigbee
  • 原文地址:https://www.cnblogs.com/duasonir/p/5246793.html
Copyright © 2020-2023  润新知