四则运算2

                                           四则运算2

 

思路:1.用srand函数判断随机数输出是否重复

     2.输出的数量直接输入即可,打印方式每行固定输出几个,由用户输入为准。

     3.有无乘除:生成随机数c小于4,0为+,1为-,2为*,3为/,没有乘除就排除c为2.3情况

       有无负数:排除c为0.1时小于0情况

       有无余数:求余判断是否为0

       有无括号:括号的情况需要生成多个随机数,所以我决定生成个随机数组,括号的位置也随机插入到随机数后面,运算符也随机插入。

     4.设置循环,条件判断,输出时有负数带括号输出,没有直接输出。

 

代码:
//四则运算2
//孔宇航 2016/3/11

#include <iostream>
#include<stdlib.h>  
#include <time.h>  
using namespace std;
  
  void main()
  {
      int a0[1000],b0[1000],c0[1000],a1[1000],b1[1000],c1[1000],a2[1000],b2[1000],c2[1000],a3[1000],b3[1000],c3[1000],C[1000];
      int a,b,c,d;
      int i,j,A0,A1,A2,A3,B0,B1,B2,B3;
      int num,line,k;
      int min,max,m;
      int CC,FS,YS,KH;

  
      k=0;
      A0=0;A1=0;A2=0;A3=0;
      B0=0;B1=0;B2=0;B3=0;
     cout<<"*************四则运算2*************"<<endl;
     cout<<endl;
     cout<<endl;
     
      cout<<"请输入算式数量和每行显示数量(打印方式):"<<endl;
      cin>>num>>line;
     
     cout<<"是否要有乘除法?(1/0)"<<endl;
     cin>>CC;
      while(1)                             //判断输入是否合法
     {
        if(CC != 1&&CC != 0)
        {
            cout<<"输入有误,请重新输入:";
            cin>>CC;
        }
         else
             break;
     }
     
     cout<<"加减有无负数?(1/0)"<<endl;
      cin>>FS;
     while(1)                             //判断输入是否合法
     {
        if(FS != 1&&FS != 0)
         {
            cout<<"输入有误,请重新输入:";
            cin>>FS;
          }
         else
              break;
      }
      
      cout<<"除法有无余数?(1/0)"<<endl;
      cin>>YS;
      while(1)                             //判断输入是否合法
      {
         if(YS != 1&&YS != 0)
          {
             cout<<"输入有误,请重新输入:";
             cin>>YS;
         }
          else
              break;
      }
     
       cout<<"是否有括号?(1/0)"<<endl;
      cin>>KH;
     while(1)                             //判断输入是否合法
     {
        if(KH!= 1&&KH != 0)
         {
            cout<<"输入有误,请重新输入:";
            cin>>KH;
          }
         else
              break;
      }


      cout<<"请输入两个数数值范围min,max(min<max)"<<endl;
      cin>>min>>max;
     cout<<endl;
     while(1)                            //判断输入是否合法
     {
         if(min>=max)
          {
             cout<<"输入有误,请重新输入:";
              cin>>min>>max;
          }
          else
              break;
      }
  
      m=max-min+1;
      for(i=0;i<1000;i++)
      {
          a0[i]=0;b0[i]=0;
          a1[i]=0;b1[i]=0;
          a2[i]=0;b2[i]=0;
          a3[i]=0;b3[i]=0;
     }
      srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子
      for(i=0;;i++)
      {
          a=min+rand()%m;
          b=min+rand()%m;
          d=min+rand()%m;
          c=rand()%4;

         if(CC==0)              //如果CC=0,去除c=2,3的情况
         {
              if(c==2||c==3)
                 continue;
              

          }
          if(FS==0)              //如果FS=0,去除c=0,1下结果小于0的情况
         {
              if(c==0)
              {
                  if(a+b<0)
                      continue;
              }
              else if(c==1)
              {
                 if(a-b<0)
                     continue;
             }
       }
        if(YS==0)             //如果YS=0,且是除法,去除a,b相除有余数的情况
         {
            if(c==3)
                 if(0 != a%b)
                    continue;
        }
    
        
        
        //将算式分为加、减、乘、除
         if(c==0)                       //加法
         {
             for(j=0;j<=A0;j++)
             {
                 if(a==a0[j]&&b==b0[j])
                 {
                     B0++;break;
                 }
             }
             if(B0>0)
             {
                 B0=0;continue;
             }
             else
             {
                 a0[A0]=a;
                 b0[A0]=b;
                 c0[A0]=a+b;
                 A0++;
             }
         }
         else if(c==1)                   //减法
         {
             for(j=0;j<=A1;j++)
            {
                 if(a==a1[j]&&b==b1[j])
                {
                     B1++;break;
                 }
             }
             if(B1>0)
             {
                 B1=0;continue;
             }
             else
             {
                 a1[A1]=a;
                 b1[A1]=b;
                 c1[A1]=a+b;
                 A1++;
             }
         }
         else if(c==2)                     //乘法
         {
            for(j=0;j<=A2;j++)
             {
                 if(a==a2[j]&&b==b2[j])
                 {
                    B2++;break;
                 }
             }
             if(B2>0)
             {
                 B2=0;continue;
             }
             else
             {
                 a2[A2]=a;
                b2[A2]=b;
                 c2[A2]=a+b;
                 A2++;
             }
         }
         else                               //除法
         {
             if(b==0)
                 continue;
             for(j=0;j<=A3;j++)
             {
                 if(a==a3[j]&&b==b3[j])
                 {
                     B3++;break;
                 }
             }
             if(B3>0)
             {
                 B3=0;continue;
             }
             else
             {
                 a3[A3]=a;
                 b3[A3]=b;
                 c3[A3]=a+b;
                 A3++;
             }
         }
         if(num==A0+A1+A2+A3)                //限制算式数量
             break;
     }
    
    
     
     //输出
      for(i=0;i<A0;i++)                        //  加法
     {
         k++;
         if(a0[i]<0)
             cout<<"("<<a0[i]<<")";
         else
             cout<<a0[i]<<" ";
             cout<<"+";
         if(b0[i]<0)
             cout<<"("<<b0[i]<<")";
         else
             cout<<" "<<b0[i]<<" ";
         cout<<"=";
         if(k%line==0)
             cout<<endl;
         else
             cout<<"\t";
     }
      for(i=0;i<A1;i++)                         // 减法
     {
         k++;
         if(a1[i]<0)
             cout<<"("<<a1[i]<<")";
        else
             cout<<a1[i]<<" ";
         cout<<"-";
         if(b1[i]<0)
             cout<<"("<<b1[i]<<")";
         else
             cout<<" "<<b1[i]<<" ";
         cout<<"=";
         if(k%line==0)
             cout<<endl;
         else
             cout<<"\t";
     }
     for(i=0;i<A2;i++)                         // 乘法
     {
        k++;
         if(a2[i]<0)
             cout<<"("<<a2[i]<<")";
        else
             cout<<a2[i]<<" ";
         cout<<"*";
         if(b2[i]<0)
             cout<<"("<<b2[i]<<")";
         else
             cout<<" "<<b2[i]<<" ";
         cout<<"=";
        if(k%line==0)
             cout<<endl;
         else
             cout<<"\t";
     }
     for(i=0;i<A3;i++)                          // 除法
     {
         k++;
         if(a3[i]<0)
             cout<<"("<<a3[i]<<")";
        else
             cout<<a3[i]<<" ";
        cout<<"/";
        if(b3[i]<0)
             cout<<"("<<b3[i]<<")";
         else
            cout<<" "<<b3[i]<<" ";
        cout<<"=";
         if(k%line==0)
             cout<<endl;
         else
            cout<<"\t";
     }
   }

 



截图:




    本次程序用了大量的时间,包括在网上查阅相关资料,复习以前知识,敲代码。括号部分只有了初步想法并没有实现此功能深感抱歉,本人编程能力有限,望老师谅解,会在以后的时间里好好学习,过后看看别的同学的学会这部分知识。除了括号的部分,其他功能还算完善,期间遇到些括号找不到错误的问题,由于没有按照代码规范要求编写,下次注意。还有些输出问题,负数加括号问题,输出个数不符合输入的要求,因为没有记录加减乘除的和没有计数和要求数做对比。一次次修改也算是完成了。

 

项目计划总结

周活动总结表

姓名:孔宇航                                              日期:2016/3/11

任务

日期

听课

编写

程序

阅读

课本

准备

考试

 

 

日总计

(分钟)

周日

 

 

 

 

 

 

 

周一

100

60

60

 

 

 

220

周二

 

120

30

 

 

 

150

周三

 

120

60

 

 

 

120

周四

100

90

90

 

 

 

280

周五

 

300

30

 

 

 

330

周六

 

120

 

 

 

 

120


 


阶段时间和效率

周数:1

总计

200

810

270

 

 

 

1220

平均

30

115

40

 

 

 

174

最大

100

300

90

 

 

 

330

最小

100

60

30

 

 

 

120


 


 


2,时间记录日志:


学生:孔宇航                                   日期:2016/3/11


老师:王建民                                    课程:PSP

 

 

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/7

14:00

16:00

20

100

上课

 

17:00

18:00

 

60

编程

 

20:00

21:00

 

60

读课本

 

3/8

15:00

17:00

 

120

编程

 

18:00

19:00

 

60

查资料

 

21:00

21:30

 

30

读课本

 

3/9

10:00

12:00

20

100

查资料

 

14:00

16:00

 

120

编程

 

17:00

18:00

 

60

写作业

 

20:30

21:30

 

60

读课本

 

3/10

14:00

16:00

20

100

上课

 

16:00

18:00

30

90

编程

 

21:00

21:30

30

30

读课本

 

3/11

 

 

08:00

13:30

15:00

9:00

15:00

20:00

 

60

90

300

查资料

休息

编程

 


 


 


 


3,缺陷记录日志:


学生:孔宇航                                      日期:2016/3/11


老师:王建民 


 


日期

编号

类型

引入阶段

排除阶段

修复阶段

修复缺陷

3/10

1

01

编写

编译

2min

 

括号丢失

2

 02

 编写

 编译

 10min

 

 逻辑错误

3/11

3

02

编写

编译

20min

 

循环错误,计数有误

4

02

编写

编译

10min

 

输出有误,语法错误


                                                                


 

 

 

posted @ 2016-03-12 13:43  大脑袋酿酿  阅读(133)  评论(1编辑  收藏  举报