//信1301-2 20133056 吕兰兰 3月12 //对系统提出新的要求:1.题目避免重复;2.可定制;(数量/打印方式)3.可控制下列参数: 是否有乘除法;是否有括号; 数值范围;加减有无负数;除法有无余数; #include #include #include using namespace std; int main() { ofstream outfile("software.txt",ios::binary); int N;//定义输出的计算题的数目 int m,n;//控制数字的范围 cout<<"Input the scope(m>100,50>n>0):"; cin>>m; cin>>n; //输出不正确则退出 if(m<n) { exit(0); } if(n==0) { exit(0); } cout<<"Input the number of a array:"; cin>>N; int i,j;//控制循环次数 int figure=0;//控制右括号的输出 int array_a[10],array_b[10],array_c[10];//控制输入的每组式子中的数字个数 int random_a,random_b,random_c; int choose_a,choose_b,choose_c,choose_d,choose_e;//满足的每个条件 srand(time(0)); cout<<"Please choose the way of output(0 TXT,1 DOS):"; cin>>choose_e; cout<<"The bracket(0 NO,1 YES):"; cin>>choose_d; cout<<"The method of residual(0 NO,1 YES):"; cin>>choose_a; cout<<"The negative(0 NO,1 YES):"; cin>>choose_b; cout<<"The remainder(0 NO,1 YES):"; cin>>choose_c;
if(choose_e==1)//选择输出形式文件输出或是DOS 输出
{
for(int i=0;i<N;i++)
{
for(int j=0;j<5;j++)//每组输出的数量
{
array_a[j]=rand()%m+n;//随机产生的数字
array_b[j]=rand()%m+n;
if(choose_b==0)//如果没有负数
{
if(array_a[j]<array_b[j])//使每组array_a中的数对应都比array_b中的数都大;
{
int min;
min=array_a[j];
array_a[j]=array_b[j];
array_b[j]=min;
}
}
}
random_a=rand()%5+1;//每组数随机产生的数字个数,循环random_a-1次;
for(int j=0;j<random_a;j++)//控制输出的组数
{
if(choose_d==1)//如果有括号
{
random_c=rand()%2+1;//随机产生左括号
switch(random_c)
{
case 1:break;
case 2:{cout<<"(";figure=1;}break;
}
}
cout<<array_a[j];//输出每组array_a中的数
if(choose_a==0)//如果没有乘除法
{
random_b=rand()%2+1;//随机选择输出的只有两种运算符
}
else//如果有运算符随机产生的运算符有四种
{
random_b=rand()%4+1;//随机产生运算符
}
switch(random_b)
{
case 1:cout<<"+";break;
case 2:cout<<"-";break;
case 3:
{
if(choose_b==1)//结果可以为负数
{
cout<<"*";break;
}
else
{
cout<<"/";
if(choose_c==0)//如果没有余数就重新产生数组中的数,直到满足条件余数不为0为止
{
int remainder;
remainder=array_a[j]%array_b[j];
do
{
array_b[j]=rand()%m+n;
remainder=array_a[j]%array_b[j];
}while(remainder!=0);
}
break;
}
}
case 4:
{
if(choose_c==0)//如果没有余数就重新产生数组中的数,直到满足条件余数不为0为止
{
int remainder;
remainder=array_a[j]%array_b[j];
do
{
array_b[j]=rand()%m+n;
remainder=array_a[j]%array_b[j];
}while(remainder!=0);
cout<<"/";
}
else
{
cout<<"/";
}
break;
}
}
cout<<array_b[j];
random_c=rand()%random_a+1;//随机输出右括号
if((figure==1)&&(j==random_c))
{
cout<<")";
figure=0;
}
if(figure==1)
{
cout<<")";
figure=0;
}
if(j!=(random_a-1))//程序运行到倒数第二组数为止,最后一组数后不用再输出运算符
{
if(choose_a==0)//没有乘除法
{
if(choose_b==0)//没有负数
{
cout<<"+";
}
else
{
random_c=rand()%2+1;
switch(random_c)
{
case 1:cout<<"+";break;
case 2:cout<<"-";break;
}
}
}
else
{
if(choose_c==0)//没有余数
{
if(choose_b==1)//没有余数,有负数
{
random_c=rand()%3+1;
switch(random_c)
{
case 1:cout<<"+";break;
case 2:cout<<"-";break;
case 3:cout<<"*";break;
}
}
else//没有余数,没有负数
{
cout<<"+";
}
}
else//有余数
{
if(choose_b==0)//没有负数
{
random_c=rand()%2+1;
switch(random_c)
{
case 1:cout<<"+";break;
case 2:cout<<"/";break;
}
}
else//有负数
{
random_c=rand()%3+1;
switch(random_c)
{
case 1:cout<<"+";break;
case 2:cout<<"*";break;
case 3:cout<<"/";break;
}
}
}
}
}
}
cout<<"="<<endl<<endl;
} } else { if(!outfile)//如果文件不能打开 { cerr<<"open error!"<<endl; exit(0); } //输出到文件中 else { for(int i=0;i<N;i++)//输出到文件中输出数量 { for(int j=0;j<5;j++)//每组的个数 { array_a[j]=rand()%m+n; array_b[j]=rand()%m+n; if(choose_b==0)//结果没有负数 { if(array_a[j]<array_b[j])//使每组array_a中的数对应都比array_b中的数都大; { int min; min=array_a[j]; array_a[j]=array_b[j]; array_b[j]=min; } } } random_a=rand()%5+1;//每组数随机产生的数字个数,循环random_a-1次; for(int j=0;j<random_a;j++)//控制输出的组数 { if(choose_d==1)//有括号 { random_c=rand()%2+1; switch(random_c) { case 1:break; case 2:{outfile<<"(";figure=1;}break; } } outfile<<array_a[j];//输出每组array_a中的数 if(choose_a==0)//没有乘除运算 { random_b=rand()%2+1; } else//有乘除运算 { random_b=rand()%4+1;//随机产生运算符 } switch(random_b) { case 1:outfile<<"+";break; case 2:{outfile<<"-";}break; case 3: { if(choose_b==1) { outfile<<"*";break; } else { outfile<<"/"; if(choose_c==0)//如果没有余数就重新产生数组中的数,直到满足条件余数不为0为止 { int remainder; remainder=array_a[j]%array_b[j]; do { array_b[j]=rand()%m+n; remainder=array_a[j]%array_b[j]; }while(remainder!=0); } } }break; case 4: { if(choose_c==0)//如果没有余数就重新产生数组中的数,直到满足条件余数不为0为止 { int remainder; remainder=array_a[j]%array_b[j]; do { array_b[j]=rand()%m+n; remainder=array_a[j]%array_b[j]; }while(remainder!=0); outfile<<"/"; } else { outfile<<"/"; } }break; } outfile<<array_b[j]; random_c=rand()%random_a+1;//输出右括号 if((figure==1)&&(j==random_c)) { outfile<<")"; figure=0; } if(figure==1) { outfile<<")"; figure=0; }
if(j!=(random_a-1))//程序运行到倒数第二组数为止,最后一组数后不用再输出运算符
{
if(choose_a==0)//没有乘除法
{
if(choose_b==0)//没有负数
{
outfile<<"+";
}
else
{
random_c=rand()%2+1;
switch(random_c)
{
case 1:outfile<<"+";break;
case 2:outfile<<"-";break;
}
}
}
else
{
if(choose_c==0)//没有余数
{
if(choose_b==1)//没有余数,有负数
{
random_c=rand()%3+1;
switch(random_c)
{
case 1:outfile<<"+";break;
case 2:outfile<<"-";break;
case 3:outfile<<"*";break;
}
}
else//没有余数,没有负数
{
outfile<<"+";
}
}
else//有余数
{
if(choose_b==0)//没有负数
{
random_c=rand()%3+1;
switch(random_c)
{
case 1:outfile<<"+";break;
case 2:outfile<<"*";break;
case 3:outfile<<"/";break;
}
}
else//有负数
{
random_c=rand()%3+1;
switch(random_c)
{
case 1:outfile<<"+";break;
case 2:outfile<<"*";break;
case 3:outfile<<"/";break;
}
}
}
}
}
}
outfile<<"= ";
outfile<<"\r\n";
} } } }