如图
源码
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 #include<QString> 4 5 6 char *q; 7 int k=0; 8 9 10 11 double biaodas(); 12 double xiang(); 13 double yinz()//求一个因子的值 14 { 15 double res = 0; 16 char tem = q[k]; 17 if (tem == '(')//因子可能是一个括号包起来的表达式,递归到求表达式 18 { 19 k++; 20 res = biaodas(); 21 k++; 22 } 23 else if(tem=='s') 24 { 25 if(q[k+1]=='q') 26 { 27 k+=4; 28 res=sqrt(yinz()); 29 } 30 else { 31 k+=3; 32 res=sin(yinz()); 33 } 34 35 } 36 else if(tem=='c') 37 { 38 k+=3; 39 res=cos(yinz()); 40 } 41 else if(tem=='t') 42 { 43 k+=3; 44 res=tan(yinz()); 45 } 46 else if(tem=='l') 47 { 48 k++; 49 if(q[k]=='g') 50 { 51 k++; 52 res=log10(yinz()); 53 } 54 if(q[k]=='n') 55 { 56 k++; 57 res=log(yinz()); 58 } 59 } 60 else//计算出多个十进制数字符连续组成的数的大小 61 { 62 if(q[k]=='p'&&q[k+1]=='i') 63 { 64 k+=2; 65 res=3.14159265; 66 return res; 67 } 68 while (isdigit(tem))//判断tem是不是十进制的字符 69 { 70 res = res * 10 + tem - '0'; 71 k++; 72 tem = q[k]; 73 } 74 if (tem == '.')//判断有没有小数 75 { 76 double k1 = 10; 77 k++; 78 tem=q[k]; 79 while (isdigit(tem)) 80 { 81 res += (tem-'0') / k1; 82 k1 *= 10; 83 k++; 84 tem = q[k]; 85 } 86 } 87 } 88 return res; 89 } 90 double xiang()//求一个多项式的值 91 { 92 double res = yinz(); 93 int flag = 1; 94 while (flag) 95 { 96 char tem = q[k]; 97 if (tem == '*' || tem == '/')//判断乘除把多项式的求解分解为求多个因子的值 98 { 99 k++; 100 double va = yinz(); 101 if (tem == '*') 102 res *= va; 103 else 104 res /= va; 105 } 106 else flag = 0; 107 } 108 return res; 109 } 110 double biaodas()//求表达式的值 111 { 112 double res = xiang(); 113 int flag = 1; 114 while (flag) 115 { 116 char tem = q[k]; 117 if (tem == '+' || tem == '-')//判断乘除把表达式的求解分解为求多多项式的值 118 { 119 k++; 120 double va = xiang(); 121 if (tem == '+') 122 res += va; 123 else 124 res -= va; 125 } 126 else flag = 0; 127 } 128 return res; 129 } 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 MainWindow::MainWindow(QWidget *parent) : 147 QMainWindow(parent), 148 ui(new Ui::MainWindow) 149 { 150 ui->setupUi(this); 151 } 152 QString str; 153 int i=0; 154 155 MainWindow::~MainWindow() 156 { 157 delete ui; 158 } 159 160 void MainWindow::on_pushButton_clicked() 161 { 162 char *p=str.toLatin1().data(); 163 if(i==0) 164 { 165 str+='1'; 166 i++; 167 } 168 else 169 { 170 if(p[i-1]==')'||p[i-1]=='i'); 171 else 172 { 173 str+='1'; 174 i++; 175 } 176 } 177 ui->textBrowser->setText(str); 178 } 179 180 void MainWindow::on_pushButton_2_clicked() 181 { 182 char *p=str.toLatin1().data(); 183 if(i==0) 184 { 185 str+='2'; 186 i++; 187 } 188 else 189 { 190 if(p[i-1]==')'||p[i-1]=='i'); 191 else 192 { 193 str+='2'; 194 i++; 195 } 196 } 197 ui->textBrowser->setText(str); 198 } 199 200 void MainWindow::on_pushButton_3_clicked() 201 { 202 char *p=str.toLatin1().data(); 203 if(i==0) 204 { 205 str+='3'; 206 i++; 207 } 208 else 209 { 210 if(p[i-1]==')'||p[i-1]=='i'); 211 else 212 { 213 str+='3'; 214 i++; 215 } 216 } 217 ui->textBrowser->setText(str); 218 } 219 220 void MainWindow::on_pushButton_4_clicked() 221 { 222 char *p=str.toLatin1().data(); 223 if(i==0) 224 { 225 str+='4'; 226 i++; 227 } 228 else 229 { 230 if(p[i-1]==')'||p[i-1]=='i'); 231 else 232 { 233 str+='4'; 234 i++; 235 } 236 } 237 ui->textBrowser->setText(str); 238 } 239 240 void MainWindow::on_pushButton_5_clicked() 241 { 242 char *p=str.toLatin1().data(); 243 if(i==0) 244 { 245 str+='5'; 246 i++; 247 } 248 else 249 { 250 if(p[i-1]==')'||p[i-1]=='i'); 251 else 252 { 253 str+='5'; 254 i++; 255 } 256 } 257 ui->textBrowser->setText(str); 258 } 259 260 void MainWindow::on_pushButton_6_clicked() 261 { 262 char *p=str.toLatin1().data(); 263 if(i==0) 264 { 265 str+='6'; 266 i++; 267 } 268 else 269 { 270 if(p[i-1]==')'||p[i-1]=='i'); 271 else 272 { 273 str+='6'; 274 i++; 275 } 276 } 277 ui->textBrowser->setText(str); 278 } 279 280 void MainWindow::on_pushButton_7_clicked() 281 { 282 char *p=str.toLatin1().data(); 283 if(i==0) 284 { 285 str+='7'; 286 i++; 287 } 288 else 289 { 290 if(p[i-1]==')'||p[i-1]=='i'); 291 else 292 { 293 str+='7'; 294 i++; 295 } 296 } 297 ui->textBrowser->setText(str); 298 } 299 300 void MainWindow::on_pushButton_8_clicked() 301 { 302 char *p=str.toLatin1().data(); 303 if(i==0) 304 { 305 str+='8'; 306 i++; 307 } 308 else 309 { 310 if(p[i-1]==')'||p[i-1]=='i'); 311 else 312 { 313 str+='8'; 314 i++; 315 } 316 } 317 ui->textBrowser->setText(str); 318 } 319 320 void MainWindow::on_pushButton_9_clicked() 321 { 322 char *p=str.toLatin1().data(); 323 if(i==0) 324 { 325 str+='9'; 326 i++; 327 } 328 else 329 { 330 if(p[i-1]==')'||p[i-1]=='i'); 331 else 332 { 333 str+='9'; 334 i++; 335 } 336 } 337 ui->textBrowser->setText(str); 338 } 339 340 void MainWindow::on_pushButton_10_clicked() 341 { 342 char *p=str.toLatin1().data(); 343 if(i==0) 344 { 345 str+='.'; 346 i++; 347 } 348 else 349 { 350 if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='('||p[i]==')'||p[i-1]=='i'); 351 else 352 { 353 str+='.'; 354 i++; 355 } 356 } 357 ui->textBrowser->setText(str); 358 } 359 360 void MainWindow::on_pushButton_11_clicked() 361 { 362 char *p=str.toLatin1().data(); 363 if(i==0) 364 { 365 str+='0'; 366 i++; 367 } 368 else 369 { 370 if(p[i]==')'||p[i-1]=='i'); 371 else 372 { 373 str+='0'; 374 i++; 375 } 376 } 377 ui->textBrowser->setText(str); 378 } 379 380 void MainWindow::on_pushButton_12_clicked() 381 { 382 char *p=str.toLatin1().data(); 383 if(i==0); 384 else 385 { 386 if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='('); 387 else 388 { 389 str+='+'; 390 i++; 391 } 392 } 393 ui->textBrowser->setText(str); 394 } 395 396 void MainWindow::on_pushButton_13_clicked() 397 { 398 char *p=str.toLatin1().data(); 399 if(i==0); 400 else 401 { 402 if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='('); 403 else 404 { 405 str+='-'; 406 i++; 407 } 408 } 409 ui->textBrowser->setText(str); 410 } 411 412 void MainWindow::on_pushButton_14_clicked() 413 { 414 char *p=str.toLatin1().data(); 415 if(i==0); 416 else 417 { 418 if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='('); 419 else 420 { 421 str+='*'; 422 i++; 423 } 424 } 425 ui->textBrowser->setText(str); 426 } 427 428 void MainWindow::on_pushButton_15_clicked() 429 { 430 char *p=str.toLatin1().data(); 431 if(i==0); 432 else 433 { 434 if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='('); 435 else 436 { 437 str+='/'; 438 i++; 439 } 440 } 441 ui->textBrowser->setText(str); 442 } 443 444 void MainWindow::on_pushButton_16_clicked() 445 { 446 char *p=str.toLatin1().data(); 447 if(i==0) 448 { 449 str+='('; 450 i++; 451 } 452 else 453 { 454 if(p[i-1]=='('||p[i-1]==')'||(p[i-1]<='9'&&p[i-1]>='0')); 455 else 456 { 457 str+='('; 458 i++; 459 } 460 } 461 ui->textBrowser->setText(str); 462 } 463 464 void MainWindow::on_pushButton_17_clicked() 465 { 466 char *p=str.toLatin1().data(); 467 if(i==0) 468 { 469 str+=')'; 470 i++; 471 } 472 else 473 { 474 if((p[i-1]<='9'&&p[i-1]>='0')||p[i-1]=='i') 475 { 476 str+=')'; 477 i++; 478 } 479 } 480 ui->textBrowser->setText(str); 481 } 482 483 void MainWindow::on_pushButton_18_clicked() 484 { 485 if(str.length()!=0) 486 { 487 str.chop(1); 488 i--; 489 } 490 ui->textBrowser->setText(str); 491 } 492 493 void MainWindow::on_pushButton_19_clicked() 494 { 495 q=str.toLatin1().data(); 496 k=0; 497 QString str2=QString("%1").arg(biaodas()); 498 ui->textBrowser->setText(str2); 499 i=0; 500 str.clear(); 501 } 502 503 void MainWindow::on_pushButton_20_clicked() 504 { 505 char *p=str.toLatin1().data(); 506 if(i==0){ 507 str.append("sin"); 508 i+=3; 509 } 510 else if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='(') 511 { 512 str.append("sin"); 513 i+=3; 514 } 515 ui->textBrowser->setText(str); 516 } 517 518 void MainWindow::on_pushButton_21_clicked() 519 { 520 char *p=str.toLatin1().data(); 521 if(i==0){ 522 str.append("cos"); 523 i+=3; 524 } 525 else if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='(') 526 { 527 str.append("cos"); 528 i+=3; 529 } 530 ui->textBrowser->setText(str); 531 } 532 533 void MainWindow::on_pushButton_22_clicked() 534 { 535 char *p=str.toLatin1().data(); 536 if(i==0){ 537 str.append("tan"); 538 i+=3; 539 } 540 else if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='(') 541 { 542 str.append("tan"); 543 i+=3; 544 } 545 ui->textBrowser->setText(str); 546 } 547 548 void MainWindow::on_pushButton_23_clicked() 549 { 550 char *p=str.toLatin1().data(); 551 if(i==0){ 552 str.append("lg"); 553 i+=2; 554 } 555 else if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='(') 556 { 557 str.append("lg"); 558 i+=2; 559 } 560 ui->textBrowser->setText(str); 561 } 562 563 void MainWindow::on_pushButton_24_clicked() 564 { 565 char *p=str.toLatin1().data(); 566 if(i==0){ 567 str.append("ln"); 568 i+=2; 569 } 570 else if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='(') 571 { 572 str.append("ln"); 573 i+=2; 574 } 575 ui->textBrowser->setText(str); 576 } 577 578 void MainWindow::on_pushButton_25_clicked() 579 { 580 char *p=str.toLatin1().data(); 581 if(i==0){ 582 str.append("sqrt"); 583 i+=4; 584 } 585 else if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='(') 586 { 587 str.append("sqrt"); 588 i+=4; 589 } 590 ui->textBrowser->setText(str); 591 } 592 593 void MainWindow::on_pushButton_26_clicked() 594 { 595 str.clear(); 596 i=0; 597 ui->textBrowser->setText(str); 598 } 599 600 void MainWindow::on_pushButton_27_clicked() 601 { 602 char *p=str.toLatin1().data(); 603 if(i==0){ 604 str.append("pi"); 605 i+=2; 606 } 607 else if((p[i-1]<='9'&&p[i-1]>='0')||p[i-1]=='.'||p[i-1]==')'); 608 else 609 { 610 str.append("pi"); 611 i+=2; 612 } 613 ui->textBrowser->setText(str); 614 }
程序下载地址
链接:https://pan.baidu.com/s/1mkaf4lM
密码:rfpd