标签:
一.设计思路:
1 题目避免重复:建立两个数组,rand()函数确定随机数,将这两个数加入两个数组,重复确定随机数,判断这两个数是否与两个数组的数值相同以避免重复,无重复则输出题目。
2 可定制(数量/打印方式):数量和打印方式用宏定义确定输出几行与几列。
3 是否有乘除法:定义一个四则运算符的数组,前两个表示加减,后两个表示乘除,用随机数范围来确定有无乘除。
4 数值范围:rand()函数可确定数值范围。
5 if else语句来判断加减有无负数与除法有无余数。
二.代码实现:
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int m,n,min,max,g,s,l; //m为题目数量,n为打印方式,min数值范围下界,max为数值范围上界
int a1,a2,a3,i,j,t,a[10000],b[10000];
cout<<"请输入题目数量和打印方式:"<<endl; //打印方式即多少题一组
cin>>m>>n;
cout<<"请输入数值范围:"<<endl;
cin>>min>>max;
if(min>max)
{
g=min;
min=max;
max=g;
}
s=max-min+1;
cout<<"有无乘除法?(1/0)"<<endl;
cin>>a1;
cout<<"加减有无负数?(1/0)"<<endl;
cin>>a2;
if(a1==1)
{
cout<<"乘除有无余数?(1/0)"<<endl;
cin>>a3;
}
cout<<endl;
for(i=1;i<=m;i++)
{
a[i]=min+rand()%s;
b[i]=min+rand()%s;
for(j=0;j<i;j++) //判断重复
{
while(a[j]==a[i]&&b[j]==b[i])
{
a[i]=min+rand()%s;
b[i]=min+rand()%s;
}
}
}
for(i=1;i<=m;i++)
{
if(a1==0)
{
t=rand()%2;
if(a2==0)
{
if(t==0) cout<<a[i]<<"+"<<b[i];
if(t==1)
{
if(a[i]>b[i]) cout<<a[i]<<"-"<<b[i];
else cout<<b[i]<<"-"<<a[i];
}
}
if(a2==1)
{
l=rand()%3;
if(l==0) a[i]=a[i]*-1;
if(l==1) b[i]=b[i]*-1;
if(l==2) a[i]=a[i]*-1,b[i]=b[i]*-1;
if(t==0) cout<<a[i]<<"+"<<b[i];
if(t==1) cout<<a[i]<<"-"<<b[i];
}
}
if(a1=1)
{
t=rand()%4;
if(a2==0)
{
if(t==0) cout<<a[i]<<"+"<<b[i];
if(t==1)
{
if(a[i]>b[i]) cout<<a[i]<<"-"<<b[i];
else cout<<b[i]<<"-"<<a[i];
}
if(t==2) cout<<a[i]<<"*"<<b[i];
if(t==3)
{
while(b[i]==0) {b[i]=min+rand()%s;}
if(a3==1)
{
while(a[i]%b[i]==0) {b[i]=min+rand()%s,a[i]=min+rand()%s;}
cout<<a[i]<<"/"<<b[i];
}
if(a3==0)
{
while(a[i]%b[i]!=0) {b[i]=min+rand()%s,a[i]=min+rand()%s;}
cout<<a[i]<<"/"<<b[i];
}
}
}
if(a2==1)
{
l=rand()%4;
if(l==0) a[i]=a[i]*-1;
if(l==1) b[i]=b[i]*-1;
if(l==2) a[i]=a[i]*-1,b[i]=b[i]*-1;
if(t==0) cout<<a[i]<<"+"<<b[i];
if(t==1) cout<<a[i]<<"-"<<b[i];
if(t==2) cout<<a[i]<<"*"<<b[i];
if(t==3)
{
while(b[i]==0) {b[i]=min+rand()%s;}
if(a3==1)
{
while(a[i]%b[i]==0) {b[i]=min+rand()%s,a[i]=min+rand()%s;}
cout<<a[i]<<"/"<<b[i];
}
if(a3==0)
{
while(a[i]%b[i]!=0) {b[i]=min+rand()%s,a[i]=min+rand()%s;}
cout<<a[i]<<"/"<<b[i];
}
}
}
}
cout<<"="<<endl;
if(i%n==0) cout<<endl;
}
}
三.截图:
四.总结:
这个问题有两个难点,即避免题目重复和条件判断是否有乘法,加减有无负数,除法有无余数等。避免数的重复,可随即取两个随机数放入两个数组中,每当取随机数时可与数组中的数比较,如果重复则取随机数,直到不满足重复条件,跳出循环。设置变量分别表示有无乘除法,有无负数和有无乘除法,分别用if语句嵌套判断是否符合条件。总体来说,先取两个不重复的随机数,然后分别根据各个变量的值来决定输出题目。
五.时间记录日志
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/14 | 8:00 | 9:40 | 10 | 100 | 设计 | 思考设计思路 |
15:20 | 16:10 | 50 | 编程 | 实现题目不重复 | ||
3/15 | 9:10 | 9:35 | 25 | 思考讨论 | 如何嵌套条件判断 | |
9:30 | 10:25 | 5 | 55 | 编程 | 实现条件判断 | |
3/16 | 17:10 | 18:23 | 73 | 编程 | 实现输出打印方式 | |
3/18 | 10:20 | 11:20 | 10 | 60 | 写实验报告 | 总结和反思 |
标签:
原文地址:http://www.cnblogs.com/houtaoliang/p/4346683.html