软件工程概论-作业02
Posted 遗风遗风丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程概论-作业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.结果:
以上是关于软件工程概论-作业02的主要内容,如果未能解决你的问题,请参考以下文章