标签:
一、设计思路
1. 要求中不重复先使用srand函数,生成两个做运算的随机数,再生成一个随机数,控制运算符号。
2. 是否有乘除法,数值范围,负数,余数,分数可以让用户选择。根据用户选择的结果,在每个函数之前根据用户的选择来执行不同的代码。
3. 把生成的每一个新的算式放在一起,每生成一个新的算式要验证是否与之前生成的算式重复,用字符串比如来做,如果重复就重新生成一个新的算式。
4. 打印只要用两个用户输入的变量就可以控制,一个控制打印的张数,一个控制打印每个式子的间距。
二、源代码
#include<iostream> #include<time.h> #include<string> #define n 5 using namespace std; void display(int a,int b,char z,int &i,int d[],int e[],char f[]) //验证算式是否重复,输出函数 { int j,K=1; for(j=0;j<i;j++) if(a==d[j] && b==e[j] && z==f[j]) K=0; if(K!=0) { d[i]=a; e[i]=b; f[i]=z; if(b<0) cout<<a<<z<<"("<<b<<")="<<endl; else cout<<a<<z<<b<<"="<<endl; } else i=i-1; } void suiji(int &a,int &b,int &c,string s1,string s2,string s3) //s1 数值范围 s2 乘除法 s3 负数 { if(s1=="Y") { a=rand()%50; b=rand()%50; } else { a=rand(); b=rand(); } if(s2=="Y") c=rand()%4; else c=rand()%2; if(s3=="Y") { if(s1=="Y") { a=-rand()%76+25; b=-rand()%76+25; } else { a=rand()-rand(); b=rand()-rand(); } } } void main() //主程序 { int a,b,c,i; char z; int d[n]; int e[n]; char f[n]; string s1,s2,s3,s4; srand((int)time(0)); cout<<"---------------------------四则运算出题小程序-------------------------"<<endl; cout<<endl; cout<<"是否有负数?(Y or N)"<<endl; cin>>s3; cout<<"是否有乘除法?(Y or N)"<<endl; cin>>s2; cout<<"是否有数值范围?(Y or N)"<<endl; cin>>s1; cout<<"乘除法是否有余数?(Y or N)"<<endl; cin>>s4; for(i=0;i<n;i++) { suiji(a,b,c,s1,s2,s3); if(c==0) //加法 { z=‘+‘; if(b<0) display(a,b,z,i,d,e,f); else display(a,b,z,i,d,e,f); } if(c==1) //减法 { z=‘-‘; if(b<0) display(a,b,z,i,d,e,f); else display(a,b,z,i,d,e,f); } if(c==2) //乘法 { z=‘*‘; display(a,b,z,i,d,e,f); } if(c==3) { z=‘/‘; if(s4=="Y") display(a,b,z,i,d,e,f); else { int k; k=a%b; while(k!=0) { suiji(a,b,c,s1,s2,s3); k=a%b; } display(a,b,z,i,d,e,f); } } } //for循环 int x; cout<<"请输入打印张数:"<<endl; cin>>x; cout<<"已成功提交!"<<endl; }
三、程序截图
四、实验总结
程序中的每一个功能,都可以用很多方法去实现,虽然结果都是一样的,但是在思维方面和借助的东西上就完全不一样,我觉得找对方法这一点就直接决定了程序的效率问题。所以在以后的学习中,一定要尽量找到最简便最有效率的方法去解决编程中出现的问题,避免不必要的麻烦。
标签:
原文地址:http://www.cnblogs.com/licongzhuo/p/4529545.html