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 依靠...