主题:对不起,上一个发错了,这一个就真的要你们帮我了!!
流氓兔
[专家分:140] 发布于 2005-09-03 11:20:00
写一个程序,模拟袖珍计算器的加、减、乘、除四则运算。该程序能
读入数据;并按算式计算出结果。如当你在终端键盘上打入:
3.5+0.7*10=
后,程序将显示出结果10.5,且把它输出。
帮个忙吧!!!!!!!!!!![em11][em12]
回复列表 (共3个回复)
沙发
lzl1403 [专家分:1670] 发布于 2005-09-03 17:14:00
字符串操作,不是很难,不过很麻烦的喔!
板凳
阿Ben [专家分:2200] 发布于 2005-09-03 19:19:00
我很久以前编过一个,但这程序有点儿问题,一直没有修正。大家有兴趣就帮忙修一修吧!
var
c,d:char;
r:real;
str1,str2:string;
a,b,xxx:integer;
procedure readc;
begin
d:=c;
read(c)
end;
function ji(n1:real;d:char;n2:real):real;
begin
case d of
'+':ji:=n1+n2;
'-':ji:=n1-n2;
'*':ji:=n1*n2;
'/':ji:=n1/n2;
'^':ji:=exp(n2*ln(n1));
'|':ji:=exp(1/n2*ln(n1))
end
end;
function shun(c:char):integer;
begin
case c of
'=',')':shun:=0;
'+','-':shun:=1;
'*','/':shun:=2;
'^','|':shun:=3
end
end;
function calc:real;
var
s:string;
a:array[1..7]of real;
b:array[1..7]of char;
i,xxx:integer;
begin
i:=1;
s:='';
repeat
if (c>='0')and(c<='9')or(c='.')or(c='e')
then s:=s+c
else if ((d<'0')or(d>'9'))and((c='+')or(c='-'))
then s:=s+c
else begin
if length(s)>0 then begin
val(s,a[i],xxx);
s:=''
end;{if}
case c of
'(':begin
readc;
a[i]:=calc;
i:=i-1
end;
'+','-','*','/','^','|','=',')':begin
b[i]:=c;
while (i>1) and (shun(b[i-1])>=shun(b[i])) do
begin
a[i-1]:=ji(a[i-1],b[i-1],a[i]);
b[i-1]:=b[i];
a[i]:=0;
i:=i-1;
end;{while}
end;{case+-*/}
end;{case}
i:=i+1;
end;{else}
if (c='=')or(c=')')then c:='z' else readc;
until (c='z')or(c='o');
calc:=a[1];
end;
3 楼
阿Ben [专家分:2200] 发布于 2005-09-03 19:19:00
(继续)
begin
read(c);
while c<>'o' do begin
r:=calc;
str(r,str1);
str2:=copy(str1,length(str1)-2,length(str1));
val(str2,a,xxx);
if abs(a)<=16 then begin
if a<0 then str(r:16:15,str1)
else str(r:16:15-a,str1);
b:=16;
while (str1[b]='0') or (str1[b]='.') do b:=b-1;
str1:=copy(str1,1,b);
writeln(str1:74);
end{if}
else begin
str1:=copy(str1,1,length(str1)-4);
b:=length(str1);
while (str1[b]='0') or (str1[b]='.') do b:=b-1;
str1:=copy(str1,1,b);
writeln(str1:74,' E',a:3);
end;{else}
readln;
readc
end
end.
程序可处理+-*/和乘方(^)、开方(|),并且支持括号运算,输入表达式要以“=”结束,输入“o”退出。
我来回复