四则运算2

/*四则运算生成

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

设计思想:题目避免重复用数组,每次输出时与之前输出的比较是否相等。
          输出数量由循环决定。
          打印方式用if else 语句:可以直接输出,也可以输出到txt文件当中。
          是否有乘除法,加减有无负数,除法有无余数都用if else语句。
          正负数可以在每个数之前加一个运算符号:负号用“-”,正号用“ ”空格表示。
          判断余数用z=x%y语句,判断z是否为0。
          括号输出的考虑比较不周全,还不能达到随机随意添加括号。数字最多10个,符号最多9个,
      创建符号的数组,如果符号数是奇数,则在没俩个数字之间添加括号;如果符号数是偶数,则第
      一个数字不考虑,剩下的奇数个符号考虑与之前相同。

*/
#include<iostream>
#include<stdio.h>
#include<time.h>
#include<fstream>
using namespace std;

int main()
{
    ofstream outfile;
    int i, a, b, c, d, e, f, g, l, m, o,x, y, z;
    int number, pcc, pccs, numf, pjj, pys, scfs; //pcc判断乘除,pccs判断随机数,numf数值范围,pf判断有无负数,pys判断有无余数,scfs输出方式
    char fh1, fh2; //fh符号正负
    int pdkh,pdkhs;      //pdkh判断是否有括号,pdkhs括号随机数
    int szgs, fhgs;  //szgs数字个数,fhgs符号个数
    int szsz[20]; //szsz数字数组,fhsz符号数组
    char fh[4] = { '+', '-', '*', '/' }, fhsz[10];
    cout << "请输入要打印的数量:";
    cin >> number;
    cout << "请输入打印方式: 1、直接输出  2、输入到txt文件 :";
    cin >> scfs;
    cout << "请输入数值范围:0-";
    cin >> numf;
    cout << "是否有括号:  1、有  2、无  :";
    cin >> pdkh;
    cout << "加减有无负数: 1、有  2、无 :";
    cin >> pjj;
    cout << "是否有乘除法: 1、有  2、无 :";
    cin >> pcc;
    if (pcc == 1)
    {
        cout << "除法有无余数: 1、有  2、无 :";
        cin >> pys;
    }
    srand((unsigned)time(NULL));//时间种子,每次出现随机数不同
    
    if (pdkh == 1)     //判断是否有括号
    {
        pdkhs = 3;
    }
    if (pdkh == 2)
    {
        pdkhs = 2;
    }


    if (pcc == 1)           //判断是否有乘除
    {
        pccs = 4;
    }
    if (pcc == 2)
    {
        pccs = 2;
    }
    for (i = 0; i < number; i++)
    {

        a = rand() % numf;
        b = rand() % numf;
        e = rand() % numf;
        f = rand() % numf;
        if (pjj == 1)
        {
            l = rand() % 2;
            m = rand() % 2;
            if (l == 0)          //加减有负数时,随机生成正负号
            {
                fh1 = '-';
            }
            if (l == 1)
            {
                fh1 = ' ';
            }
            if (m == 0)
            {
                fh2 = '-';
            }
            if (m == 1)
            {
                fh2 = ' ';
            }
        }
        else
        {
            fh1 = fh2 = ' ';
        }
        if (scfs == 1)  //判断输出方式为直接输出
        {
            switch (d = rand() % pdkhs)
            {
            case 0:   //整数
            {
                          switch (c = rand() % pccs)
                          {
                          case 0:cout << fh1 << a << "+" << fh2 << b << "=" << endl; break;
                          case 1:cout << fh1 << a << "-" << fh2 << b << "=" << endl; break;
                          case 2:cout << a << "×" << b << "=" << endl; break;
                          case 3:
                          {
                                    if (pys == 2)
                                    {
                                        while (b == 0)
                                        {
                                            b = rand() % numf;
                                        }
                                        o = a%b;
                                        while (o != 0)
                                        {
                                            b = rand() % numf;
                                            while (b == 0)
                                            {
                                                a = rand() % numf;
                                                b = rand() % numf;
                                            }
                                            o = a%b;
                                        }
                                    }
                                    else
                                    {
                                        while (b == 0)
                                        {
                                            b = rand() % numf;
                                        }
                                    }
                                    cout << a << "÷" << b << "=" << endl;
                          }break;
                          }
            }break;
            case 1://真分数
            {
                       while (a == 0 || b == 0 || a >= b)
                       {
                           a = rand() % numf;
                           b = rand() % numf;
                       }
                       while (e == 0 || f == 0 || e >= f)
                       {
                           e = rand() % numf;
                           f = rand() % numf;
                       }
                       switch (g = rand() % pccs)
                       {
                       case 0: cout << fh1 << a << "/" << b << "+" << fh2 << e << "/" << f << "=" << endl; break;
                       case 1: cout << fh1 << a << "/" << b << "-" << fh2 << e << "/" << f << "=" << endl; break;
                       case 2: cout << a << "/" << b << "×" << e << "/" << f << "=" << endl; break;
                       case 3: cout << a << "/" << b << "÷" << e << "/" << f << "=" << endl;
                       }break;
            }break;
            case 2:
            {
                      szgs = 3 + rand() % 8;     //有括号时,数字和符号数组
                      fhgs = szgs - 1;
                      for (y = 0; y < szgs; y++)
                      {
                          szsz[y] = rand() % numf;
                      }
                      for (y = 0; y < fhgs; y++)
                      {
                          x = rand() % 4;
                          fhsz[y] = fh[x];
                      }
                      fhsz[fhgs] = '=';
                      switch (z=fhgs % 2)
                      {
                      case 0:
                      {
                                cout << szsz[0];
                                cout << fhsz[0];
                                for (y = 1; y < fhgs; y++)
                                {
                                    cout << "(";
                                    cout << szsz[y];
                                    cout << fhsz[y];
                                    cout << szsz[y + 1];
                                    cout << ")";
                                    cout << fhsz[y + 1];
                                    y = y + 1;
                                }cout<<endl;
                      }break;
                      case 1:
                      {
                                for (y = 0; y < fhgs; y++)
                                {
                                    cout << "(";
                                    cout << szsz[y];
                                    cout << fhsz[y];
                                    cout << szsz[y + 1];
                                    cout << ")";
                                    cout << fhsz[y + 1];
                                    y = y + 1;
                                }
                                cout<<endl;
                      }break;
                      }
            }break;
            }
        }
        else   //选择输出方式为 输出到文件
        {
            outfile.open("myfile.txt", ios_base::out | ios_base::app);

            switch (d = rand() % pdkhs)
            {
            case 0:   //整数
            {
                          switch (c = rand() % pccs)
                          {
                          case 0:outfile << fh1 << a << "+" << fh2 << b << "=" << endl; break;
                          case 1:outfile << fh1 << a << "-" << fh2 << b << "=" << endl; break;
                          case 2:outfile << a << "×" << b << "=" << endl; break;
                          case 3:
                          {
                                    if (pys == 2)
                                    {
                                        while (b == 0)
                                        {
                                            b = rand() % numf;
                                        }
                                        o = a%b;
                                        while (o != 0)
                                        {
                                            b = rand() % numf;
                                            while (b == 0)
                                            {
                                                a = rand() % numf;
                                                b = rand() % numf;
                                            }
                                            o = a%b;
                                        }
                                    }
                                    else
                                    {
                                        while (b == 0)
                                        {
                                            b = rand() % numf;
                                        }
                                    }
                                    outfile << a << "÷" << b << "=" << endl;
                          }break;
                          }
            }break;
            case 1://真分数
            {
                       while (a == 0 || b == 0 || a >= b)
                       {
                           a = rand() % numf;
                           b = rand() % numf;
                       }
                       while (e == 0 || f == 0 || e >= f)
                       {
                           e = rand() % numf;
                           f = rand() % numf;
                       }
                       switch (g = rand() % pccs)
                       {
                       case 0: outfile << fh1 << a << "/" << b << "+" << fh2 << e << "/" << f << "=" << endl; break;
                       case 1: outfile << fh1 << a << "/" << b << "-" << fh2 << e << "/" << f << "=" << endl; break;
                       case 2: outfile << a << "/" << b << "×" << e << "/" << f << "=" << endl; break;
                       case 3: outfile << a << "/" << b << "÷" << e << "/" << f << "=" << endl; break;
                       }
            }break;
            case 2:
            {
                      szgs = 3 + rand() % 8;     //有括号时,数字和符号数组
                      fhgs = szgs - 1;
                      for (y = 0; y < szgs; y++)
                      {
                          szsz[y] = rand() % numf;
                      }
                      for (y = 0; y < fhgs; y++)
                      {
                          x = rand() % 4;
                          fhsz[y] = fh[x];
                      }
                      fhsz[fhgs] = '=';
                      switch (z = fhgs % 2)
                      {
                      case 0:
                      {
                                outfile << szsz[0];
                                outfile << fhsz[0];
                                for (y = 1; y < fhgs; y++)
                                {
                                    outfile << "(";
                                    outfile << szsz[y];
                                    outfile << fhsz[y];
                                    outfile << szsz[y + 1];
                                    outfile << ")";
                                    outfile << fhsz[y + 1];
                                    y = y + 1;
                                }outfile << endl;
                      }break;
                      case 1:
                      {
                                for (y = 0; y < fhgs; y++)
                                {
                                    outfile << "(";
                                    outfile << szsz[y];
                                    outfile << fhsz[y];
                                    outfile << szsz[y + 1];
                                    outfile << ")";
                                    outfile << fhsz[y + 1];
                                    y = y + 1;
                                }
                                outfile << endl;
                      }break;
                      }
            }break;
            }
            outfile.close();
        }
    }
}

 

周活动总结表

姓名:王春帆                                                   日期:2016/03/12

 

听课

编写程序

阅读课本

 

 

 

日总结

周日3.6

 

 

 

 

 

 

 

周一

100

 

30

 

 

 

130

周二

 

 

 

 

 

 

 

周三

 

 

 

 

 

 

 

周四

100

60

 

 

 

 

160

周五

 

 

30

 

 

 

30

周六

 

450

 

 

 

 

450

周总结

200

510

60

 

 

 

770

 

时间记录日志

学生:王春帆                                        日期:3/12/2016

       教师:王建民                                        课程:软件工程        

日期

开始

时间

结束时间

中断时间

净时间

活动

备注

C

U

3/7

14:00

15:50

10

100

上课

理论学时

 

 

 

19:00

19:30

 

30

看书

《构建之法》

 

 

3/10

14:00

15:50

10

100

上课

理论学时

 

 

 

20:00

21:00

 

60

编写程序

四则运算2

 

 

3/11

19:00

19:30

 

30

看课件

上课所讲

 

 

3/12

9:00

12:00

 

180

编写程序

四则运算2

 

 

 

13:00

15:00

 

120

编写程序

四则运算2

 

 

 

15:30

18:00

 

150

编写程序

四则运算2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

缺陷记录日志

                  学生:王春帆

                  日期:3/12/2016

                  教员:先生王

                  程序号:四则运算2

日期

编号

类型

引入阶段

排除阶段

修复时间

3/12

1

 

生成

错误列表

5min

 

描述

Char类型的赋值方式错误,应该用char a=’-’ 小括号

 

2

 

生成

调试

10min

 

描述

a/b 中b可能为0

 

3

 

生成

错误列表

1min

 

描述

If else 语句的括号错误

 

4

 

执行

修改代码

10min

 

描述

输出到文件中只有一道运算题,输出方式需要修改

 

 

 

 

 

 

posted @ 2016-03-11 16:42  言凡  阅读(611)  评论(1编辑  收藏  举报