大作業 計算器

2021-09-14 02:19:50 字數 4281 閱讀 4930

翁愷老師的計算器大作業~

改掉了逆波蘭表示式的一些bug如不能算小數等等

現在是真正的計算器了!

//功能強大的計算器

//可計算加減乘除乘方階乘,三角函式,反三角函式,自然對數,常用對數,高斯函式(floor),以e為底的指數函式(exp)

//如果函式後面是非負常數則不必加括號 如sin5,arcsin0.5等;如果是表示式或負數則需加括號 如cos(-0.5),ln(5!)

//by peter_h

15:00--20:00

12:45--1:00 debug 乾掉乙個小bug

19:00--19:30 增加指導介面

21:50--22:20 修復乙個bug

//修復前計算表示式sqrt(((200.2-200.8)^2+(200.55-200.8)^2+(200.9-200.8)^2+(201.15-200.8)^2+(201.2-200.8)^2)/20)時會出錯

//1.新增了對括號的強判斷 2.入棧前打入乙個括號

// 2021.6.13 10:50--11:30

// 增加了mode選擇功能

// 刪去了一些不用的**,a1改回了a

#include

#include

#include

#include

#include

#include

char stack[

10000];

//存符號

char cqueue[

10000];

//存字串sin cos等

char out[

10000

],in[

10000];

//輸出 輸入

int dtop,cfront=

1,top,len,ctail;

double dstack[

10000];

//存數字

void

beforecal

(char

*a);

char

scan_char

(void

)return ch;

}void

get(

char

*a)while

(ch!=

'\n'

)return;}

intf1

(int x)

//階乘

doublef2(

char

*d,double x)

//三角函式等

return1/

tan(x);}

elseif(

strcmp

(d,"csc")==

0)return1/

sin(x);}

elseif(

strcmp

(d,"sec")==

0)return1/

cos(x)

;elseif(

strcmp

(d,"arctan")==

0)return

atan

(x);

elseif(

strcmp

(d,"arccos")==

0)return x;

}elseif(

strcmp

(d,"arcsin")==

0)return

asin

(x);

}elseif(

strcmp

(d,"exp")==

0)return

exp(x)

;elseif(

strcmp

(d,"sinh")==

0)return

sinh

(x);

elseif(

strcmp

(d,"cosh")==

0)return

cosh

(x);

elseif(

strcmp

(d,"tanh")==

0)return

tanh

(x);

elseif(

strcmp

(d,"ln")==

0)return

log(x);}

elseif(

strcmp

(d,"lg")==

0)return

log10

(x);

}elseif(

strcmp

(d,"sqrt")==

0)return

sqrt

(x);

}elseif(

strcmp

(d,"floor")==

0)return

floor

(x);

else

return-1

;}bool isoperator

(char ch)

intprior

(char a)

//優先順序賦值

void

repolish

(char

* a)if(

isdigit

(a[i]))

//是數 就輸出 注意小數 輸出不用printf而是存到out陣列裡

out[len++]=

' ';

if(judge2)

cfront++

; out[len++]=

' ';

judge2=0;

}//sin等函式後面的輸入不加括號時 }if

(a[i]

=='(')if

(a[i]

==')')if

(judge3)

out[len++]=

' ';

para--;}

//右括號不入棧 一直輸出直到遇到左括號 棧頂top再減一下跳過左括號

while

(isoperator

(a[i]))

//遇到操作符 如果優先順序比棧頂的低 要把前面的優先順序也高的全部彈出 因此必須用while

else}}

// printf("%s",cqueue);

// printf("%s",out);

while

(top)

//彈出棧裡剩餘的東西

}void

beforecal

(char

*a)}if1

;if(judge==0)

repolish

(b);

else

}double

cal(

double x,

double y,

char ch)

double

calculate

(char

*a) dstack[dtop]=(

double)f1

((int)dstack[dtop]);

//單目 對棧頂操作就行

continue

;//操作完繼續讀取 不continue會出bug

// printf("%lf\n",dstack[dtop]);}if

(isalpha

(d[0])

) dstack[dtop]=f2

(d,(

double

)dstack[dtop]);

else}}

while

(a[i]

&&a[i]

!=' '

)i++

;//跳過轉換的那一段

}return dstack[dtop];}

void

scan_mode

(void

)else

if(mode==

'2')

}else

}int

main()

晚上寫物理實驗報告算不確定度時用計算器試了一下,結果出bug了。。。

一番思索和除錯後總算修復了!

以後就計算器就用它了~

Python 大作業3 簡單計算器

題目 利用python實現乙個計算器,可以計算小數複數等 import re def calculator string 去除括號函式 def get grouping string flag false ret re.findall string for i in ret temp cal i i...

嵌入式 LINUX 大作業 帶優先順序 計算器

在前段時間搞定了溫控系統後,嵌入式大作業要開始搞了 選定了計算器,一開始的想法是不能多不運算 但是前兩天找了點資料,然後看了相關的堆疊計算方法,於是決定好好搞一下表示式運算 因為lineedit settext qstring str 而計算則需要double型,所以需要格式的多次轉換,自己寫了個a...

棧的作業 簡單計算器

include include include include define max 15 define bool int typedef struct stack stack stack initstack s top 1 return s void destory stack s bool is...