软件工程——四则运算Ⅱ(还有很大缺陷,忘指教)

题目要求:随机生成四则运算题目

//随机四则运算要求:题目避免重复可定制数量,数值范围、加减有无负数、除法有无余数等

#include<iostream>
#include<time.h>
using namespace std;
void basic(int num,int cc,int mhs,int kgs,int pyu,int max,int nnum)       //基础四则运算函数
{
 srand(time(NULL));
 int a[100];     //存放第一个操作数的数组
 int b[100];     //存放第二个操作数的数组
 int c[100];     //存放运算符的数组
 int n,o,p,q,m;
 int repet;      //控制是否重复  
 for(int i=0;i<num;i++)
 {
  n=rand()%max;
  a[i]=n;
  o=rand()%max;
  b[i]=o;
  p=rand()%cc;
  c[i]=p;
  q=rand()%2;
  m=rand()%2;
  while(nnum)
  {
   switch(q)
   {
   case(0):
    a[i]=-a[i];
    break;
   case(1):
    break;
   }
   break;
  }
  while(nnum)
  {
   switch(m)
   {
   case(0):
    b[i]=-b[i];
    break;
   case(1):
    break;
   }
   break;
  }
  repet=1;
  for(int j=0;j<i;j++)
  {
   if(a[i]==a[j]&&b[i]==b[j]&&c[i]==c[j])    //判断是否有重复
   {
    i=i-1;
    repet=0;
   }
  }
  while(repet)
  {
   if(i%mhs==0)
   {
    cout<<endl;
   }
   switch(c[i])
   {
   case(0):
    cout<<"("<<i+1<<") "<<a[i]<<"+ "<<b[i]<<"=";
    break;
   case(1):
    cout<<"("<<i+1<<") "<<a[i]<<"- "<<b[i]<<"=";
    break;
   case(2):
    cout<<"("<<i+1<<") "<<a[i]<<"* "<<b[i]<<"=";
    break;
   case(3):
    {
     while(pyu)
     {
      if(a[i]%b[i]!=0)
       i=i-1;
      repet=0;
     }
     if(b[i]==0)       //判断被除数是否为0,是0则不输出
     {
      i=i-1;
      break;
     }
     else
     {
      cout<<"("<<i+1<<") "<<a[i]<<"/ "<<b[i]<<"=";
      break;
     }
    }
   }
   for(int k=0;k<kgs;k++)
   {
    cout<<" ";
   }
   break;
  }
 }
 cout<<endl;
}

void main()
{
 int num1,cc1,m,n;
 int mhs1,kgs1,pyu1,max1,nnum1;
 while(n)
 {
  cout<<"                  随机四则运算"<<endl;
  cout<<"--------------------------------------------------------"<<endl;
  cout<<"1、请输入运算题的数目:";
  cin>>num1;
  cout<<endl;
  while(1)
  {
   cout<<"2、有乘除法请输入0,没有输入1:";
   cin>>m;
   cout<<endl;
   if(m==0)
   {
    cc1=4;
    break;
   }
   else if(m==1)
   {
    cc1=2;
    break;
   }
   else
    cout<<"  输入有误,请重新输入:1代表有乘除法,2代表无乘除法:";
  }
  if(m==0)
  {
   cout<<"  请选择除法是否有余数,有余数则输入0,没有余数输入1:";
   cin>>pyu1;
   cout<<endl;
  }
  cout<<"3、请输入是否有负数(0代表无负数,1代表有负数):";
  cin>>nnum1;
  cout<<endl;
  cout<<"4、请输入数值范围(最大值,默认从0开始,若有负数则从最大值的负数开始):";
  cin>>max1;
  cout<<endl;
  cout<<"5、请输入打印方式:每行运算题的个数(建议3或4):";
  cin>>mhs1;
  cout<<endl;
  cout<<"    每列运算题之间的间隔(建议1或2):";
  cin>>kgs1;
  cout<<endl;
  cout<<"结果为:";
  basic(num1,cc1,mhs1,kgs1,pyu1,max1,nnum1);
  cout<<endl;
  cout<<"继续请输入1,退出输入0:";
  cin>>n;
  cout<<endl;
 }
}

结果截图:

总结:

看到题目,初始想的是写若干个函数区分别实现题目要求,但在编写的过程中遇到了难题,有些地方拆分不开,便在一个函数中增加修改代码实现新的要求导致本程序除了主函数外只写了一个函数,所有的要求都在这一个程序中完成,导致程序的扩展性很不好,编写时找错也不太好找。在编写的过程中会有一些语句搭配忘记,比如while和break等。编写代码基础知识不牢,之前练得比较少,导致有些语句要反复实验才能确定。题目还有不完善的地方,比如输出的负数没用括号括起等。

原文地址:https://www.cnblogs.com/d12138/p/4337992.html