計算器程式

2021-08-15 16:13:02 字數 4068 閱讀 3940

第乙個qt程式--計算器,對其做如下介紹

一、功能:

1.多項相加

2.一次計算結束後,計算結果可以繼續運算

3.對+,-是作為符號還是運算子的判斷

4.清零

隨時可以清零重新計算

5.按下乙個數字後,再按下乙個或不按運算子,最後按下等號時,計算結果為這個數字本身。

但是按下乙個數字後,按了多個運算子,結果為"error"

二、實現:

如果只是寫兩個數進行運算的,其演算法很簡單,但是對於多項相加的運算,邏輯較複雜一些。核心的計算邏輯主要是用了棧的思想,將多項表示式作兩次變化計算結果,即中綴表示式轉換為字尾表示式。

其中還有一些較為複雜的邏輯判斷,例如判斷+,-是作為符號還是運算子等

背景的實現方法是qpalette 的setbrush方法

icon是button的seticon方法

**如下,大部分已標註裡注釋

widget.h檔案如下

#ifndef widget_h

#define widget_h

#include #include #include namespace ui

class widget : public qwidget

;#endif // widget_h

widget.cpp

#include "widget.h"

#include "ui_widget.h"

1:50 完成所有功能 還需布置gui

14.28 完成

//檢查字串是否為純數字,帶有符號,小數點

bool check(qstring temp)

else if(!(temp.at(i)>='0' && temp.at(i)<='9' ) )

return false;

}return true;

}//靜態成員初始化

qstring widget::formula="";

qstring widget::tempnum="";

qstring widget::lastres="";

widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

void widget::init()

; //運算子陣列

qbuttongroup *numgroup = new qbuttongroup(this); //數字按鈕組,儲存0~9數字按鈕

qbuttongroup *signgroup = new qbuttongroup(this); //符號按鈕組,儲存'+','-','*','/','(',')','^'.

//將數字按鈕插入數字按鈕組

numgroup->addbutton(ui->bnt_0,0);

numgroup->addbutton(ui->bnt_1,1);

numgroup->addbutton(ui->bnt_2,2);

numgroup->addbutton(ui->bnt_3,3);

numgroup->addbutton(ui->bnt_4,4);

numgroup->addbutton(ui->bnt_5,5);

numgroup->addbutton(ui->bnt_6,6);

numgroup->addbutton(ui->bnt_7,7);

numgroup->addbutton(ui->bnt_8,8);

numgroup->addbutton(ui->bnt_9,9);

numgroup->addbutton(ui->bnt_point,10);

//將符號按鈕插入符號按鈕組

signgroup->addbutton(ui->bnt_plus,1);

signgroup->addbutton(ui->bnt_minus,2);

signgroup->addbutton(ui->bnt_multiply,3);

signgroup->addbutton(ui->bnt_divided,4);

signgroup->addbutton(ui->bnt_left,5);

signgroup->addbutton(ui->bnt_right,6);

signgroup->addbutton(ui->bnt_exp,7);

//將數字按鈕訊號與訊號發射器相連線

for(int i=0;i<11;i++)

//將符號按鈕訊號與訊號發射器相連線

for(int i=1;i<8;i++)

qobject::connect(ui->bnt_equal,signal(clicked(bool)),this,slot(onequalbntclicked(bool)));//等號按鈕,槽與訊號的鏈結

qobject::connect(ui->bnt_clear,signal(clicked(bool)),this,slot(onclearbntclicked(bool)));//清除按鈕,槽與訊號的鏈結

}void widget::onnumbntclicked(int a) //按下數字按鈕

else //按下的是小數點

ui->output->settext(formula);

}void widget::onsignbntclicked(qstring tempsign) //按下符號按鈕

void

widget::onequalbntclicked(bool)

//按下等號按鈕

qstring

tempres;

//一次運算的結果

if(list.size()!=0)

else

if(list.startswith("-"))

else

if(list.startswith("*"))

else

if(list.startswith("/"))

else

if(list.startswith("^"))

else

list.removefirst();

}
tempres=

stk.pop();

//最後的棧頂元素為最後計算結果

}
ui->output_2->settext(formula);

ui->output->settext(tempres);

lastres

=tempres;

//此次計算結果存入lastres

formula.clear();

tempnum.clear();

list.clear();

}
}
void

widget::onclearbntclicked(bool)

main.cpp

#include "widget.h"

Linux 計算器程式

使用圖形化工具 ide 或者 vscode,atom,sublime 等 編寫乙個計算器程式 calc 以 expr 應用為例,實現以下功能 能獲得命令列引數個數和每乙個引數的內容,即計算的數和操作符 operator 根據操作符和數,進行計算,並輸出計算結果。提交以下內容 程式源 實驗報告 實驗的...

C 逆波蘭計算器程式

在逆波蘭表示法中,所有運算子都跟在運算元的後面。比如,下列中綴表示式 1 2 4 5 採用逆波蘭表示法表示為 1 2 4 5 while 下乙個運算子或運算元不是檔案結束指示符 if 是數 將該數壓入到棧中 else if 是運算子 彈出所需數目的運算元執行運算 將結果壓入到棧中 else if 是...

實現計算器

dim boldot as boolean dim dblacc1,dblacc2 as double dim dblacc3 as double 10 dim strop as string private sub add num byval intnumber as integer if bol...