Skip to content

Latest commit

 

History

History
382 lines (378 loc) · 8.28 KB

四则运算2.md

File metadata and controls

382 lines (378 loc) · 8.28 KB

DianeBlue

//信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";

} } } }