1》题目要求:
可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:
1、题目避免重复;
2、可定制(数量/打印方式);
3、可以控制下列参数:
*是否有乘除法;
*是否有括号(最多可以支持十个数参与计算);
*数值范围;
*加减有无负数;
*除法有无余数!
2》设计思想:
这次编程主要是在上一次的基础之上,作进一步的要求,然后实现不同方式的输出。
1)题目避免重复的实现:先定义三个数组,然后再循环时将产生的运算符和两个运算数(随机产生的三个数)存入数组,每进行一次循环,就将数组中的数和前面的相比,如果两个运算符和运算数都和前面某一组数相等,那么重新产生一组随机数,实现避免重复。
2)可定制的实现:打印数量,就是输入一个数,然后进行该数次循环,然后输出。打印方式主要是可以在屏幕上输出,也可以实现输出到一个记事本文件中,这用到了输入输出流 的知识。
3)1.是否有乘除法,用if语句实现,如果有乘除法,则进一步选择是否有余数,我的程序是对有余数的选择直接输出,如果没有余数,就是被除数减去余数在输出。
2.数值范围:可以定义一个数s,用随机数rand()%s 就是产生1~s的随机数。
3.加减法无负数,就是保证后一个数比前一个数大,有负数,在其中加入负号。
ps:是否括号功能较难,暂时还未实现
源代码:
//四则运算2
//2016 3 14 Sunzhe
#include<fstream>
#include<iostream>
using namespace std;
void chengchufa(int m,int s)
{
int v;
int j[100],k[100],l[100];//用于检查重复的数组
cout<<"请输入选择:1.有余数 2.无余数:"<<endl;
cin>>v;
for(int i=0;i<m;i++)
{
int n=rand()%4; //产生随机数,运算符
int a=rand()%s;//产生1~s随机数
int b=rand()%s;//产生1~s随机数
j[i]=n;
k[i]=a;
l[i]=b;
for(int r=i-1;r>=0;r--)//向前检查重复,如果重复则重新生成
{
if(j[r]==j[i]&&k[r]==k[i]&&l[r]==l[i])
{
int n=rand()%4; //产生随机数,运算符
int a=rand()%s;//产生1~s随机数
int b=rand()%s;//产生1~s随机数
}
}
if(n==0)
{
cout<<a<<"+"<<b<<"="<<endl;
}
else if(n==1){
cout<<a<<"-"<<b<<"="<<endl;
}
else if(n==2){
cout<<a<<"*"<<b<<"="<<endl;
}
else{
if(a<b)//实现被除数比除数大
{
int w;
w=a;
a=b;
b=w;
}
if(b==0)
{
b++;
}
if(v==1)//有余数
{
cout<<a<<"/"<<b<<"="<<endl;
}
if(v==2)
{
a=a-a%b;
cout<<a<<"/"<<b<<"="<<endl;
}
}
}
}
void jiajianfa(int m,int s){
int u;
int j[100],k[100],l[100];//用于检查重复的数组
cout<<"请输入选择:1有负数 2无负数"<<endl;
cin>>u;
for(int i=0;i<m;i++)
{
int n=rand() %2;//产生随机数,运算符的
int a=rand()%s;//产生1~s随机数
int b=rand()%s;//产生1~s随机数
j[i]=n;
k[i]=a;
l[i]=b;
for(int r=i-1;r>=0;r--)
{
if(j[r]==j[i]&&k[r]==k[i]&&l[r]==l[i])
{
int n=rand()%4; //产生随机数,运算符
int a=rand()%s;//产生1~s随机数
int b=rand()%s;//产生1~s随机数
}
}
if(u==1) //有负数
{
if(n==0)
{
cout<<"(-"<<a<<")+"<<b<<"="<<endl;
}
else
{
cout<<a<<"-"<<b<<"="<<endl;
}
}
if(u==2)//无负数
{
if(a<b)//实现减法无负数
{
int w;
w=a;
a=b;
b=w;
}
if(n==0)
{
cout<<a<<"+"<<b<<"="<<endl;
}
else
{
cout<<a<<"-"<<b<<"="<<endl;
}
}
}
}
void dayinfangshi(int m,int s){
int t;
cout<<"请输入选择1.在屏幕输出2.在文件输出"<<endl;
cin>>t;
if(t==1)
{
for(int i=0;i<m;i++)
{
int n=rand()%4; //产生随机数,运算符
int a=rand()%s;//产生1~s随机数
int b=rand()%s;//产生1~s随机数
if(n==0){
cout<<a<<"+"<<b<<"="<<endl;
}
else if(n==1){
cout<<a<<"-"<<b<<"="<<endl;
}
else if(n==2){
cout<<a<<"*"<<b<<"="<<endl;
}
else{
if(a<b)//实现被除数比除数大
{
int w;
w=a;
a=b;
b=w;
}
if(b==0)
{
b++;
}
cout<<a<<"/"<<b<<"="<<endl;
}
}
}
if(t==2)
{
ofstream outfile("f1.dat",ios::out);//定义文件流对象,打开磁盘文件f1.dat
if(! outfile) //如果打开失败返回0值
{
cerr<<"open error!"<<endl;
exit(1);
}
for(int i=0;i<m;i++)
{
int n=rand()%4; //产生随机数,运算符
int a=rand()%s;//产生1~s随机数
int b=rand()%s;//产生1~s随机数
if(n==0){
outfile<<a<<"+"<<b<<"="<<endl;
}
else if(n==1){
outfile<<a<<"-"<<b<<"="<<endl;
}
else if(n==2){
outfile<<a<<"*"<<b<<"="<<endl;
}
else{
if(a<b)//实现被除数比除数大
{
int w;
w=a;
a=b;
b=w;
}
if(b==0)
{
b++;
}
outfile<<a<<"/"<<b<<"="<<endl;
}
}
outfile.close();
}
}
void main()
{
int x;//进行选择的数
q:cout<<"请选择要进行的运算:1.整数运算 2.真分数运算 3.退出程序"<<endl;
cin>>x;
switch(x)
{
case 1://进行整数的运算
{
int m;//题目的数量
cout<<"请输入想打印的数量:"<<endl;
cin>>m;
int s;//数值范围
cout<<"请输入想要计算的数值范围(1~ 你输入的数):"<<endl;
cin>>s;
int t;
cout<<"请输入选择:"<<endl;
cout<<"1.有乘除法"<<endl;
cout<<"2.无乘除法"<<endl;
cout<<"3.打印方式"<<endl;
cin>>t;
if(t==1){//有乘除法
chengchufa(m,s);
}
if(t==2)//无乘除法
{
jiajianfa(m,s);
}
if(t==3)
{
dayinfangshi(m,s);
}
goto q;
}
case 2:
{
for(int i=0;i<30;i++)
{
int c=rand()%100;//产生1~100随机数
int d=rand()%100;//产生1~100随机数
int e=rand()%100;//产生1~100随机数
int f=rand()%100;//产生1~100随机数
//保证为真分数
if(c>d)
{
int t;
t=d;
d=c;
c=t;
}
if(e>f)
{
int s;
s=f;
f=e;
e=s;
}
if(d==0){d++;} //分母不为零
if(f==0){f++;} //分母不为零
//约分化为最简
for(int a=c;a>0;a-- )
{
if(c%a==0&&d%a==0)
{
c=c/a;
d=d/a;
break;
}
}
for(int b=e;b>0;b-- )
{
if(e%b==0&&f%b==0)
{
e=e/b;
f=f/b;
break;
}
}
int n=rand() %4; //产生运算符的随机数
if(n==0){
cout<<c<<"/"<<d<<"+"<<e<<"/"<<f<<"="<<endl;
}
else if(n==1){
cout<<c<<"/"<<d<<"-"<<e<<"/"<<f<<"="<<endl;
}
else if(n==2){
cout<<c<<"/"<<d<<"*("<<e<<"/"<<f<<")="<<endl;
}
else
{
cout<<c<<"/"<<d<<"/("<<e<<"/"<<f<<")="<<endl;
}
}
goto q;
}
case 3:
{
exit(0);
}
}
}
3》运行结果截图: