程式設計設計簡單的計算器程式,程式設計設計一個簡單的計算器程式

時間 2021-06-28 17:27:16

1樓:匿名使用者

這種運算比較麻煩,不過4種運算子號優先順序相同應該簡單寫,我這裡有個演算法,能進行簡單的四則運算,delphi的,供參考

function math_evaluate(s0:string):extended;

function evaluate(s0:string):extended;forward;

procedure cleanup(var s0:string);

vari:integer;

begin

s0:=lowercase(s0);

i:=pos(' ',s0);

while i>0 do

begin

delete(s0,i,1);

i:=pos(' ',s0);

end;

end;

function getfirstopp(tot:integer;s0:string):integer;

const

sopps:string=('+-*/^');

vari:integer;

begin

if tot=0 then tot:=length(s0);

for i:=1 to 5 do

begin

result:=pos(sopps[i],s0);

if ((i<3) and (result>0)) then

if ((result=1) or (pos(s0[result-1],sopps)>0)) then

result:=0;

if result>0 then

if resultexit;

end;

if result>tot then

result:=0;

end;

function specialf(p1:integer;s0:string):extended;

varoperstr:string;

arg:extended;

begin

result:=0;

operstr:=copy(s0,1,p1-1);

if s0[length(s0)]<>')' then

exit;

operstr:=lowercase(operstr);

arg:=evaluate(copy(s0,p1+1,length(s0)-p1-1));

if operstr ='sin' then

result:=sin(arg)

else if operstr ='cos' then

result:=cos(arg)

else if operstr ='tan' then

result:=sin(arg)/cos(arg)

else if operstr ='arctan' then

result:=arctan(arg)

else if operstr ='log' then

result:=ln(arg)/ln(10)

else if operstr ='ln' then

result:=ln(arg)

else if operstr ='exp' then

result:=exp(arg)

else if operstr ='sqrt' then

result:=sqrt(arg)

else exit;

end;

function getvalue(s0:string):extended;

begin

result:=0;

if length(s0)<1 then exit;

if length(s0)=1 then

result:=strtofloat(s0)

else

case s0[1] of

'x':result:=1;

'y':result:=1;

'z':result:=1;

else result:=strtofloat(s0);

end;

end;

procedure matchbracket(var i:integer;s0:string);

varj,len:integer;

begin

j:=1;

len:=length(s0);

repeat inc(i);

if i>len then exit;

if s0[i]='(' then inc(j);

if s0[i]=')' then dec(j);

if j<0 then exit;

until j=0;

end;

function calculate(p1:integer;s0:string):extended;

varv1,v2:extended;

begin

result:=0;

v1:=evaluate(copy(s0,1,p1-1));

v2:=evaluate(copy(s0,p1+1,length(s0)-p1));

case s0[p1] of

'+': result:=v1+v2;

'-': result:=v1-v2;

'/': result:=v1/v2;

'*': result:=v1*v2;

'^': result:=exp(v2*ln(v1));

else exit;

end;

end;

function evaluate(s0:string):extended;

varp1,p2,q1:integer;

begin

p1:=pos('(',s0);

p2:=p1;

if p2>0 then

matchbracket(p2,s0);

if p1=1 then

begin

if p2=length(s0) then

begin

delete(s0,p2,1);

delete(s0,1,1);

result:=evaluate(s0);

end else

result:=calculate(p2+1,s0);

exit;

end;

q1:=getfirstopp(p1,s0);

if (p1+q1=0) then

begin

result:=getvalue(s0);

exit;

end;

if q1<>0 then

result:=calculate(q1,s0)

else if length(s0)>p2 then

result:=calculate(p2+1,s0)

else

result:=specialf(p1,s0);

end;

begin

trycleanup(s0);

result:=evaluate(s0);

except

result:=0;

end;

end;

2樓:匿名使用者

#include

#include

#include

#include

#define maxqsize 80

float qlist[maxqsize],qlist1[maxqsize],qlist2[maxqsize]; //定義三個全域性佇列

int front=0,rear=0,front1=0,front2=0,rear1=0,rear2=0,count=0,count1=0,count2=0;//定義三個佇列頭結點、尾結點、資料個數

main()

count++;

qlist[rear]=*c;

rear=(rear+1)%maxqsize;

break;}

case '-':

count++;

qlist[rear]=*c;

rear=(rear+1)%maxqsize;

break;}

case '=':

pop(); //顯示結果

break;

case 'c':

clearstack();

break;

case 'q':

clearstack();

exit(1);

default:

enter(atof(c));

break;}}

return 0;

}void enter(float num) //將資料入第二個佇列

count1++;

qlist1[rear1]=num;

rear1=(rear1+1)%maxqsize;

}void clearstack() //將三個佇列清空

void pop() //顯示結果

if(count!=0 && temp=='s')

sum=sqrt(qlist2[front2]);

if(count!=0 && temp=='n')

sum=sin(qlist2[front2]);

if(count!=0 && temp=='o')

sum=cos(qlist2[front2]);

printf("%f",sum);

}float qfront(float num1,float num2,char *temp)

else

break;

case '-':

if(count2==0)

else

break;

case '*':

if(count2==0) //如果第三個佇列中沒有資料,則從第二個佇列中讀出一個資料

else //否則,從第三個佇列中讀出資料

break;

case '/':

if(count2==0)

else

}else

else

}break;

case 's':

if(count2==0)

else

break;

case 'n':

if(count2==0)

else

break;

case 'o':

if(count2==0)

else

break;

}return number;

}float qfront1() //從第一個資料讀資料

temp=qlist1[front1];

count1--;

front1=(front1+1)%maxqsize;

return temp;

}void qinsert(float number) //將結果存入第三個佇列

count2++;

qlist2[rear2]=number;

rear2=(rear2+1)%maxqsize;

}其實這個程式用連結串列實現更好,但是由於時間關係,所以用了陣列。當然,這個程式還不是很完善,還有很多地方需要改進,比如可以用圖形介面來進行操作、可以將三個佇列放入一個結構體中等。

大三c 程式設計計算器高分懸賞

叔叔不騙你 本程式較簡單 你如果有興趣可以用棧實現進製轉換 用運算子過載實現加減乘除取餘等 自己編寫演算法實現三角函式計算等等 時間關係就寫到這了 include include include using namespace std define pi 3.14159265 class trigo...

怎麼用C語言程式設計簡單計算器,怎麼用C語言程式設計乙個簡單計算器?

include void main c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯 處理低階儲存器 產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可...

用c 設計簡單的計算器程式,只要求能進行加減乘除運算

煙子丹 include using std cin using std cout int main return 0 如果不限定for或while,還有兩種簡單思路 輸入乙個string遍歷字元,搜尋符號 2.while cin int while cin char while cin int 依靠...