后缀表达式c语言程序,计算后缀表达式——C语言实现

程序相对简单易懂,运行程序,

在命令行中输入:123+*#(注意:由于输入字符,以‘#’结束)

输出:5.000000#include

#include

typedef struct

{

float *base;

float *top;

int StackSize;

}Stack;

//创建一个栈,100为Maxsize,#define无法定义

void Createstack(Stack &s)

{

s.base=(float *)malloc(100 * sizeof(float));

s.top=s.base;

s.StackSize=100;

}

//栈顶指针

float top(Stack s)

{

if(s.top==s.base)

{

return -1;

printf("error!\n");

//栈满

}

return *(s.top-1);

}

// 入栈程序

void push(Stack &s,float elem)

{

if(s.top-s.base>=s.StackSize)

{

//扩展栈空间

s.base=(float *)realloc(s.base,(s.StackSize+10)*sizeof(float));

s.top=s.base+s.StackSize;

s.StackSize+=10;

}

*s.top++ = elem;

}

//出栈程序

void pop(Stack &s)

{

if(s.top==s.base)

{

//栈空

printf("error!\n");

return ;

}

s.top--;

}

//判断输入运算符

int operate(char c)

{

switch(c)

{

case '+' :return 1;

case '-' :return 1;

case '*' :return 1;

case '/' :return 1;

default :return 0;

}

}

//输入表达式

float cal(float a,float b,char c)

{

switch(c)

{

case '+' :return a+b;

case '-' :return a-b;

case '*' :return a*b;

case '/' :return a/b;

}

}

//主函数

int main()

{

float a,b,result;

Stack s;

Createstack(s);

char c1='0';

printf("输入后缀表达式:");

while(c1!='#')

{

c1=getchar();

if(!operate(c1))

{

push(s,(float) (c1-48));

}

else

{

b=top(s);

pop(s);

a=top(s);

pop(s);

result=cal(a,b,c1);

push(s,result);

}

}

printf("%f\n",result);

system("pause");

//创建一个新栈,用于计算n的阶乘

Stack m;

Createstack(m);

float i,n,item = 1;

printf("请输入一个数字:");

scanf("%f",&n) ;

for (float i = n; i >= 1; i--)

push(m, i);

while (m.top != m.base){

item= top(m) * item;

pop(m);

}

printf("n的阶乘为:");

printf("%f",item) ;

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值