依据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,含乘除、括号,在文件中输出。