设计四则运算:
1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数: 是否有乘除法、数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …);
思路:
1.题目避免重复:随机产生三个数m,n,k,k用来判断是哪种运算,先判断是否重复(m,n,k同时进行判断),如果与前面的题目不重复就输出题目,将三个数都输入数组内,T用作记录存入题目个数,存入一个+1
2.I表示总题目数,J表示每页输出题目数
3.通过输入1 0决定是否有乘除法、数值范围、加减有无负数、除法有无余数,如果不满足要求就i-1进入下个i++循环
程序:
#include<iostream> #define N 100 //控制在0-100之内 using namespace std; void main() { cout<<"欢迎来做四则运算!"<<endl<<endl; double m,n,m1=0,n1=0,a[100000]; //m1,n1用于分数时 int k,I,J,j=0,page=1,T=0; //i,j是总题数和每页题数,一个T说明存入了一个题目 cout<<"请输入你想输出的总题数和每页的题数:"<<endl; cin>>I>>J; cout<<"——————1.是否有乘除法?——————"<<endl; cout<<"——————2.加减是否有负数?——————"<<endl; cout<<"——————3.除法是否有小数?——————"<<endl; cout<<"——————4.是否支持分数?——————"<<endl; cout<<"——————有输入1,没有输入0,请依次输入:"<<endl; int chengchu,fushu,xiaoshu,fenshu; cin>>chengchu>>fushu>>xiaoshu>>fenshu; cout<<endl; for(int i=0;i<I;i++) { int t=0; if(j==J) //每页限定题数 { cout<<endl<<endl<<endl<<endl; j=0; //下一页题数置为0 page++; } if(j==0) cout<<"第"<<page<<"页:"<<endl; m=rand()%N; //rand()随机产生一个数,范围在0-N之间 n=rand()%N; do { m1=rand()%N; n1=rand()%N; }while(m1==0 || n1==0); int m_int=(int)m , n_int=(int)n; k=rand()%4; if(T!=0) for(int t=0;t<T;t++) if(m==a[3*t] && k==a[3*t+1] && n==a[3*t+2]) {t=1; break;} if(t==1) {i--; continue;} //有相同题目产生 if(chengchu==0 && (k==2 || k==3)) {i--; continue;} //控制有无乘除法 if(fushu==0 && (m<0 || n<0)) {i--; continue;} //控制有无负数 if(k==3 && xiaoshu==0 && ( (m-m_int)!=0 || (n-n_int)!=0 )) {i--; continue;} //除法是否有小数 switch(k) { case 0: { if(j==1 && fushu==1) cout<<"("<<j+1<<") (-"<<m<<")+(-"<<n<<")="<<endl; else if(j==3 && fenshu==1) cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" + "<<n<<"/"<<n1<<" ="<<endl; else cout<<"("<<j+1<<") "<<m<<"+"<<n<<"="<<endl; a[3*T]=m; a[3*T+1]=k; a[3*T+2]=n; //将题目存入数组中 j++; T++; break; } //需要中括号吗?还要break? case 1: { if(j==1 && fushu==1) cout<<"("<<j+1<<") (-"<<m<<")-(-"<<n<<")="<<endl; else if(j==3 && fenshu==1) cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" - "<<n<<"/"<<n1<<" ="<<endl; else cout<<"("<<j+1<<") "<<m<<"-"<<n<<"="<<endl; a[3*T]=m; a[3*T+1]=k; a[3*T+2]=n; j++; T++; break; } case 2: { if(j==2 && xiaoshu==1) cout<<"("<<j+1<<") "<<m/10<<"*"<<n/10<<"="<<endl; else if(j==3 && fenshu==1) cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" * "<<n<<"/"<<n1<<" ="<<endl; else cout<<"("<<j+1<<") "<<m<<"*"<<n<<"="<<endl; a[3*T]=m; a[3*T+1]=k; a[3*T+2]=n; j++; T++; break; } case 3: { if(n!=0) { if(j==2 && xiaoshu==1) cout<<"("<<j+1<<") "<<m/10<<"/"<<n/10<<"="<<endl; else if(j==3 && fenshu==1) cout<<"("<<j+1<<") "<<m<<"/"<<m1<<" / "<<n<<"/"<<n1<<" ="<<endl; else cout<<"("<<j+1<<") "<<m<<"/"<<n<<"="<<endl; a[3*T]=m; a[3*T+1]=k; a[3*T+2]=n; j++; T++; } else i--; } } } }
截图: