标签:
一、设计思路:定义x,y,利用随机数产生函数rand()%m+1产生在数值范围中的两个数x,y,并且通过产生1-4的随机数控制四则运算的符号和是否产生乘除法
1、避免重复:定义数组,将输出的结果存在数组中,通过比较输出结果与数组中的变量是否重复,避免输出结果的重复。
2、可定制:定义一个变量i,输入i的数值控制出题的数量,然后通过i控制循环次数输出。
定义变量来控制题目是按行输出还是按列输出。
3、控制参数:通过产生随机数的范围是1-2还是1-4控制是否输入乘除法。
通过改变m的值控制数的范围。
产生1-2的随机数来控制x,y的正负,决定加减法是否有负数。
如果输出的是除法,通过求余运算判断是否有余数,从而决定是否输出。
如果支持分数,输出随机数的倒数支持分数。
二、代码
#include<iostream>
using namespace std;
void create(int t,int &m,int &n,int &l,char x,char y,char z)
{
int v;
m=rand()%t+1;
n=rand()%t+1;
if(x==‘y‘)
{
l=rand()%4;
}
else
{
l=rand()%2;
}
if(z==‘n‘)
{
while(m%n!=0)
{
m=rand()%t+1;
n=rand()%t+1;
}
}
if((l==0||l==1)&&y==‘y‘)
{
v=rand()%2;
if(v==0)
{
m=0-m;
}
}
}
void main()
{
int i,j,m,n,l,s,t,u;
char x,y,z,w;
cout<<"请输入出题的数量:";
cin>>s;
cout<<"请输入取值上限(大于0):";
cin>>t;
cout<<"请输入是否有乘除法(y为是,n为否):";
cin>>x;
cout<<"请输入加减法是否有负数(y为是,n为否):";
cin>>y;
if(x==‘y‘)
{
cout<<"请输入除法是否有余数(y为是,n为否):";
cin>>z;
}
else
{
z=NULL;
}
cout<<"请输入是否有分数(y为是,n为否):";
cin>>w;
cout<<"请输入打印方式(1为按行输出,2为按列输出):";
cin>>u;
int *a=new int[s];
int *b=new int[s];
int *c=new int[s];
create(t,m,n,l,x,y,z);
for(i=0;i<s;i++)
{
for(j=0;j<i;j++)
{
if(a[j]==m&&b[j]==n&&c[j]==l)
{
create(t,m,n,l,x,y,z);
j=-1;
}
}
a[i]=m;
b[i]=n;
c[i]=l;
if(w==‘y‘&&i%2==0)
{
if(l==0)
{
cout<<"1/"<<m<<"+"<<n<<"="<<" ";
}
if(l==1)
{
cout<<"1/"<<m<<"-"<<n<<"="<<" ";
}
if(l==2)
{
cout<<"1/"<<m<<"*"<<n<<"="<<" ";
}
if(l==3)
{
cout<<"1/"<<m<<"/"<<n<<"="<<" ";
}
}
else
{
if(l==0)
{
cout<<m<<"+"<<n<<"="<<" ";
}
if(l==1)
{
cout<<m<<"-"<<n<<"="<<" ";
}
if(l==2)
{
cout<<m<<"*"<<n<<"="<<" ";
}
if(l==3)
{
cout<<m<<"/"<<n<<"="<<" ";
}
}
if(u==2)
{
cout<<endl;
}
}
}
三、实验截图
四、总结
写程序之前对程序思路进行了设计,但实际过程中与思路相差甚远,主要有两个方面。一、是由于实现的功能较多,经常要进行验证和重新生成,比较繁琐,所以将程序分成了主函数和其他函数,使程序比较清晰易懂。二、在支持分数的过程中,并不像想象的那么简单,所以最终通过输出随机数的倒数不太完美实现了这个功能。
具体程序中出现的错误也主要有两方面。一是语法上出现的,忘记了输入分号或者其他符号,最终完美解决。二是由于未在前面声明函数,导致函数在主函数中不能调用,最后将函数放在主函数前面,从而解决了问题。
五、记录表
学生______郭昊 日期 2015年3月19日
教师 王建民 课程 软件工程概论
标签:
原文地址:http://www.cnblogs.com/act-gh95/p/4351216.html