紧急求救!帮忙啦!谢谢!
完成一个科学计算器算出3*(2-5)+4%6
就是这个问题啦!
问题点数:100、回复次数:5Top
1 楼dcyu(Dd)回复于 2003-06-02 12:27:05 得分 50
偶倒是收藏了一个四则运算器:
http://vip.6to23.com/dcyu/TurboC/senior/8.html
科学计算器难度就高了些。Top
2 楼believebowps(I love .NET)回复于 2003-06-02 13:04:25 得分 0
不是啦,我只需要一些核心代码就行了.
谢谢.
^_^Top
3 楼believebowps(I love .NET)回复于 2003-06-02 13:16:21 得分 0
谁能帮我呀!就是需要一些代码呀!
呜呜~~~~~~~~~~~~~~~Top
4 楼mmmcd(超超)回复于 2003-06-02 13:28:38 得分 50
这是我所收藏的之一,还可以用
/*
Program Name: Mathematical Expression Calculator(using stacks,in ANSI C)
Language:ANSI C
Author: Feng ziqiao
Date: 2003-03-02
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#define Max 100
#define PLS '+'
#define MIN '-'
#define MUL '*'
#define DIV '/'
#define LB '('
#define RB ')'
#define POW '^'
#define FAC '!'
#define END ';'
#define PI 3.141592653589793238L
#define E 2.71828182845904523L
long double Factorial(long double n)
{ long double i,Fac;
Fac=1.0;
for(i=1.0;i<=n;i+=1.0)
Fac*=i;
return Fac;
}
int SymCmp(char s1,char s2)
{ if(s1==LB||s2==LB) return -1;
if(s2==RB||s2==END) return 1;
if(s1==FAC)
{ if(s2==FAC) return 0;
else return 1;
}
if(s1==POW)
{ if(s2==FAC) return -1;
if(s2==POW) return 0;
}
else if(s1==MUL||s1==DIV)
{ if(s2==FAC||s2==POW) return -1;
if(s2==MUL||s2==DIV) return 0;
}
else if(s1==PLS||s1==MIN)
{ if(s2==PLS||s2==MIN) return 0;
}
return 1;
}
int main()
{ char symbol[Max];
long double number[Max];
char expr[100];
int i,j,len,stop=0,ntop=0;
scanf("%s",expr);
len=strlen(expr);
expr[len]=END;
expr[len+1]=0;
len++;
for(i=0;i<len;i++)
{ if(isdigit(expr[i]))
{ number[ntop++]=(long double)atof(expr+i);
while(isdigit(expr[i])||expr[i]=='.')
i++;
}
else if(isalpha(expr[i]))
{ if(expr[i]=='p'||expr[i]=='P')
{ number[ntop++]=PI;
i++;
}
else if(expr[i]=='e'||expr[i]=='E')
number[ntop++]=E;
}
if(ispunct(expr[i]))
{ symbol[stop++]=expr[i];
while(stop>1)
{ if(symbol[stop-2]==LB&&symbol[stop-1]==RB)
{ stop-=2;
continue;
}
if(SymCmp(symbol[stop-2],symbol[stop-1])>=0)
{ switch(symbol[stop-2])
{ case PLS:
number[ntop-2]+=number[ntop-1];
break;
case MIN:
number[ntop-2]-=number[ntop-1];
break;
case MUL:
number[ntop-2]*=number[ntop-1];
break;
case DIV:
number[ntop-2]/=number[ntop-1];
break;
case POW:
number[ntop-2]=powl(number[ntop-2],number[ntop-1]);
break;
case FAC:
number[ntop-1]=Factorial(number[ntop-1]);
ntop++;
break;
}
symbol[stop-2]=symbol[stop-1];
stop--;ntop--;
}
else break;
}
}
}
printf("%.18Lf\n",number[0]);
return 0;
}Top
5 楼believebowps(I love .NET)回复于 2003-06-02 13:56:53 得分 0
谢谢各位!
哈哈Top




