四则运算2

一,问题描述:

  要求:
    1、题目避免重复
    2、可定制(数量/打印方式)
    3、可以控制下列参数:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数(真分数假分数),

         是否支持小数(精确到多少位),打印中每行的间隔。

二,设计思路

1,题目避免重复:

采用srand(time(NULL))实现

2,可定制:

a)定制数量:定义变量n,用户可以自己设置

b)打印方式:可以自己选择每行可以打印几个

3,可控制参数:

a)是否支持乘除:编写了两个函数,一个有乘除,一个没有乘除,在主函数里设置判断语句用户自己选择,然后调用相应的函数。

b)加减有无负数:设置判断语句,有负数为0,无负数为1.

c)除法有无余数:在有乘除的函数里设置条件语句,0为有余数,1为无余数,如果用户选择与随机产生的不一致,则再随机取一个被除数。

d)打印中每行的间隔:只要再换行时用一个循环语句,循环输出endl即可

三,缺陷及问题

由于能力有限是否有括号,是否支持分数,是否支持小数等功能没有实现

四,代码部分

#include<iostream.h>
   #include<stdlib.h>
   #include<time.h>
   void zccc()
   {
          
      int a,b,c; //两位操作数和一位操作符  
      int e;
      srand(time(NULL));
      int n;//输出题目数目
   int x;//取值范围
      int f;//加减有无负数
      int l;//用来输入行间距
   int y;//除法有无余数
   cout<<"需要列出多少道数学题?"<<endl;
      cin>>n;
   cout<<"请规定数值取值范围"<<endl;
   cin>>x;
      cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl;
      cin>>f;
   cout<<"除法有无余数?(0代表有余数,1代表无余数)"<<endl;
      cin>>y;
   cout<<"每行需要打印几个算数题?"<<endl;
      cin>>e;
      cout<<"打印时行间距是多少?"<<endl;
      cin>>l;
      
      cout<<"********************************"<<endl;
      for(int i=0;i<n;i++)
      {
          a=rand()%x;
          b=rand()%x;
          c=rand()%4;
          if(c==0)
              cout<<a<<"+"<<b<<"="<<"     ";
    if(c==1){
              if(f==1)
              {
              if(a<b)
              cout<<b<<"-"<<a<<"="<<"     ";
     else
     {
      cout<<a<<"-"<<b<<"="<<"     ";
     }
     }
             
              else if(f==0)
              {
              cout<<a<<"-"<<b<<"="<<"     ";
              }
    }
          if(c==2)
              cout<<a<<"*"<<b<<"="<<"     ";
             
    if(c==3){
              if(b!=0)
              {
      while((y==1)&&(a%b)!=0)
      {
     a=rand()%100;
      }

              cout<<a<<"/"<<b<<"="<<"     ";
              }
              else
              {
                  i=i-1;
              }
    }
             
          if((i+1)%e==0)
          {
              for(int d=0;d<=l;d++)
              {
                  cout<<endl;
              }
          }
          if((i+1)==n)
          {
              cout<<endl;
          }
      }
  }
 
  void bzccc()
  {
         
      int e;//输入每行算数题的个数
      int a,b,c;   //两位操作数和一位操作符
      srand(time(NULL));
      int n;//输出题目数目
   int x;//取值范围
      int f;//加减有无负数
      int l;//用来输入行间距
      cout<<"需要列出多少道数学题"<<endl;
      cin>>n;
      cout<<"请规定数值取值范围"<<endl;
   cin>>x;
      cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl;
      cin>>f;
      cout<<"每行需要打印几个算数题?"<<endl;
    cin>>e;
     cout<<"打印时行间距是多少?"<<endl;
     cin>>l;
     cout<<"********************************"<<endl;
     for(int i=0;i<n;i++)
     {
         a=rand()%x;
         b=rand()%x;
        c=rand()%2;
       if(c==0)
             cout<<"、 "<<a<<"+"<<b<<"="<<"     ";
               if(c==1){
             if(f==1)
             {
             if(a<b)
             cout<<b<<"-"<<a<<"="<<"     ";
    else {
     cout<<a<<"-"<<b<<"="<<"     ";
    }
    }
     else if(f==0)
             {
                 cout<<a<<"-"<<b<<"="<<"     ";
             }
    }
            
         if((i+1)%e==0)
         {
             for(int d=0;d<=l;d++)
            {           
                 cout<<endl;
             }
         }
         if((i+1)==n)
         {
             cout<<endl;
         }
     }
 }


 int main()
 {

     char ch;
     cout<<"是否支持乘除?(Y/N)"<<endl;
     cin>>ch;
     if(ch=='Y'||ch=='y')
     {
         zccc();   
         cout<<"********************************"<<endl;
     }
    
     else if(ch=='N'||ch=='n')
     {
         bzccc();
        cout<<"********************************"<<endl;
     }    
     return 0;
}

五,截图

六,实验总结

通过本次实验又学到了一些对于我来说新的知识,比如srand(time(NULL)),避免重复最开始想到的是最笨的思路,但是思路越简单实现就越难,自己没办法实现,后来了解到可以用srand()实现,又积累了一些编程知识,由于个人编程基础不足,所以部分功能没有实现,通过以后的学习还会回来慢慢改进该程序。

七,日志表

                                           姓名:梁宗泳 学号:20122936 班级:信1201-2

                                                        周活动总结表

 

    时间记录表

学生:梁宗泳    教师:王建民   日期:3月15日  课程:PSP

缺陷记录日志

学生:梁宗泳 日期:3月15日  教师:王建民

原文地址:https://www.cnblogs.com/lllzy/p/4339771.html