计算后缀表达式——C语言实现

xiaoxiao2021-02-28  68

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

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

输出:5.000000

#include <stdio.h> #include <stdlib.h> 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; }
转载请注明原文地址: https://www.6miu.com/read-2624896.html

最新回复(0)