题目:
写一个能自动生成三十道小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性)、题目避免重复、可定制出题的数量。
思路:首先,运用随机数程序生成1-100之间的随机数(int型),在方法中通过随机的方法确定这个数是否为分数:如果为分数,则产生两个随机数相除,为保证为真分数,在生成算式之前进行判断,如果分母小于分子,则分母等于分子+分母。再判断是否重复:定义一个String类型数组,将生成的算式保存,每次输出之前先验证是否存在,如果存在则不输出,不计数。
源程序:
import java.util.*;
public class Yunsuan01 {
@SuppressWarnings("resource")
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int num;
System.out.println("请输入需要生成的个数:");
num = sc.nextInt();
String[] s = new String[100];//保存已有的运算式
int ss = 0;//运算式个数计数
char[] ch = new char[4];
ch[0] = '+';
ch[1] = '-';
ch[2] = '*';
ch[3] = '/';
int a,b,a1,b1;
double A,B,A1,B1;
int k;
String str;
int flagA = 0,flagB = 0;//判断是否用真分数。
for(int i = 0;i < num;i ++)
{
flagA = SuiJileixing();
flagB = SuiJileixing();
if(flagA == 1 && flagB == 1)
{
a = SuiJi1();
b = SuiJi1();
k = SuiJiyunsuanfu();
str = a + " " + ch[k] + " " + b + " = ";
if(Check(s,str,ss) != 1)
{
s[ss] = str;
System.out.print(s[ss]);
A = (double)a;
B = (double)b;
show(A,B,k);
ss ++;
}
}
else if(flagA == 1 && flagB == 0)
{
a = SuiJi1();
b = SuiJi1();
b1 = SuiJi1() + 1;
if(b < b1)
{
b = b;
}
else
{
b1 = b1 + b;
}
k = SuiJiyunsuanfu();
str = a + " " + ch[k] + " (" + b + "/" + b1 + ") = ";
if(Check(s,str,ss) != 1)
{
s[ss] = str;
System.out.print(s[ss]);
A = (double)a;
B = (double)b;
B1 = (double)b1;
show(A,B/B1,k);
ss ++;
}
}
else if(flagA == 0 && flagB == 1)
{
a = SuiJi1();
a1 = SuiJi1() + 1;
b = SuiJi1();
if(a > a1)
{
a1 = a + a1;
}
k = SuiJiyunsuanfu();
str = "(" + a + "/" + a1 + ") " + ch[k] + " " + b + " = ";
if(Check(s,str,ss) != 1)
{
s[ss] = str;
System.out.print(s[ss]);
A = (double)a;
A1 = (double)a1;
B = (double)b;
show(A/A1,B,k);
ss ++;
}
}
else
{
a = SuiJi1();
a1 = SuiJi1() + 1;
b = SuiJi1();
b1 = SuiJi1() + 1;
if(a > a1)
{
a1 = a + a1;
}
if(b > b1)
{
b1 = b + b1;
}
k = SuiJiyunsuanfu();
str = "(" + a + "/" + a1 + ") " + ch[k] + " " + b + "/" + b1 + " = ";
if(Check(s,str,ss) != 1)
{
s[ss] = str;
System.out.print(s[ss]);
A = (double)a;
A1 = (double)a1;
B = (double)b;
B1 = (double)b1;
show(a/a1,b/b1,k);
ss ++;
}
}
}
}
public static int SuiJi1()
{
int a;
a = (int)(Math.random()*100);
return a;
}
public static int SuiJiyunsuanfu()
{
int a;
a = (int) (Math.random()*4);
return a;
}
public static int Check(String s[],String str,int ss)
{
int qqq = 0;
for(int i = 0;i < ss;i ++)
{
if(str.equals(s[ss]))
{
qqq = 1;
break;
}
}
return qqq;
}
public static int SuiJileixing()
{
int flag = (int)(Math.random()*2);
return flag;
}
public static void show(double a,double b,int k)
{
if(k == 0)
{
System.out.println(a + b);
}
if(k == 1)
{
System.out.println(a - b);
}
if(k == 2)
{
System.out.println(a * b);
}
if(k == 3)
{
System.out.println(a / b);
}
}
}
程序运行结果: