zoukankan      html  css  js  c++  java
  • 软件工程概论-个人作业02

    1.要求:写一个能自动生成三十道小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算、题目避免重复、可定制出题的数量。

    2.思路:

      1)产生随机数choose,1或2,1表示生成整数表达式,2表示生成分数表达式,并用一个字符串数组存储表达式便于打印输出(长度由用户输入);

      2)用一个字符数组存储“+ - * ÷”等符号,取符号则生成随机数0-3;

      3)若choose为1,random生成两个整数作为表达式的左操作数和右操作数,并随机产生操作符;

      4)若choose为2,random生成四个整数分别作为左操作数的分子分母和右操作数的分子分母;

      5)用两个函数对生成的分数约分;

      6)调用System.out.println()函数打印,用PrintWriter和FileWriter将生成的表达式数组写入文件;

    3.代码:

    import java.util.*;
    import java.io.*;
    public class MathHomework {
        public static int choose;
        public static int randomArr[]=new int[2];
        public static Random ran=new Random();
        public static char randomCh[]={'+','-','*','÷','/'};
        public static String formula[];
        @SuppressWarnings({ "unused", "resource" })
        public static void main(String[] args) throws IOException{
            String fileName="homework.txt";
            Scanner in=new Scanner(System.in);
            FileWriter fw=new FileWriter(fileName);
            PrintWriter out=new PrintWriter(fw);
            if(fw==null){
                System.out.println("文件打开失败!");
            }
            
            int number;
            System.out.println("题目个数:");
            number=in.nextInt();
            formula=new String[number];
            for(int i=0;i<number;i++){
                choose=ran.nextInt(2)+1;
                formula[i]=creaFormula(choose);
                if(formula[i]==null)
                    i--;
            }
            showFormula(formula);
            //写入文件
            int len=formula.length;
            for(int i=0;i<len;i++){
                out.println("No."+(i+1)+": "+formula[i]);
                
            }
            fw.close();
            out.close();
        }
        public static String creaFormula(int x){
            if(x==1){
                String s="";
                randomNums(randomArr);
                int k=ran.nextInt(4);
                s=s+randomArr[0]+randomCh[k]+randomArr[1]+"=";
                return s;
                
            }
            else if(x==2){
                String s="";
                randomNums(randomArr);
                fun1(randomArr);
                
                s=s+"("+randomArr[0]+"/"+randomArr[1]+")";
                randomNums(randomArr);
                fun1(randomArr);
                int k=ran.nextInt(4);
                s=s+randomCh[k]+"("+randomArr[0]+"/"+randomArr[1]+")"+"=";
                return s;
            }
            else
                return null;
            
        }
        public static void showFormula(String s[]){
            int len=s.length;
            for(int i=0;i<len;i++){
                System.out.println("No."+(i+1)+": "+s[i]);
                
            }
        }
        //约分函数
        public static void fun1(int x[]){
            int k=fun2(x[0],x[1]);
            x[0]=x[0]/k;
            x[1]=x[1]/k;
        }
        //求分子分母最大公约数
        public static int fun2(int x,int y){
            int min,i;
            if(x>y) min=x;
            else
                min=y;
            for(i=min;i>=1;i--){
                if(x%i==0&&y%i==0){
                    break;
                }
            }
            return i;
        }
    
        public static void randomNums(int x[]){
            x[0]=ran.nextInt(20)+1;
            x[1]=ran.nextInt(20)+1;
        }
    }

    4.结果:

  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/yifengyifeng/p/6520270.html
Copyright © 2011-2022 走看看