如图

源码

  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