c语言编程,编一个多功能计算器

能完成简单四则运算,混合运算,乘方,开方,及进制转换

#define MAX 100

typedef struct //运算数
{
double a[MAX];
int top;
}OPND;

typedef struct //运算符
{
char a[MAX];
int top;
}OPTR;

void Init_OPND(OPND *s); //初始化运算数栈
void Push_OPND(OPND *s,double x); //push一个运算数
double Pop_OPND(OPND *s); //pop一个运算数
double GetTop_OPND(OPND *s); //取栈顶运算数
void Init_OPTR(OPTR *s); //初始化运算符栈
void Push_OPTR(OPTR *s,char x); //push一个运算符
char Pop_OPTR(OPTR *s); //pop一个运算符
char GetTop_OPTR(OPTR *s); //取栈顶运算符
int IsOpr(char c); //判断输入字符是否为运算符
char Precede(char s,char c); //判断字符的优先级
double Operate(double x,char opr,double y); //计算

void Init_OPND(OPND *s) //初始化运算数栈

{
s->top =-1;
}

void Init_OPTR(OPTR *s) //初始化运算符栈

{
s->top =-1;
}

void Push_OPND(OPND *s,double x) //push一个运算数

{
s->top ++;
s->a [s->top ]=x;
}

void Push_OPTR(OPTR *s,char x) //push一个运算符

{
s->top ++;
s->a [s->top ]=x;
}

double Pop_OPND(OPND *s) //pop一个运算数
{
double x;
x=s->a [s->top];
s->top --;
return x;
}

char Pop_OPTR(OPTR *s) //pop一个运算符

{
char x;
x=s->a [s->top];
s->top --;
return x;
}

double GetTop_OPND(OPND *s) //取栈顶运算数

{
return (s->a[s->top]);
}

char GetTop_OPTR(OPTR *s) //取栈顶运算符

{
return (s->a[s->top]);
}

int IsOpr(char c) //判断输入字符是否为运算符
{
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.')
return 1;
else
return 0;
}

char Precede(char s,char c) //判断字符的优先级
{
switch(s)
{
case '+':
case '-':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;

case '*':
case '/':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;

case '(':
{
if(c==')')
return '=';
else
return '<';
}
break;

case ')':
{
return '>';
}
break;

case '#':
{
if(c=='#')
return '=';
else
return '<';

}
break;
}
return 0;
}

double Operate(double x,char opr,double y) //计算
{
double result;
switch (opr)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
case '*':
result = x * y;
break;
case '/':
result = x / y;
break;
}
return result;
}

参考资料:这是我自己没事写的,可以运用的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-29
界面需要吗?追问

不需要,只要源程序,最后能拿proteus仿真出来就行