依据Right-BICEP要求的对四则运算2的测试

代码:

  1 #include <iostream>
  2 #include <time.h>
  3 #include <stdio.h>
  4 #include <stdlib.h>
  5 #include <iomanip>
  6 #include <math.h>
  7 #include <fstream>
  8 #include <string>
  9 #define random()(rand()%1000)
 10 using namespace std;
 11 
 12 
 13 //数字转换为字符串
 14 string int_string(int number)
 15 {
 16     int value = abs(number);//取绝对值
 17     char str[100];
 18     _itoa_s(value, str, 10); //运用itoa()函数将int型整数转换为字符串 
 19     string str_= str;
 20     return str_;
 21 }
 22 //算式转换为字符串
 23 string group(string str1, string str2, char m)  // group:算式组合
 24 {
 25     string Equation;       // equation:算式
 26     Equation = str1 + m + str2;
 27     return Equation;
 28 }
 29 //生成运算符
 30 char mark(int opt)
 31 {
 32     int opt1, a;
 33     char symbol[1]; // 符号数组
 34     if (opt == 0)
 35     {
 36         opt1 = 2;
 37     }
 38     if (opt == 1)
 39     {
 40         opt1 = 4;
 41     }
 42     a = random() % opt1+1; //随机生成1-2或1-4的数,随opt的值而定,opt意为是否含有乘除法
 43     if (a == 1) symbol[0] = '+';
 44     if (a == 2) symbol[0] = '-';
 45     if (a == 3) symbol[0] = '*';
 46     if (a == 4) symbol[0] = '/';
 47     return symbol[0];
 48 }
 49 //主函数
 50 void main()
 51 {
 52     srand((int)time(NULL));     //设置时间种子,每次执行种子不同,生成不同的随机数
 53     int num1, num2,minus;
 54     int    opt, bracket, output, max, min, amount, control, b, c,d;
 55     string str_num1, str_num2, value; //数字-字符串
 56     cout << "是否需要包含乘除法?1(有),0(没有):" << endl;
 57     cin >> opt;    //opt:选择是否含有乘除法
 58     /*cout << "是否需要包含负数1(有),0(没有):" << endl;
 59     cin >> minus; */
 60     cout << "是否含有括号?1(有),0(没有):" << endl;
 61     cin >> bracket;
 62     cout << "题目是否要在文件中输出?1(是),0(不是):" << endl;
 63     cin >> output;
 64     cout << "请输入数字范围:(格式为:最小数 空格 最大数)" << endl;
 65     cin >> max>>min;
 66     cout << "请输入出题数量:" << endl;
 67     cin >> amount;
 68     string equation[1000]; //定义数组
 69     char symbol;
 70     ofstream fout;
 71     /*if (opt == 1)
 72     {
 73         cout << "除法有无余数,1(有),0(无)" << endl;
 74             cin >> remainder;
 75     }*/
 76     if ( output == 1 )
 77     {
 78         fout.open("output.txt");
 79         fout << amount << "道四则运算题如下:" << endl;
 80     }
 81     else
 82     {
 83         cout << amount << "道四则运算题如下:" << endl;
 84     }
 85     for (int i = 0; i<amount; i++)  //为输出规定题数
 86     {
 87         num1 = random() % (max - min + 1) + min;// 随机生成min-max的整数
 88         num2 = random() % (max - min + 1) + min;// 随机生成min-max的整数
 89         control = random() % 9 + 2;  //控制是几个数的运算式,最多支持10个数的运算式
 90         symbol = mark(opt);
 91         /*if (minus == 0)      //本来要加负数的,思路有点不清晰,以后改进
 92         {
 93             str_num1 = int_string(num1);
 94             str_num2 = int_string(num2);
 95         }
 96         if (minus == 1)
 97         {
 98             d = random() % 2; //随机生成0-1的数
 99             if (d == 0)
100             {
101                 str_num1 = int_string(num1);
102                 str_num2 = '-' + str_num2;
103             }
104         }*/
105         str_num1 = int_string(num1);
106         str_num2 = int_string(num2);
107         equation[i] = group(str_num1, str_num2, symbol);
108         if (control >= 2)
109         {
110             for (; control >= 2; control--)
111             {
112                 symbol = mark(opt);
113                 str_num1 = equation[i];
114                 if (bracket == 1)
115                 {
116                     b = random() % 2; //随机生成0-2的数
117                     if (b == 0)  //如果b=0,就在字符串str_num1的左右加上括号
118                     {
119                         str_num1 = '(' + str_num1 + ')';
120                     }
121                 }
122                 symbol = mark(opt);
123                 num2 = random() % (max - min + 1) + min;// 随机生成min-max的整数
124                 str_num2 = int_string(num2);
125                 b = random() % 2;
126                 if (b == 0)
127                 {
128                     value = str_num1;
129                     str_num1 = str_num2;
130                     str_num2 = value;
131                 }
132                 equation[i] = group(str_num1, str_num2, symbol);
133             }
134         }
135         //判断是否重复
136         int repeat = 0; //repeat:重复 
137         for (c = 0; c<i; c++)
138         {
139             if (equation[c] == equation[i])
140             {
141                 i = i - 1;
142                 repeat = 1;
143                 break;
144             }
145         }
146         if (repeat != 1)//若不重复,则输出 
147         {
148             if (output == 1)
149             {
150                 fout << equation[i] << "=" << endl;
151             }
152             else
153             {
154                 cout << equation[i] << "=" << endl;
155             }
156         }
157 
158     }
159     if (output == 1) //输出到文件
160     {
161         fout.close();
162     }
163 }

Right-BICEP测试要求:

    1.Right-结果是否正确?

    2.B-是否所有的边界条件都是正确的?

    3.I-能查一下反向关联吗?

    4.C-能用其他手段交叉检查一下结果吗?

    5.E-你是否可以强制错误条件发生?

    6.P-是否满足性能要求?

    对四则运算2程序的测试用例如下:

第一组测试用例:数值范围1-148,输出数量10,不含乘除、括号,在DOS界面输出。

第二组测试用例:数值范围1-541,输出数量11,含乘除,在DOS界面输出。

第三组测试用例:数值范围1-234,输出数量21,含乘除、括号,在DOS界面输出。

第四组测试用例:数值范围1-672,输出数量16,不含乘除,含括号,在DOS界面输出。

第五组测试用例:数值范围1-198,输出数量10,含乘除、括号,在文件中输出。

原文地址:https://www.cnblogs.com/me-tts/p/5271997.html