“四则运算2”分析报告
一、设计思路
初步设计思路:
1. 题目不重复先使用srand函数,生成两个做运算的随机数,再生成一个随机数,控制运算符号。
2. 是否有乘除法,数值范围,负数,余数,分数可以让用户选择。根据用户选择的结果,在每个函数之前根据用户的选择来执行不同的代码。
3. 把生成的每一个新的算式放在一起,每生成一个新的算式要验证是否与之前生成的算式重复,用字符串比如来做,如果重复就重新生成一个新的算式。
4. 打印只要用两个用户输入的变量就可以控制,一个控制打印的张数,一个控制打印每个式子的间距。
修改后设计思路:(修改了第2、3条)
1. 题目不重复先使用srand函数,生成两个做运算的随机数,再生成一个随机数,控制运算符号。
2. 是否有乘除法,数值范围,负数,余数,分数可以让用户选择。根据用户选择的结果,调用随机数生成函数,生成符合要求的随机数。
3. 为了避免算式重复,我定义了两个整型数组,一个字符数组。两个整型数组分别用来依次存放两个随机生成的数(a,b),字符数组用来依次存放每个式子的运算符号(+、-、*、/),每次输出生成算式的结果时,调用函数,验证当次生成的a,b两个随机数和符号是否完全一样,如果完全一样,则此次结果不保存在数组中,也不输出,在主函数中和for循环中加一次循环,新生成一个式子。
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;
}
三、运行结果截图
四、编程总结
这次的四则运算2其实算是对上一次四则运算1延伸,大体框架就是1,在加一些功能进去,就是2。
编完这个程序我发现,在编程序之前,一定要先有设计思路,在纸上要先写写画画,把大致的过程写出来,之后才能到电脑上编,如果直接上去就编,编着编着就乱套了,就不知道哪是哪了。
程序中的每一个功能,都可以用很多方法去实现,虽然结果都是一样的,但是在思维方面和借助的东西上就完全不一样,我觉得找对方法这一点就直接决定了程序的效率问题。所以在以后的学习中,一定要尽量找到最简便最有效率的方法去解决编程中出现的问题,避免不必要的麻烦。
以后我是想试着把这个做成一个小程序,比如手机app之类的东西,先多看一些书,然后慢慢来试试看吧。
五、时间记录日志