C++語言計算器源代碼_第1頁
C++語言計算器源代碼_第2頁
C++語言計算器源代碼_第3頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C+語言編寫。 。#include #include #include using namespace std;const double pi = 3.14159265; const double e const int SIZE = 1000;typedef struct node/ 為了處理符號而建立的鏈表( 如 : 1+(-2)char data;node *next;node;typedef struct stack_num/ 存儲 數(shù) 的棧double *top;double *base;stack_num;typedef struct stack_char/ 存儲 運算符號 的棧c

2、har *top;char *base;stack_char;stack_num S_num;/ 定義stack_char S_char;/ 定義char fu18 = n, ), +, -, *, T,%, A,Q, L, C, S, T, c, s, t, (;int compare1000;/ 表現(xiàn)出各運算符號的優(yōu)先級double shu1000;/ 存儲 數(shù) 的數(shù)組double dai_result;運算的結(jié)果,是為了處理 M運算(簡介函數(shù)里有 M的定義)int biao = 0;/ 和 dia_result 一樣,為了處理 M 運算char lineSIZE;/ 輸入的所要計算的表達

3、式void init()/ 初始化comparefu0 = -2;/ 用數(shù)字的大小表現(xiàn)出符號的優(yōu)先級comparefu1 = -1; comparefu2 = 2; comparefu3 = 2; comparefu4 = 4; comparefu5 = 4; comparefu6 = 4; comparefu7 = 5; for(int i = 8; i = 15; i+) comparefui = 6;為棧開辟空間同上comparefu16 = 7;S_num.base = (double*)malloc(sizeof(double)*SIZE);/S_char.base = (char*

4、)malloc(sizeof(char)*SIZE);/S_num.top = S_num.base;S_char.top = S_char.base;void push_num(double n)/ 數(shù)字進棧* +S_num.top = n;void push_char(char c)/ 運算符號進棧* +S_char.top = c;double pop_num()/ 數(shù)字出棧double m = *S_num.top;S_num.top-;return m;char pop_char()/ 運算符號出棧char cc = *S_char.top;S_char.top-;return cc

5、;char get_top_char()/ 得到運算符號的棧中最頂端的運算符號 return *S_char.top; double operate(double y, char c, double x)/ 對兩個數(shù)計算 ( 含是雙目運算符 : 如 *, / 等 等)double r;if(c = -)r = x - y;else if(c = +)r = x + y;else if(c = / & y != 0)r = x / y;else if(c = *)r = x * y;else if(c = A)r = 1;for(int i = 1; i = y; i+)r *= x;else

6、if(c = %)int r0 = (int)x % (int)y;r = double(r0);return r;double operate_one(double one, char cc)/對一個數(shù)運算 ( 含單目運算符 : 如 log(L),sin(S) 等等 )double r;if(cc = Q)r = sqrt(one);else if(cc = C)r = cos(one);else if(cc = S)r = sin(one);else if(cc = T)r = tan(one);else if(cc = c)r = acos(one);else if(cc = s)r =

7、 asin(one);else if(cc = t)r = atan(one);return r;求對數(shù)的值 double operate_L(double a, double b, char dian)/ double r = log(b) / log(a); return r; double compute()/ 對整個表達式的計算 char c;/ 表示運算符號int p = 0;/用于 shu+p, 先初始化int i, j;init();/ 進行初始化把運算的結(jié)果先進棧 , 在這個結(jié)果的基礎(chǔ)上繼續(xù)進行運push_char(n); linestrlen(line) = n; lines

8、trlen(line)+1 = 0; if(biao) push_num(dai_result);/ 算算biao = 0;for(i = 0; linei != 0;)/把表達式中的數(shù)字字符串轉(zhuǎn)化成可計算的數(shù)字int flag = 0;int flag1 = 1;/標記是否是運算符號/ int flag2 = 1;/標記是否出現(xiàn) _;double h = 0;int ge;/ 位數(shù)int biao_dian = 0;/ 是否是小數(shù)的類型while(1)flag1 = 1;for(j = 0; j = 16; j+) if(linei = fuj)flag1 = 0;break;if(line

9、i = _)break;if(linei = .)i+;ge = 0;biao_dian = 1;if(linei = P)shu+p = pi;i+;break;if(linei = E)shu+p = e;i+;break;if(flag1)h = h * 10 + (linei - 0);flag = 1;i+;if(biao_dian) ge+;elsebreak;if(flag)if(biao_dian)int r = 1;for(int k = 1; k = 0)push_num(m); i+;elseif(m = -1)c =+;else if(m= -2)c =1Jelse i

10、f(m= -3)c =1*1.Jelse if(m= -4)c =/;else if(m= -5)c =%;else if(m= -6)c =A;jelse if(m= -7)c =Q;else if(m= -8)c =L;else if(m= -9)c =C;else if(m= -10)c =S;else if(m= -11)c =T;else if(m= -12)c =c;else if(m= -13)c =s;else if(m= -14)c =t;else if(m= -15)c =(;else if(m= -16)c =);else if(m= -17)c =n;char ch =

11、get_top_char();/if(comparech = comparec & ch != ( & ch != n)if(ch = Q | ch = C | ch = S| ch = T| ch = c | ch = s | ch = t)double one = pop_num();char dian = pop_char();push_num(operate_one(one, dian);else if(ch = L)double one_L = pop_num();double two_L = pop_num();char dian = pop_char();push_num(ope

12、rate_L(two_L, one_L, dian);elsedouble x = pop_num();double y = pop_num();char dian = pop_char();if(dian = / & x = 0)/判斷是否除了 零 cout 由于您除了零,結(jié)果將是錯誤的 = 3) return 0;elsereturn 1; void output(double result)/ 打出結(jié)果printf( 所得結(jié)果是 : ); coutresultendl;void check()/ 檢查表達式是否合法void introduce();char cc;/ 決定計算器按哪種功能

13、進行計算double result;/ 結(jié)果void input();/ 定義if( check_kuohao() & check_char() )/ 看是否合法 , 合法則計算result = compute();output(result);cout輸入一個字符M或D或F,決定是否繼續(xù):cc)if(cc = M)system(cls);introduce();printf( 您上次所得結(jié)果為 : );coutresultendl;endl;cout 在上次計算結(jié)果的基礎(chǔ)上 , 請繼續(xù)輸入想計算的表達式dai_result = result;biao = 1;input();/ 輸入表達式b

14、reak;else if(cc = D) system(cls); introduce();cout 計算器已清零 , 請輸入您所要計算的表達式 endl; input();/ 輸入表達式break;else if(cc = F) system(cls); cout 計算器關(guān)閉 , 謝謝使用 !endl; break;elsecout 所輸入字符無效 , 請輸入一個字符 M 或 D 或 F!endl; continue;else/ 不合法,分兩種不合法if(check_kuohao() = 0 & check_char() = 1)cout 您所輸入的表達式括號不匹配 , 請重新輸入 :end

15、l;input();/ 輸入表達式elsecout 您所輸入的表達式不合法 , 請重新輸入 :next = NULL;int i;for(i = 0; linei != 0; i+)/ 建立鏈表 p = new node;p-data = linei;p-next = head-next;head-next = p;head = p;/ delete p;q = (node*)malloc(sizeof(node);head = root;if(root-next-data = + | root-next-data = -)/處理第一個字符p = new node;p-data = 0;p-n

16、ext = head-next;head-next = p;if(root-next != NULL)for(q = root-next; q; q = q-next)if(q-data = ( & (q-next-data = - | q-next-data = +)p = new node;p-data = 0;p-next = q-next; q-next = p;/ delete q;p1 = new node;int qi = -1;for(p1 = root-next; p1; p1 = p1-next) line+qi = p1-data;line+qi = 0;void inp

17、ut()/ 輸入cinline;if(biao = 0)tackle_fuhao();/ 處理負號 check();/ 檢查表達式是否合法 void introduce()/ 對計算器的符號功能的簡要介紹cout 計算器簡要介紹 endl;coutC(cos)S(sin) T(tan) a(arccos)c(arcsin) endl;cout789/cout456*cout123-cout0 .+A(ont(arctan) endl;%L(log)endl;M(M+) Q(sqrt) endl;cout 對于對數(shù)輸入乘方 ) F(off) Enter(=) endl;L2_5 表示以 2 為底 5 的對數(shù) endl;coutM( 在前面結(jié)果的基礎(chǔ)上繼續(xù)計算, 如:上次結(jié)果為 10,現(xiàn)輸入 +10.5*2)endl;coutD( 清零并繼續(xù)輸入 )endl;coutF( 計算機關(guān)閉 )endl;cout 輸入 P 就代表輸入圓周率 , 輸入 E 代表輸入自然對數(shù) endlendl;void print()system(color 2);cout歡迎使用本計算器 endl;cout 輸入一個字符串 on, 計算器開始啟動 start)if(start

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論