《四则运算2》
《四则运算2》
设计思想:根据题目意思分析出系统需要实现以下几种情况:实现加减乘除四种运算方法的混合,允许负数的加减运算,允许除法有余数,支持真分数,支持假分数以及剩下的系统默认功种情况:
(1)实现四种运算方法的混合,则要考虑数据的类型即整型和浮点型;
(2)允许负数的加减运算,则要考虑到运算方式即加减混合及乘除混合;
(3)允许除法有余数,则亦需考虑数据的类型;
(4)支持真假分数,则要考虑运算方式的种类:加减,乘除,加减乘除的混合类型;
(5)系统的默认情况则是考虑综合了特别要求之外的需求;
(6)为了避免题目的重复,则使用了随机数种子来根据系统执行的不同时间来产生不同时间的随机数;
(7)对于题目的限制和打印方式,用户可根据系统的系统的提示一步步输入数据满足自己的要求;
(8)对于范围的限制,亦是根据系统的提示输入用户的需求范围即可;
(9)对于所有情况下涉及到除法运算的,必然在相应的函数下添加相应的判断条件即可。
源代码:
//四则运算2的实现
//李敏,Mar 18th
#include<iostream>
#include <time.h>
#include "math.h"
using namespace std;
void main()
{
int n,t,c,a=0,b=0,d[1000],i,j,e,f,a1,a2,a3,a4,v;
double k, g[1000],p;
char mm;
do
{
cout<<"特别说明:如若选择系统默认情况,即实现的是(1)非负整数的加减混合运算;(2)非负整数间的乘除混合运算且除法运算均为整除情况;"<<endl;
cout<<"**************************请根据自己的需求进行选择:*****************************"<<endl;
cout<<" 1、加减乘除混合运算 2、允许负数实现加减法运算 3.允许除法运算有余数"<<endl;
cout<<" 4.支持真分数 5.支持假分数 6.系统默认 "<<endl;
cout<<"********************************************************************************"<<endl;
cin>>c;
switch(c)
{
case 1: cout<<"**************************请选择进行运算的数的类型:*****************************"<<endl;
cout<<" 1.整型 2.浮点型 "<<endl;
cout<<"********************************************************************************"<<endl;
cin>>t;
switch(t)
{
case 1:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限"<<endl;
cin>>a>>b;
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1);
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+8)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<d[i]<<"+"<<d[i+1]<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<d[i+2]<<"-"<<d[i+3]<<'\t';a2=a1+1;
a3=a2+1;
if(a3%e==0) cout<<endl;
cout<<d[i+4]<<"*"<<d[i+5]<<'\t';a3=a2+1;
if(d[i+1]==0) { f=d[i+1]; d[i+1]=d[i];d[i]=f;}
a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<d[i+6]<<"/"<<d[i+7]<<'\t';a4=a3+1;
v=a4+1;
}
break;
case 2:cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限(提示输入整数即可)"<<endl;
cin>>a>>b;
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1);
}
cout<<"请输入需要精确到的小数标志,such as 10.0精确到十分位,依次类推即可"<<endl;
cin>>k;
for(i=0;i<2*n;i++)
{
g[i]=d[i]/k;
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+8)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<g[i]<<"+"<<g[i+1]<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<g[i+2]<<"-"<<g[i+3]<<'\t'<<'\t';
a3=a2+1;
if(a3%e==0) cout<<endl;
cout<<g[i+4]<<"*"<<g[i+5]<<'\t'<<'\t';
if(g[i+7]==0) { p=g[i+7]; g[i+7]=g[i+6];g[i+6]=p;}
a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<g[i+6]<<"/"<<g[i+7]<<'\t'<<'\t';
v=a4+1;
}
break;
}break;
case 2: cout<<"**************************请选择进行运算的方式:*****************************"<<endl;
cout<<" 1.加减混合运算 2.乘除混合运算 "<<endl;
cout<<"********************************************************************************"<<endl;
cin>>t;
switch(t)
{
case 1:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限"<<endl;
cin>>a>>b;
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1+1);
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+4)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<d[i]<<"+"<<d[i+1]<<'\t'<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<d[i+2]<<"-"<<d[i+3]<<'\t'<<'\t';
v=a2+1;
}
break;
case 2:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限"<<endl;
cin>>a>>b;
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1+1);
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+4)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<d[i]<<"*"<<d[i+1]<<'\t'<<'\t';
if(d[i+3]==0) { f=d[i+3]; d[i+3]=d[i+2];d[i+2]=f;}
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<d[i+2]<<"/"<<d[i+3]<<'\t'<<'\t';
v=a2+1;
}
break;
}break;
case 3:cout<<"**************************请选择进行运算的数的类型:*****************************"<<endl;
cout<<" 1.整型 2.双精度型 "<<endl;
cout<<"********************************************************************************"<<endl;
cin>>t;
switch(t)
{
case 1:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限"<<endl;
cin>>a>>b;
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1+1);
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+8)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<d[i]<<"+"<<d[i+1]<<'\t'<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<d[i+2]<<"-"<<d[i+3]<<'\t'<<'\t';
a3=a2+1;
if(a3%e==0) cout<<endl;
cout<<d[i+4]<<"*"<<d[i+5]<<'\t'<<'\t';
if(d[i+7]==0)
{
f=d[i+7]; d[i+7]=d[i+6];d[i+6]=f;
if(d[i+6]%d[i+7]==0)
{a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<d[i+6]<<"/"<<d[i+7]<<'\t'<<'\t';
v=a4+1;
}
else { a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<"mod"<<"("<<d[i+6]<<","<<d[i+7]<<")"<<'\t'<<'\t';
v=a4+1;
}
}
else{
if(d[i+6]%d[i+7]==0)
{ a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<d[i+6]<<"/"<<d[i+7]<<'\t'<<'\t';v=a4+1;
}
else {a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<"mod"<<"("<<d[i+6]<<","<<d[i+7]<<")"<<'\t'<<'\t';
v=a4+1;
}
}
}
break;
case 2:cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限(输入整数即可)"<<endl;
cin>>a>>b;
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1+1);
}
cout<<"请输入需要精确到的小数标志,such as 10.0精确到十分位,依次类推即可"<<endl;
cin>>k;
for(i=0;i<2*n;i++)
{
g[i]=d[i]/k;
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+8)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<g[i]<<"+"<<g[i+1]<<'\t'<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<g[i+2]<<"-"<<g[i+3]<<'\t'<<'\t';
a3=a2+1;
if(a3%e==0) cout<<endl;
cout<<g[i+4]<<"*"<<g[i+5]<<'\t'<<'\t';
if(g[i+7]==0) { p=g[i+7]; g[i+7]=g[i+6];g[i+6]=p;}
a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<g[i+6]<<"/"<<g[i+7]<<'\t'<<'\t';
v=a4+1;
}
break;
}break;
case 4:cout<<"**************************请选择进行运算的方式:*****************************"<<endl;
cout<<" 1.加减混合运算 2.乘除混合运算 3.加减乘除混合运算 "<<endl;
cout<<"********************************************************************************"<<endl;
cin>>t;
switch(t)
{
case 1:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,输入两个整数即可,其中第一个数与第二个数的商作为下限,第二个数作为上限"<<endl;
cin>>a>>b;
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=a;i<a+n+3;i=i+2)
{ if(i==-1||i+1==-1||i+2==-1){i=1;}
else {i=i;}
a1=v;
if(a1%e==0) cout<<endl;
cout<<i<<'/'<<i+1<<"+"<<i<<"/"<<i+2<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
for(j=b;j>b-1;j--)
{
if(j==0){j=-1;}
else{j=j;}
cout<<i<<'/'<<j<<"-"<<i<<"/"<<j-1<<'\t';
}
v=a2+1;
}
break;
case 2:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,输入两个整数即可,其中第一个数与第二个数的商作为下限,第二个数作为上限"<<endl;
cin>>a>>b;
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=a;i<a+n+3;i=i+2)
{
if(i==-1||i+1==-1||i+2==-1){i=1;}
else {i=i;}
a1=v;
if(a1%e==0) cout<<endl;
cout<<"("<<i<<'/'<<i+1<<")"<<"*"<<"("<<i<<"/"<<i+2<<")"<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
for(j=b;j>b-1;j--)
{
if(j==0){j=-1;}
else{j=j;}
cout<<"("<<i<<'/'<<j<<")"<<"/"<<"("<<i<<"/"<<j-1<<")"<<'\t';
}
v=a2+1;
}
break;
case 3:cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,输入两个整数即可,其中第一个数与第二个数的商作为下限,第二个数作为上限"<<endl;
cin>>a>>b;
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=a;i<a+n-3;i=i+3)
{
if(i==0||i+1==0||i+2==0||i+3==0){i=1;}
else{i=i;}
a1=v;
if(a1%e==0) cout<<endl;
cout<<"("<<i<<'/'<<i+1<<")"<<"*"<<"("<<i<<"/"<<i+2<<")"<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<i+1<<"/"<<i+2<<"+"<<i+1<<"/"<<i+3<<'\t';
a3=a2+1;
if(a3%e==0) cout<<endl;
for(j=b;j>b-1;j--)
{
if(j==0||j-1==0){j=-1;}
else{j=j;}
cout<<i+1<<'/'<<j<<"-"<<i+2<<"/"<<j-1<<'\t';
}
a4=a3+1;
if(a4%e==0) cout<<endl;
for(j=b;j>b-1;j--)
{
if(j==0||j-1==0){j=-1;}
else{j=j;}
cout<<"("<<i<<'/'<<j<<")"<<"/"<<"("<<i<<"/"<<j-1<<")"<<'\t';
}
v=a4+1;
}
break;
}break;
case 5:cout<<"**************************请选择进行运算的方式:*****************************"<<endl;
cout<<" 1.加减混合运算 2.乘除混合运算 3.加减乘除混合运算 "<<endl;
cout<<"********************************************************************************"<<endl;
cin>>t;
switch(t)
{
case 1:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,输入两个整数即可,其中第一个数与第二个数的商作为下限,第二个数作为上限"<<endl;
cin>>a>>b;
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=b;i>b-n;i=i-2)
{
if(i==0||i-1==0||i-2==0||i-3==0){i=-1;}
a1=v;
if(a1%e==0) cout<<endl;
cout<<i<<'/'<<i-1<<"+"<<i<<"/"<<i-2<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<i<<'/'<<i-2<<"-"<<i<<"/"<<i-3<<'\t';
v=a2+1;
}
break;
case 2:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,输入两个整数即可,其中第一个数与第二个数的商作为下限,第二个数作为上限"<<endl;
cin>>a>>b;
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
for(i=b;i>b-n;i=i-2)
{
if(i==0||i-1==0||i-2==0||i-3==0){i=-1;}
else{i=i;}
a1=v;
if(a1%e==0) cout<<endl;
cout<<"("<<i<<'/'<<i-1<<")"<<"*"<<"("<<i<<"/"<<i-2<<")"<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<"("<<i<<'/'<<i-2<<")"<<"/"<<"("<<i<<"/"<<i-3<<")"<<'\t';
v=a2+1;
}
break;
case 3:cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,输入两个整数即可,其中第一个数与第二个数的商作为下限,第二个数作为上限"<<endl;
cin>>a>>b;
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
for(i=b;i>b-n;i=i-4)
{
if(i+1==0||i==0||i-1==0||i-2==0||i-3==0||i-4==0){i=-1;}
a1=v;
if(a1%e==0) cout<<endl;
cout<<"("<<i<<'/'<<i-1<<")"<<"*"<<"("<<i<<"/"<<i-2<<")"<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
cout<<"("<<i<<'/'<<i-2<<")"<<"/"<<"("<<i<<"/"<<i-3<<")"<<'\t';
a3=a2+1;
if(a3%e==0) cout<<endl;
cout<<i<<'/'<<i-3<<"+"<<i<<"/"<<i-4<<'\t';
a4=a3+1;
if(a4%e==0) cout<<endl;
cout<<i+1<<'/'<<i-2<<"-"<<i+1<<"/"<<i-3<<'\t';
v=a4+1;
}
break;
}break;
case 6:cout<<"**************************请选择运算方式:*****************************"<<endl;
cout<<" 1、非负整数间的加减混合运算 2.非负整数间的乘除混合运算(除法运算无余数)" <<endl;
cout<<"********************************************************************************"<<endl;
cin>>t;
switch(t)
{
case 1:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限"<<endl;
cin>>a>>b;
if (a<0||b<0) {cout<<"输入的数字不合法,请重新输入!"<<endl;
cin>>a>>b;}
srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子
for(i=0;i<2*n;i++)
{
d[i]=a+rand()%(b-a+1+1);
}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=0;i<2*n;i=i+4)
{
a1=v; if(a1%e==0) cout<<endl;
cout<<d[i]<<"+"<<d[i+1]<<'\t'<<'\t';
a2=a1+1; if(a2%e==0) cout<<endl;
cout<<d[i+2]<<"-"<<d[i+3]<<'\t'<<'\t';
v=a2+1;
}
break;
case 2:
cout<<"请输入需要系统需要为你设计的题目数:"<<endl;
cin>>n;
cout<<"请输入进行运算的范围,其中第一个输入的数作为下限,第二个输入的数为上限"<<endl;
cin>>a>>b;
if(a<0||b<0)
{cout<<"输入的数字不合法,请重新输入!"<<endl;
cin>>a>>b;}
cout<<"请输入每行应打印的题目数:"<<endl;
cin>>e;
v=0;
for(i=b;i>b-n;i--)
{
a1=v;
if(a1%e==0) cout<<endl;
cout<<i<<"*"<<i-1<<'\t';
a2=a1+1;
if(a2%e==0) cout<<endl;
for(j=a;j<a+1;j++)
{
if(j!=0&&i%j==0)
cout<<i<<"/"<<j<<'\t';
}
v=a2-1;
}
break;
}break;
}
cout<<endl;
cout<<"*************************************************************"<<endl;
cout<<" 继续请输入Y 退出请输入N "<<endl;
cout<<"*************************************************************"<<endl;
cin>>mm;
}while(mm=='y'||mm=='Y');
}
实验截图:
编程总结:虽然已经粗略的写完了程序,但是其中还是遇到了一些基本的基本功的问题,这足以说明自己的基本功还不到家,实践还比较少,还有创新意识薄弱,思维不够发散,还不能更快的更敏捷的找到解决问题的方法以及解决问题的方法过于单调,所以还得多多加强,还有意识到了对待事情的态度应该一丝不苟,坚持不懈,以及编写的程序感觉冗余了些,希望自已以后慢慢的通过一次次的实践来提高自己的编程能力,规格及解题思路。
时间记录日志:
学生:李敏 日期:2015年3月18日
老师:王建民 课程:软件工程概论