软件工程概论-个人作业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.结果:

原文地址:https://www.cnblogs.com/yifengyifeng/p/6520270.html