一,问题描述:
要求:
1、题目避免重复
2、可定制(数量/打印方式)
3、可以控制下列参数:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数(真分数假分数),
是否支持小数(精确到多少位),打印中每行的间隔。
二,设计思路
1,题目避免重复:
采用srand(time(NULL))实现
2,可定制:
a)定制数量:定义变量n,用户可以自己设置
b)打印方式:可以自己选择每行可以打印几个
3,可控制参数:
a)是否支持乘除:编写了两个函数,一个有乘除,一个没有乘除,在主函数里设置判断语句用户自己选择,然后调用相应的函数。
b)加减有无负数:设置判断语句,有负数为0,无负数为1.
c)除法有无余数:在有乘除的函数里设置条件语句,0为有余数,1为无余数,如果用户选择与随机产生的不一致,则再随机取一个被除数。
d)打印中每行的间隔:只要再换行时用一个循环语句,循环输出endl即可
三,缺陷及问题
由于能力有限是否有括号,是否支持分数,是否支持小数等功能没有实现
四、源程序
#include<iostream>
#include<stdlib.h>
using namespace std;
#include<time.h>
char get_oper(int n)
{
switch(n)
{
case 0:return '+';
case 1:return '-';
case 2:return '*';
case 3:return '/';
}
}
int main()
{
srand(time(NULL));
int num1=0;
int num2=0;
int operators=0;
int cpl; //定义每行输出题目个数
int range; //定义数值范围
int answer; //定义计算结果
int num; //定义题目个数
int JG; //定义每行间隔
char m; //是否有乘除法
char n; //加减有无负数
cout<<"请输入输出题目个数:";
cin>>num;
cout<<"请输入数值范围:";
cin>>range;
cout<<"请输入每行题目个数:";
cin>>cpl;
cout<<"请输入每行间隔:";
cin>>JG;
cout<<"是否有乘除法(Y/N)?";
cin>>m;
cout<<"是否有负数(Y/N)?";
cin>>n;
for(int i=1;i<=num;i++)
{
//随机产生运算的数和运算符。
num1=rand()%range;
num2=rand()%range;
if(m=='Y')
{
operators=rand()%4;
switch(operators)
{
case 0:answer=num1+num2;break;
case 1:answer=num1-num2;break;
case 2:answer=num1*num2;break;
case 3:answer=num1/num2;
}
}
else if(m=='N')
{
operators=rand()%2;
switch(operators)
{
case 0:answer=num1+num2;break;
case 1:answer=num1-num2;break;
}
}
if(answer<range)
{
if(n=='Y')
{
cout<<num1<<get_oper(operators)<<num2<<"=";
for(int j=0;j<=JG;j++)
cout<<" ";
cout<<" ";
if(i%cpl==0)
{
cout<<endl;
}
}
else if(n=='N')
{
i--;
}
}
else
{
i--;
}
}
return 0;
}
五、调试截图
六、实验感想
通过本次实验又学到了一些对于我来说新的知识,比如srand(time(NULL)),避免重复最开始想到的是最笨的思路,但是思路越简单实现就越难,自己没办法实现,后来了解到可以用srand()实现,又积累了一些编程知识,由于个人编程基础不足,所以部分功能没有实现,通过以后的学习还会回来慢慢改进该程序。