标签:
一、设计思路
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