四则运算2—加强版
设计一个程序,实现出30道四则运算题,要支持真分数的运算
题目避免重复
可定制(数量/打印方式)
可以控制下列参数:
是否有乘除法、
是否有括号(最多可以支持10个数参与计算)、
数值范围(正整数)、
加减有无负数、
除法有无余数
分析:
1、使用随机数填充一个二维数组,每行数组为一个运算式中的所有用到的数字
2、现在是整形二维数组,对每行的数值进行参数的设定(即用随机数设定),以及运算符的选择
3、拿出第一行的数组来分析
首先判断算式中是否应该有括号:1)没有括号 2)有括号
分析 1)没有括号的情况
可以根据数组中数的数量来判断运算符的个数,再随机生成相应个数的运算符(是否有乘除法可在这一步进行设置)
对运算结果的限制可以分析如下:
首先是有无乘除法,这个比较好设置,上边以提及到。其次是分析运算过程中是否有负数出现,是否有余数出现。
若没有乘除法,则只需分析有无余数,若有乘除法则需根据运算规则首先分析是否有余数
若没有乘除法,只需分析有无负数出现即可,可顺序执行每次二元运算进行判断并处理
若有乘除法,则需判断参与乘除运算的数是否有余数,并进行处理。再次判断是否需要对是否有负数进行判断,若可以有负数,则直接输出即可,可不可以有负数,则对以上的结果数组再次进行分析。
2)有括号的情况
存储运算数字信息的二维数组已经生成,再为每行数组生成相应的运算符数组。根据每行数组中数字的个数求得最多能够插入的括号的对数,然后据此随机生成几对括号,最后将括号的总数目加上运算符的总数目并根据一定的规则存入另外一个数组中,使得括号能够随机分配到运算式的不同位置,既可以为运算式加上括号。最后根据一定的输出方式和方法,将数字和括号,运算符以一定的顺序输出即可。
1 //第三次实验 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 #include<time.h> 6 #include<math.h> 7 #include<fstream> 8 using namespace std; 9 10 int main() 11 { 12 int expressie_canyu[1000][10]; //这是一个二维数组,每行记录的是每个运算式中参与的数字 13 int expressieNum_Num[1000]; //此数组记录二维数组相应行中的列数,及记录每个运算式中参与运算的数字的个数 14 int number; //定义产生的运算式中数的数量(最大为10个数) 15 int expressie_num; //定义产生的运算式的数量 16 int printStyle; //定义打印方式(DOS界面打印、输出到文件) 17 int multiply_divide; //定义是否有乘除法,0代表没有,1代表有 18 int max, min; //定义四则运算中的数的取值范围 19 int minus; //定义是否有负数,0代表没有,1代表有 20 int remainder; //定义是否有余数,0代表没有,1代表有 21 int bracket; //定义是否有括号,0代表没有,1代表有 22 23 int biaozhiwei[9]; //标志位,记录各个条件 24 25 cout << "请输入要生成的运算式的数量:"; 26 cin >> expressie_num; 27 cout << endl; 28 cout << "请输入打印运算式的方式(0代表DOS界面,1代表输出到文件):"; 29 cin >> printStyle; 30 cout << endl; 31 cout << "运算式中是否含有乘除法(0代表没有,1代表有):"; 32 cin >> multiply_divide; 33 cout << endl; 34 cout << "请输入运算式中数的取值范围(输入方式为:最小值 空格 最大值):"; 35 cin >> min >> max; 36 cout << endl; 37 cout << "运算过程能否出现负数(0代表不能,1代表能)"; 38 cin >> minus; 39 cout << endl; 40 cout << "定义运算过程是否能够有余数出现(0代表不能出现余数,1代表能出现)"; 41 cin >> remainder; 42 cout << endl; 43 cout << "定义括号是否能够参与运算(0代表不能,1代表能)"; 44 cin >> bracket; 45 cout << endl; 46 47 biaozhiwei[0] = expressie_num; 48 biaozhiwei[1] = printStyle; 49 biaozhiwei[2] = multiply_divide; 50 biaozhiwei[3] = min; 51 biaozhiwei[4] = max; 52 biaozhiwei[5] = minus; 53 biaozhiwei[6] = remainder; 54 biaozhiwei[7] = bracket; 55 56 57 ofstream outfile; 58 outfile.open("f1.dat", ios::out); 59 //首先根据运算式的数量,生成每个运算式需要的数,并记录在expressie_canyu[1000][10]中 60 srand((int)time(0)); //根据时间生成随机数种子 61 int xun_huan_expressieNum; //此变量代表循环时的记录,代表已经循环的次数 62 for (xun_huan_expressieNum = 0; xun_huan_expressieNum < expressie_num; xun_huan_expressieNum++) 63 { 64 number = 2 + rand() % 9; //随机生成参与每个式子进行运算的数的个数 65 expressieNum_Num[xun_huan_expressieNum] = number; //将每个式子中数字的个数存入数组expressieNum_Num[1000]中 66 67 for (int i = 0; i < number; i++) //根据number生成式子中的每个随机数 68 { 69 expressie_canyu[xun_huan_expressieNum][i] = min + rand() % (max - min); //此处可能有错 70 } 71 } 72 73 //以上完成了数组的初始化,下面要完成运算式的组装 74 75 srand((int)time(NULL)); 76 for (int i = 0; i < expressie_num; i++) //对N个运算式进行循环 77 { 78 79 if (0 == bracket) //如果没有括号 80 { 81 int yunsuanfugeshu; //变量运算符的个数 82 yunsuanfugeshu = expressieNum_Num[i] - 1; 83 char yunsuanfu[10]; //此数组存储运算符 84 85 for (int j = 0; j < yunsuanfugeshu; j++) //对运算符数组进行赋值 86 { 87 if (0 == multiply_divide) //如果没有乘除法 88 { 89 int sign_noMD; //数字代表符号 90 sign_noMD = 1 + rand() % 2; 91 if (1 == sign_noMD) 92 { 93 yunsuanfu[j] = '+'; 94 } 95 else 96 { 97 yunsuanfu[j] = '-'; 98 } 99 } 100 else 101 { 102 int sign_yesMD; //数字代表运算符,且含有乘除法 103 sign_yesMD = 1 + rand() % 4; 104 if (1 == sign_yesMD) 105 { 106 yunsuanfu[j] = '+'; 107 } 108 else if (2 == sign_yesMD) 109 { 110 yunsuanfu[j] = '-'; 111 } 112 else if (3 == sign_yesMD) 113 { 114 yunsuanfu[j] = '*'; 115 } 116 else if (4 == sign_yesMD) 117 { 118 yunsuanfu[j] = '/'; 119 } 120 } 121 } 122 123 //cout << "运算符的个数为:" << yunsuanfugeshu << endl; 124 //输出所有运算符号 125 /*cout << "所有运算符号为:"; 126 for (int fuhaoshu1 = 0; fuhaoshu1 < yunsuanfugeshu; fuhaoshu1++) 127 { 128 cout << yunsuanfu[fuhaoshu1] << " "; 129 } 130 */ 131 //上面的循环是对运算符号的赋值。下面组合运算式 132 //此时已存在数组expressie_canyu[i][0-number](参与运算的数字的个数),yunsuanfu[10](存储运算符),yunsuanfugeshu(运算符个数) 133 if (0 == multiply_divide) //如果没有乘除法 134 { 135 if (0 == minus) //如果不能有负数出现 136 { 137 int jieguo; 138 jieguo = expressie_canyu[i][0]; //结果等于此行数组中的第一个数值 139 140 //下面的循环是对运算式预算过程有无负数的判断 141 for (int noMinusNum = 0; noMinusNum < (expressieNum_Num[i]-1); noMinusNum++) 142 { 143 if (yunsuanfu[noMinusNum] == '+') 144 { 145 jieguo = jieguo + expressie_canyu[i][noMinusNum + 1]; 146 if (jieguo < 0) 147 { 148 int a; 149 a = jieguo - expressie_canyu[i][noMinusNum + 1]; 150 expressie_canyu[i][noMinusNum + 1] = 1 + rand() % a; 151 } 152 } 153 else 154 { 155 jieguo = jieguo - expressie_canyu[i][noMinusNum + 1]; 156 if (jieguo <= 0) 157 { 158 int a; 159 a = expressie_canyu[i][noMinusNum + 1] + jieguo; 160 expressie_canyu[i][noMinusNum + 1] = 1 + rand() % (a+1); 161 } 162 } 163 } 164 165 //对运算式进行输出 166 //cout << "运算式中数的个数为:" << expressieNum_Num[i] << endl; 167 if (0 == printStyle) 168 { 169 int fuhao = 0; 170 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 171 { 172 cout << expressie_canyu[i][shu]; 173 174 for (; fuhao < yunsuanfugeshu;) 175 { 176 cout << yunsuanfu[fuhao]; 177 fuhao++; 178 break; 179 } 180 } 181 } 182 else 183 { 184 185 int fuhao = 0; 186 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 187 { 188 outfile << expressie_canyu[i][shu]; 189 190 for (; fuhao < yunsuanfugeshu;) 191 { 192 outfile << yunsuanfu[fuhao]; 193 fuhao++; 194 break; 195 } 196 } 197 outfile << endl; 198 //outfile.close(); 199 } 200 201 } 202 else //如果能有负数出现 203 { 204 //对运算式进行输出 205 //cout << "运算式中数的个数为:" << expressieNum_Num[i] << endl; 206 if (0 == printStyle) 207 { 208 int fuhao = 0; 209 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 210 { 211 cout << expressie_canyu[i][shu]; 212 213 for (; fuhao < yunsuanfugeshu;) 214 { 215 cout << yunsuanfu[fuhao]; 216 fuhao++; 217 break; 218 } 219 } 220 } 221 else 222 { 223 224 int fuhao = 0; 225 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 226 { 227 outfile << expressie_canyu[i][shu]; 228 229 for (; fuhao < yunsuanfugeshu;) 230 { 231 outfile << yunsuanfu[fuhao]; 232 fuhao++; 233 break; 234 } 235 } 236 outfile << endl; 237 //outfile.close(); 238 } 239 } 240 } 241 else //如果有乘除法 242 { 243 if (0 == remainder) //如果不能有余数 244 { 245 int expressie_canyu_linshi[10]; //建立临时数组,下面的循环为给临时数组赋值 246 for (int linshi_chengchu = 0; linshi_chengchu < expressieNum_Num[i]; linshi_chengchu++) 247 { 248 expressie_canyu_linshi[linshi_chengchu] = expressie_canyu[i][linshi_chengchu]; 249 } 250 for (int chengchui = 0; chengchui < yunsuanfugeshu; chengchui++) //此循环对数组中的余数情况进行调整 251 { 252 if (yunsuanfu[chengchui] == '*') 253 { 254 int jieguo; 255 jieguo = expressie_canyu_linshi[chengchui] * expressie_canyu_linshi[chengchui + 1]; 256 expressie_canyu_linshi[chengchui] = jieguo; 257 expressie_canyu_linshi[chengchui + 1] = jieguo; 258 } 259 if (yunsuanfu[chengchui] == '/') 260 { 261 int jieguo; 262 jieguo = expressie_canyu_linshi[chengchui] % expressie_canyu_linshi[chengchui + 1]; 263 if (jieguo != 0) //如果有余数 264 { 265 int yueshu = 1;//约数 266 int yushupan = 0; 267 while (yushupan < 2) 268 { 269 int jieguoyue; 270 jieguoyue = expressie_canyu_linshi[chengchui] % yueshu; 271 if (jieguoyue == 0) 272 { 273 yushupan += 1; 274 if (yushupan == 2) 275 { 276 expressie_canyu_linshi[chengchui + 1] = yueshu; //修改临时数组 277 expressie_canyu[i][chengchui + 1] = yueshu; //修改原数组 278 break; 279 } 280 } 281 yueshu += 1; 282 } 283 } 284 } 285 } 286 287 if (0 == minus) //如果不能有负数 288 { 289 //下面的大循环时修改乘法或除法前面的一个运算符号为加号 290 for (int gaijiahao = 0; gaijiahao < yunsuanfugeshu; gaijiahao++) 291 { 292 if (yunsuanfu[gaijiahao] == '*') 293 { 294 for (int gaijiahao1 = gaijiahao - 1; gaijiahao1 >= 0; gaijiahao1--) 295 { 296 if ((yunsuanfu[gaijiahao1] == '+') || (yunsuanfu[gaijiahao1] == '-')) 297 { 298 yunsuanfu[gaijiahao1] = '+'; 299 break; 300 } 301 } 302 } 303 if (yunsuanfu[gaijiahao] == '/') 304 { 305 for (int gaijiahao2 = gaijiahao - 1; gaijiahao2 >= 0; gaijiahao2--) 306 { 307 if ((yunsuanfu[gaijiahao2] == '+') || (yunsuanfu[gaijiahao2] == '-')) 308 { 309 yunsuanfu[gaijiahao2] = '+'; 310 if (yunsuanfu[gaijiahao2 + 2] == '-') 311 { 312 yunsuanfu[gaijiahao2 + 2] = '+'; 313 } 314 315 break; 316 } 317 } 318 } 319 } 320 //以上为修改乘法和除法符号前边的符号+ 321 //以下为判断正负 322 for (int fuhaochuan = 0; fuhaochuan < yunsuanfugeshu; fuhaochuan++) 323 { 324 if (yunsuanfu[fuhaochuan] == '-') 325 { 326 expressie_canyu[i][fuhaochuan + 1] = 1 + rand() % (expressie_canyu[i][fuhaochuan]); 327 } 328 } 329 330 //对运算式进行输出 331 //cout << "运算式中数的个数为:" << expressieNum_Num[i] << endl; 332 if (0 == printStyle) 333 { 334 int fuhao = 0; 335 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 336 { 337 cout << expressie_canyu[i][shu]; 338 339 for (; fuhao < yunsuanfugeshu;) 340 { 341 cout << yunsuanfu[fuhao]; 342 fuhao++; 343 break; 344 } 345 } 346 } 347 else 348 { 349 350 int fuhao = 0; 351 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 352 { 353 outfile << expressie_canyu[i][shu]; 354 355 for (; fuhao < yunsuanfugeshu;) 356 { 357 outfile << yunsuanfu[fuhao]; 358 fuhao++; 359 break; 360 } 361 } 362 outfile << endl; 363 //outfile.close(); 364 } 365 } 366 else //如果能有负数 367 { 368 //对运算式进行输出 369 //cout << "运算式中数的个数为:" << expressieNum_Num[i] << endl; 370 if (0 == printStyle) 371 { 372 int fuhao = 0; 373 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 374 { 375 cout << expressie_canyu[i][shu]; 376 377 for (; fuhao < yunsuanfugeshu;) 378 { 379 cout << yunsuanfu[fuhao]; 380 fuhao++; 381 break; 382 } 383 } 384 } 385 else 386 { 387 388 int fuhao = 0; 389 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 390 { 391 outfile << expressie_canyu[i][shu]; 392 393 for (; fuhao < yunsuanfugeshu;) 394 { 395 outfile << yunsuanfu[fuhao]; 396 fuhao++; 397 break; 398 } 399 } 400 outfile << endl; 401 //outfile.close(); 402 } 403 } 404 } 405 else //如果可以有余数 406 { 407 if (0 == minus) //如果不能有负数 408 { 409 //下面的大循环时修改乘法或除法前面的一个运算符号为加号 410 for (int gaijiahao = 0; gaijiahao < yunsuanfugeshu; gaijiahao++) 411 { 412 if (yunsuanfu[gaijiahao] == '*') 413 { 414 for (int gaijiahao1 = gaijiahao - 1; gaijiahao1 >= 0; gaijiahao1--) 415 { 416 if ((yunsuanfu[gaijiahao1] == '+') || (yunsuanfu[gaijiahao1] == '-')) 417 { 418 yunsuanfu[gaijiahao1] = '+'; 419 } 420 } 421 } 422 if (yunsuanfu[gaijiahao] == '/') 423 { 424 for (int gaijiahao2 = gaijiahao - 1; gaijiahao2 >= 0; gaijiahao2--) 425 { 426 if ((yunsuanfu[gaijiahao2] == '+') || (yunsuanfu[gaijiahao2] == '-')) 427 { 428 yunsuanfu[gaijiahao2] = '+'; 429 } 430 } 431 } 432 } 433 //以上为修改乘法和除法符号前边的符号+ 434 //以下为判断正负 435 for (int fuhaochuan = 0; fuhaochuan < yunsuanfugeshu; fuhaochuan++) 436 { 437 if (yunsuanfu[fuhaochuan] == '-') 438 { 439 expressie_canyu[i][fuhaochuan + 1] = 1 + rand() % (expressie_canyu[i][fuhaochuan + 1]); 440 } 441 } 442 443 //对运算式进行输出 444 //cout << "运算式中数的个数为:" << expressieNum_Num[i] << endl; 445 if (0 == printStyle) 446 { 447 int fuhao = 0; 448 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 449 { 450 cout << expressie_canyu[i][shu]; 451 452 for (; fuhao < yunsuanfugeshu;) 453 { 454 cout << yunsuanfu[fuhao]; 455 fuhao++; 456 break; 457 } 458 } 459 } 460 else 461 { 462 463 int fuhao = 0; 464 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 465 { 466 outfile << expressie_canyu[i][shu]; 467 468 for (; fuhao < yunsuanfugeshu;) 469 { 470 outfile << yunsuanfu[fuhao]; 471 fuhao++; 472 break; 473 } 474 } 475 outfile << endl; 476 //outfile.close(); 477 } 478 } 479 else //如果能有负数 480 { 481 //对运算式进行输出 482 //cout << "运算式中数的个数为:" << expressieNum_Num[i] << endl; 483 if (0 == printStyle) 484 { 485 int fuhao = 0; 486 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 487 { 488 cout << expressie_canyu[i][shu]; 489 490 for (; fuhao < yunsuanfugeshu;) 491 { 492 cout << yunsuanfu[fuhao]; 493 fuhao++; 494 break; 495 } 496 } 497 } 498 else 499 { 500 501 int fuhao = 0; 502 for (int shu = 0; shu < expressieNum_Num[i]; shu++) 503 { 504 outfile << expressie_canyu[i][shu]; 505 506 for (; fuhao < yunsuanfugeshu;) 507 { 508 outfile << yunsuanfu[fuhao]; 509 fuhao++; 510 break; 511 } 512 } 513 outfile << endl; 514 //outfile.close(); 515 } 516 } 517 } 518 519 } 520 } 521 else //如果有括号 522 { 523 //以下各个变量为个数的定义 524 int yunsuanfugeshu; //变量运算符的个数 525 yunsuanfugeshu = expressieNum_Num[i] - 1; 526 char yunsuanfu[10]; //此数组存储运算符 527 528 int zuidakuohaoshu; //最大括号对数 529 if (expressieNum_Num[i] > 2) 530 { 531 zuidakuohaoshu = expressieNum_Num[i] - 2; 532 } 533 else 534 { 535 zuidakuohaoshu = expressieNum_Num[i] - 1; 536 } 537 538 int suijidekuohaoduishu; //随机的括号的对数 539 if (zuidakuohaoshu > 4) 540 { 541 suijidekuohaoduishu = 1 + rand() % 4; 542 } 543 else 544 { 545 suijidekuohaoduishu = 1 + rand() % zuidakuohaoshu; 546 } 547 int kuohaogeshu = 2 * suijidekuohaoduishu; //总的括号数,不是对数 548 char zifushuzu[30]; //定义字符数组,存储括号和运算符 549 int zifushuzulength = kuohaogeshu + yunsuanfugeshu; //括号和运算符的总长度 550 551 //对字符数组进行初始化 552 for (int chushihua = 0; chushihua < 30; chushihua++) 553 { 554 zifushuzu[chushihua] = 'n'; 555 } 556 557 //以下循环为运算符数组赋值 558 for (int j = 0; j < yunsuanfugeshu; j++) //对运算符数组进行赋值 559 { 560 if (0 == multiply_divide) //如果没有乘除法 561 { 562 int sign_noMD; //数字代表符号 563 sign_noMD = 1 + rand() % 2; 564 if (1 == sign_noMD) 565 { 566 yunsuanfu[j] = '+'; 567 } 568 else 569 { 570 yunsuanfu[j] = '-'; 571 } 572 } 573 else 574 { 575 int sign_yesMD; //数字代表运算符,且含有乘除法 576 sign_yesMD = 1 + rand() % 4; 577 if (1 == sign_yesMD) 578 { 579 yunsuanfu[j] = '+'; 580 } 581 else if (2 == sign_yesMD) 582 { 583 yunsuanfu[j] = '-'; 584 } 585 else if (3 == sign_yesMD) 586 { 587 yunsuanfu[j] = '*'; 588 } 589 else if (4 == sign_yesMD) 590 { 591 yunsuanfu[j] = '/'; 592 } 593 } 594 } 595 596 //以下将几对括号存入二维数组中 597 char kuohaoshuzu[20][2]; 598 for (int kuohaojishu = 0; kuohaojishu < suijidekuohaoduishu; kuohaojishu++) 599 { 600 kuohaoshuzu[kuohaojishu][0] = '('; 601 kuohaoshuzu[kuohaojishu][1] = ')'; 602 } 603 604 //对括号二维数组中的每行进行选择,选择在上面定义的字符数组中的位置 605 //以下不考虑括号在不在字符数组的首位有两种不同的情况,所以在此不考虑在首位的情况 606 srand((int)time(0)); 607 for (int erweishuzuhangshu = 0; erweishuzuhangshu < suijidekuohaoduishu; erweishuzuhangshu++) 608 { 609 int zuosuijishuweizhi; //此变量代表生成一个随机数,此随机数代表左括号的位置 610 int yousuijishuweizhi; //此变量代表生成一个随机数,此随机数代表有括号的位置 611 612 if (zifushuzulength == 3) 613 { 614 zifushuzu[0] = '('; 615 zifushuzu[2] = ')'; 616 } 617 else 618 { 619 int n1=0,n2=0; //退出循环的标记 620 zuosuijishuweizhi = 1 + rand() % (zifushuzulength - 3); //此处可能出错 621 while (n1 != 1) 622 { 623 if (zifushuzu[zuosuijishuweizhi] == 'n') 624 { 625 zifushuzu[zuosuijishuweizhi] = '('; 626 n1 = 1; 627 } 628 else 629 { 630 zuosuijishuweizhi = 1 + rand() % (zifushuzulength - 3); 631 } 632 } 633 int aa = zuosuijishuweizhi + 2; 634 yousuijishuweizhi = aa + rand() % (zifushuzulength - aa); 635 while (n2 != 1) 636 { 637 if (zifushuzu[yousuijishuweizhi] == 'n') 638 { 639 zifushuzu[yousuijishuweizhi] = ')'; 640 n2 = 1; 641 } 642 else 643 { 644 int aa = zuosuijishuweizhi + 2; 645 yousuijishuweizhi = aa + rand() % (zifushuzulength - aa); 646 } 647 } 648 } 649 650 651 } 652 653 //将运算符数组加入到字符数组中 654 for (int yunsuanfujishu = 0; yunsuanfujishu < yunsuanfugeshu; yunsuanfujishu++) 655 { 656 for (int qq = 0; qq < zifushuzulength; qq++) 657 { 658 if (zifushuzu[qq] == 'n') 659 { 660 zifushuzu[qq] = yunsuanfu[yunsuanfujishu]; 661 break; 662 } 663 } 664 } 665 666 //校正字符数组,使得其中不能有相邻的括号 667 //下面是校正左括号 668 for (int xianlinkuohao = 0; xianlinkuohao < (zifushuzulength-1); xianlinkuohao++) 669 { 670 if (zifushuzu[xianlinkuohao] == '(' && zifushuzu[xianlinkuohao+1] == ')') 671 { 672 for (int ji = 1; ji < zifushuzulength; ji++) 673 { 674 if ((zifushuzu[ji] != '(')&&(zifushuzu[ji] != ')')&&(zifushuzu[ji+1]!=')')&&(zifushuzu[ji-1]!=')')) 675 { 676 char a; 677 a = zifushuzu[ji]; 678 zifushuzu[ji] = zifushuzu[xianlinkuohao]; 679 zifushuzu[xianlinkuohao] = a; 680 break; 681 } 682 } 683 } 684 if (zifushuzu[xianlinkuohao] == ')' && zifushuzu[xianlinkuohao+1] == '(') 685 { 686 for (int ji = 1; ji < zifushuzulength; ji++) 687 { 688 if ((zifushuzu[ji] != '(') && (zifushuzu[ji] != ')') && (zifushuzu[ji + 1] != ')') && (zifushuzu[ji - 1] != ')')) 689 { 690 char a; 691 a = zifushuzu[ji]; 692 zifushuzu[ji] = zifushuzu[xianlinkuohao+1]; 693 zifushuzu[xianlinkuohao+1] = a; 694 break; 695 } 696 } 697 } 698 } 699 //下面是校正右括号 700 for (int xianlinkuohao = 0; xianlinkuohao < (zifushuzulength - 1); xianlinkuohao++) 701 { 702 if (zifushuzu[xianlinkuohao] == '(' && zifushuzu[xianlinkuohao + 1] == ')') 703 { 704 for (int ji = 1; ji < zifushuzulength; ji++) 705 { 706 if ((zifushuzu[ji] != '(') && (zifushuzu[ji] != ')') && (zifushuzu[ji + 1] != '(') && (zifushuzu[ji - 1] != '(')) 707 { 708 char a; 709 a = zifushuzu[ji]; 710 zifushuzu[ji] = zifushuzu[xianlinkuohao+1]; 711 zifushuzu[xianlinkuohao+1] = a; 712 break; 713 } 714 } 715 } 716 if (zifushuzu[xianlinkuohao] == ')' && zifushuzu[xianlinkuohao + 1] == '(') 717 { 718 for (int ji = 1; ji < zifushuzulength; ji++) 719 { 720 if ((zifushuzu[ji] != '(') && (zifushuzu[ji] != ')') && (zifushuzu[ji + 1] != '(') && (zifushuzu[ji - 1] != '(')) 721 { 722 char a; 723 a = zifushuzu[ji]; 724 zifushuzu[ji] = zifushuzu[xianlinkuohao]; 725 zifushuzu[xianlinkuohao] = a; 726 break; 727 } 728 } 729 } 730 } 731 732 733 //cout << "括号的个数为:" << kuohaogeshu<< endl; 734 //cout << "运算符的个数为:" << yunsuanfugeshu<< endl; 735 //cout << "字符数组的个数为:" << zifushuzulength << endl; 736 //对字符数组进行输出 737 cout << "字符数组为:"; 738 for (int ii = 0; ii < zifushuzulength; ii++) 739 { 740 cout << zifushuzu[ii] << " "; 741 } 742 cout << endl; 743 744 /*//对运算式进行输出 745 int fuhaojishus0=0; 746 if (zifushuzulength == 3) 747 { 748 cout << "(" << expressie_canyu[i][0] << yunsuanfu[0] << expressie_canyu[i][1] << ")"; 749 } 750 else 751 { 752 for (int shuchushuzi = 0; shuchushuzi < expressieNum_Num[i]; shuchushuzi++) 753 { 754 cout << expressie_canyu[i][shuchushuzi]; 755 for (; fuhaojishus0 < zifushuzulength;) 756 { 757 while (zifushuzu[fuhaojishus0] == ')') 758 { 759 cout << ")"; 760 fuhaojishus0 += 1; 761 } 762 if (fuhaojishus0 < zifushuzulength) 763 { 764 cout << zifushuzu[fuhaojishus0]; //输出右括号紧邻的运算符或者是输出第一个符号 765 } 766 767 fuhaojishus0 += 1; 768 while (zifushuzu[fuhaojishus0] == '(') 769 { 770 cout << "("; 771 fuhaojishus0 += 1; 772 } 773 break; 774 } 775 } 776 }*/ 777 778 if (0 == printStyle) 779 { 780 int fuhaojishus0 = 0; 781 if (zifushuzulength == 3) 782 { 783 cout << "(" << expressie_canyu[i][0] << yunsuanfu[0] << expressie_canyu[i][1] << ")"; 784 } 785 else 786 { 787 for (int shuchushuzi = 0; shuchushuzi < expressieNum_Num[i]; shuchushuzi++) 788 { 789 cout << expressie_canyu[i][shuchushuzi]; 790 for (; fuhaojishus0 < zifushuzulength;) 791 { 792 while (zifushuzu[fuhaojishus0] == ')') 793 { 794 cout << ")"; 795 fuhaojishus0 += 1; 796 } 797 if (fuhaojishus0 < zifushuzulength) 798 { 799 cout << zifushuzu[fuhaojishus0]; //输出右括号紧邻的运算符或者是输出第一个符号 800 } 801 802 fuhaojishus0 += 1; 803 while (zifushuzu[fuhaojishus0] == '(') 804 { 805 cout << "("; 806 fuhaojishus0 += 1; 807 } 808 break; 809 } 810 } 811 } 812 } 813 else 814 { 815 int fuhaojishus0 = 0; 816 if (zifushuzulength == 3) 817 { 818 outfile << "(" << expressie_canyu[i][0] << yunsuanfu[0] << expressie_canyu[i][1] << ")"; 819 outfile << endl; 820 } 821 else 822 { 823 for (int shuchushuzi = 0; shuchushuzi < expressieNum_Num[i]; shuchushuzi++) 824 { 825 outfile << expressie_canyu[i][shuchushuzi]; 826 for (; fuhaojishus0 < zifushuzulength;) 827 { 828 while (zifushuzu[fuhaojishus0] == ')') 829 { 830 outfile << ")"; 831 fuhaojishus0 += 1; 832 } 833 if (fuhaojishus0 < zifushuzulength) 834 { 835 outfile << zifushuzu[fuhaojishus0]; //输出右括号紧邻的运算符或者是输出第一个符号 836 } 837 838 fuhaojishus0 += 1; 839 while (zifushuzu[fuhaojishus0] == '(') 840 { 841 outfile << "("; 842 fuhaojishus0 += 1; 843 } 844 break; 845 } 846 } 847 outfile << endl; 848 } 849 } 850 851 } 852 853 cout << endl; 854 } 855 856 outfile.close(); 857 858 return 0; 859 860 }
实验截图:
项目计划总结:
日期\任务 | 听课/时 | 编写程序/时 | 查阅资料/时 | 日总计/时 |
星期一 | 2 | 1.5 | 0.5 | 4 |
星期二 | 2 | 2 | ||
星期三 | 3 | 1 | 4 | |
星期四 | 2 | 2 | 4 | |
星期五 | 2.5 | 1 | 3.5 | |
星期六 | 5 | 2 | 7 | |
星期日 | ||||
周总计 | 4 | 15.5 | 4.5 |
24.5 |
时间记录日志:
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/7 | 14:00 | 15:50 | 10 | 100 | 上课 | 软件工程 |
16:30 | 18:00 | 60 | 编写程序 | 四则运算作业 | ||
21:30 | 22:00 | 30 | 阅读书籍 | 《构建之法》 | ||
3/8 | 19:00 | 21:00 | 20 | 90 | 编写程序,查阅资料 | 四则运算作业 |
3/9 | 14:25 | 16:30 | 15 | 110 | 编写程序 | 四则运算作业 |
17:00 | 18:00 | 60 | 查阅资料和阅读《构建之法》 | |||
21:00 | 22::00 | 60 | 编写程序 | 四则运算作业 | ||
3/10 | 14:00 | 15:50 | 10 | 100 | 上课 | 软件工程上课 |
21:20 | 22:10 | 50 | 查阅资料,编写程序 | 四则运算作业 | ||
3/11 | 16:20 | 18:30 | 10 | 120 | 编写程序 | |
19:40 | 20:30 | 50 | 阅读《构建之法》 | |||
21:00 | 21:45 | 45 | 查阅资料 | 上网查阅资料 | ||
3/12 | 9:00 | 11:40 | 160 | 编程 | 作业 | |
12:20 | 15:00 | 160 | 调试程序 | |||
17:00 | 写博客 |
缺陷记录日志:
日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间&问题描述 |
3/7 | 1 | 编码 | 编译 | 花费半小时,负数问题得不到控制。 |
3/8 | ||||
3/9 | ||||
3/10 | 2 | 编码 | 编译 | 花费1.5小时,运算式输出有多余项,循环不正确。 |
3/11 | 3 | 编码 | 编译 | 花费半小时,调试过程出错,除数不能为零 |