最简单计算器部分代码

2022-05-19 12:50:19   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《最简单计算器部分代码》,欢迎阅读!
计算器,代码,简单,部分

#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "math.h"

#define MAXSIZE 100 #define END '\n'

char ops[MAXSIZE]; //运算符栈

int ops_top; //运算符栈顶标识 double ovs[MAXSIZE]; //操作数栈

int ovs_top; //操作数栈顶标识 void push_ops(char x); //运算符进栈 void push_ovs(double x); //操作数进栈 char pop_ops(); //运算符出栈 double pop_ovs();//操作数出栈

char gettop_ops(); //取出运算符栈顶元素 double gettop_ovs(); //取出操作数栈顶元素 void inistack_ops(); //初始化运算符栈 void inistack_ovs(); //初始化操作数栈

char Precede(char t1,char t2); //判断t1t2的优先级别 int char_In(char c); //判断c是否为运算符

double Operate(double a,char theta,double b); //对出栈的两个数计算

double EvaluateExpression( );//使用算符优先算法进行算术表示式求值 //ops[]为运算符栈,ovs[]为操作数栈

int main(int argc, char* argv[]) { printf("请输入算术表达式,以回车结束\n"); printf("%f\n",EvaluateExpression( )); getchar(); }

double EvaluateExpression( ) {

//使用算符优先算法进行算术表示式求值 //ops[]为运算符栈,ovs[]为操作数栈

double a,b,temp1,temp2,temp3; char stack_x,theta,input_c;

inistack_ops(); //初始化运算符栈 push_ops(END); //使结束符进栈 inistack_ovs(); //初始化操作数栈


input_c=getchar(); stack_x=gettop_ops();

while(input_c!=END||stack_x!=END) //判断计算是否结束 { if (char_In(input_c)) //若输入的字符是7种运算符之一 { switch (Precede(stack_x,input_c)) { case '<': push_ops(input_c); //若栈顶(x)优先级<输入则输入进栈 input_c=getchar(); break; case '=': stack_x=pop_ops();//相等则出栈,即脱括号接受下一个字符 input_c=getchar(); break; case '>': theta=pop_ops(); b=pop_ovs(); a=pop_ovs(); push_ovs(Operate(a,theta,b)); break; } } else if(input_c>='0'&&input_c<='9')//input_c是操作数 { input_c=input_c-'0'; push_ovs(input_c); input_c=getchar(); } else { printf("非法字符\n"); exit(1); } stack_x=gettop_ops(); }

return(gettop_ovs()); }


本文来源:https://www.dywdw.cn/89ecdcc378563c1ec5da50e2524de518974bd371.html

推荐阅读