標籤:

如何用c++寫一個簡單的計算器程序?

之前學習的是C語言編程,現在在學習C++,C++ Primer看了近一半,習題也有做,基本知識點基本掌握,想找些項目鍛煉一下,邊動手邊學習,但不要知道如何開始?如何用C++寫個計算器?如何用C++繪製圖形界面?望大家幫助


給你一個解釋器的代碼吧

如果要改成圖形化的計算器的話需要用到GUI庫

代碼來自《C++ programming language》

#include&
#include&
#include& #include&
using namespace std;
enum Token_value{
NAME,NUMBER,END,PLUS="+",MINUS="-",MUL="*",DIV="/",PRINT=";",ASSIGN="=",LP="(",RP=")"
};
Token_value curr_tok=PRINT;
map& table;
double number_value;
string string_value;
int no_of_errors;
double expr(bool get);
double term(bool get);
double prim(bool get);
Token_value get_token();
double error(const string s)
{
no_of_errors++;
cerr&<&<"error:"&<&&>ch;
switch (ch) {
case 0:
return curr_tok=END;
case ";":case "*":case "/":case "+":case "-":case "(":case ")":case "=":
return curr_tok=Token_value(ch);
case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":case ".":
cin.putback(ch);
cin&>&>number_value;
return curr_tok=NUMBER;
default:
if (isalpha(ch)) {
cin.putback(ch);
cin&>&>string_value;
return curr_tok=NAME;
}
error("bad token");
return curr_tok=PRINT;
}
}
double prim(bool get)
{
if (get) get_token();
switch (curr_tok) {
case NUMBER:
{ double v=number_value;
get_token();
return v;
}
case NAME:
{ double v=table[string_value];
if (get_token()==ASSIGN) v=expr(true);
return v;
}
case MINUS:
return -prim(true);
case LP:
{ double e=expr(true);
if (curr_tok!=RP) return error(") expected");
get_token();
return e;
}
default:
return error("primary expected");
}
}
double term(bool get)
{
double left=prim(get);
for (;;)
switch (curr_tok) {
case MUL:
left*=prim(true);
break;
case DIV:
if (double d=prim(true)) {
left/=d;
break;
}
return error("divide by 0");
default:
return left;
}
}
double expr(bool get)
{
double left=term(get);
for(;;)
switch(curr_tok) {
case PLUS:
left+=term(true);
break;
case MINUS:
left-=term(true);
break;
default:
return left;
}
}
int main()
{
table["pi"]=3.1415926535897932385;
table["e"]=2.718284590452354;
while (cin) {
get_token();
if (curr_tok==END) break;
if (curr_tok==PRINT) continue;
cout&<&


GacLib - Getting Started

GacLib - Demos


上大學的時候學了後綴表達式,我就也琢磨著做個界面出來,然後就學了幾天Qt。

做了一個小計算器:

guodongxiaren/QCounter

不知道現在還能編譯過不。。當時還是能編譯出來的。。

後來本想繼續繼續豐富功能,加上科學計算,進位換算以及RGB色彩編碼的展示、不同進位的計算以及對應CMYK編碼換算等等。。其實也不難,可是然後就沒有然後了。。。


一定要C++么?C行不行?

jiangxincode/calculator · GitHub

絕對符合「簡單」兩字!


https://github.com/airtrack/luna/blob/master/examples/calculator.lua


C++的話可以看看Qt,熟悉一下single slot 的概念就可以寫,而且自帶齊全的文檔和一個計算器的demo,Github上還有人在做Qt的文檔翻譯

我大一的時候學了一個星期就能寫出來,不過後來不知道怎麼很方便的弄得好看(當時不知道QML)於是改用了WPF(逃

如果只要C++又要容易做得好看還要絲般順暢的話還是用輪子哥的GayLib 吧


剛剛寫了一個計算器,正好答這個問題。

有提到用mfc的,固然可以,不過我以為用qt會更容易上手一些。圖形界面什麼的拖拖控制項就行了,信號與槽的機制能讓你對程序結構更清晰,這樣可以省點時間思考演算法。

寫的時候注意棧的運用,逆波蘭什麼的。網上資料應該大把,有想法就動手,邊寫邊查吧。


你要是做計算器的話可以看看《c++實踐之路》


c++的話可以寫prefix 和postfix calculator

Let』s Build A Simple Interpreter. Part 7.

https://en.wikipedia.org/wiki/Reverse_Polish_notation#Postfix_algorithm


同志你真的不玩玩逆波蘭么


詳細百度 「MFC實現計算器」,一大堆博客文章教你。

感覺最好的辦法是:

找一本書,一本:MFC入門


推薦閱讀:

C++在acm里的優勢相比其他語言有多大?
如何入門CDQ分治?
利用C++ template,請問我該如何設計這個向量類(Vector)?
如何寫個程序找出現有C++工程里的所有函數?
為什麼int型的負數會比字元串函數length()返回的值大?

TAG:C | C入門 |