80c51用计算器程序
来源:互联网 发布:java编写syslog 编辑:程序博客网 时间:2024/04/30 04:54
//由于这原本是写给c51用的c程序,所以没有添加stdio等标准库
//并且考虑到51RAM有限,大部分变量用unsigned char以节省空间
include “operation.h”
char stack1[55], stack2[55];
int pt1=-1, pt2=-1;
void push(char ch, unsigned short i)
{
if(i==1)stack1[++pt1]=ch;
else if(i==2)stack2[++pt2]=ch;
}
char pop(unsigned short i)
{
if(i==1)return stack1[pt1–];
else return stack2[pt2–];
}
char top(unsigned short i)
{
if(i==1)return stack1[pt1];
else return stack2[pt2];
}
void RPExpression(char exp[])
{
unsigned char i;
unsigned char ch, temp;
push(‘@’,1);
for(i=0;exp[i]!=’\0’;i++)
{
ch=exp[i];
switch(ch)
{
case ‘(‘:
push(’ ‘,2);
push(ch,1);
break;
case ‘)’:
push(’ ‘,2);
while(top(1)!=’(‘)
{
temp=pop(1);
push(temp,2);
}
pop(1);//弹出’(’
break;
case ‘+’:
case ‘-‘:
push(’ ‘,2);
while(top(1)==’*’||top(1)==’/’||top(1)==’+’||top(1)==’-‘)
{
temp=pop(1);
push(temp,2);
}
push(ch,1);
break;
case ‘*’:
case ‘/’:
push(’ ‘,2);
while(top(1)==’*’||top(1)==’/’)
{
temp=pop(1);
push(temp,2);
}
push(ch,1);
break;
default:
push(ch,2);
break;
}
}
while(pt1>0)
{
temp=pop(1);
push(temp,2);
}
}
float getPRExpvalue()
{
float stack3[40];
int pt3=-1;
unsigned char i, j, dot=0, left, right, ch;float fir, sec, num, fra;//for(i=0;i<40;i++)stack3[i]=0;for(i=0;stack2[i]!='\0';i++){ ch=stack2[i]; if(ch>='0'&&ch<='9') { left=i; right=80; fra=num=dot=0; for(j=i+1;;j++) { if(stack2[j]=='.'){dot=j; continue;} if(!(stack2[j]>='0'&&stack2[j]<='9')){right=j-1; i=j-1; break;} } if(right!=80) { if(dot==0) { for(j=left;j<=right;j++)num=num*10+(stack2[j]-'0')*1.0; fra=0; } else { for(j=left;j<dot;j++)num=num*10+(stack2[j]-'0')*1.0; for(j="right;j">dot;j--)fra=(fra+(stack2[j]-'0')*1.0)/10.0; } stack3[++pt3]=num+fra; } } else if(ch=='+'||ch=='-'||ch=='*'||ch=='/') { fir=stack3[pt3--]; sec=stack3[pt3--]; switch(ch) { case '+': num=sec+fir; break; case '-': num=sec-fir; break; case '*': num=sec*fir; break; case '/': num=sec/fir; break; } stack3[++pt3]=num; }}return stack3[pt3];
}
void initialStack()
{
unsigned char i;
for(i=0;i<55;i++)stack1[i]=stack2[i]=’\0’;
pt1=pt2=-1;
}
以下是头文件
ifndef __OPERATION_H
define __OPERATION_H
void initialStack();//初始化栈空间
void RPExpression(char exp[]);//转化为逆波兰表达式
float getPRExpvalue();//获取逆波兰表达式的值
endif
- 80c51用计算器程序
- C#测试用计算程序执行时间
- 用计算器(程序员)计算IP地址
- 用计算机语言表白
- 第一个C51程序
- TLC1549 的c51程序
- C51 延时程序
- C51 DS18B20程序
- c51程序逆向分析
- c51闹钟程序
- C51常用延时程序
- C51 曼彻斯特译码程序
- 用计算机控制电路(220V)开关
- 学用计算机英语的良好习惯
- 用计算机语言的爱情表白
- 用计算机语言的爱情表白
- 用计算机语言的爱情表白
- 用计算机语言的爱情表白
- mybatis 简介与基本使用
- 看到一个极品笑话,哈哈
- Apache common-fileupload 组件的使用实例
- POJ 1860 Currency Exchange
- 同步与异步的概念
- 80c51用计算器程序
- 1591---交叉排序
- Android OKHttp介绍与使用(二)
- 2016.08.13【初中部 NOIP提高组 】模拟赛C题解
- 字典树(Codeforces Round #367 (Div. 2) Vasiliy's Multiset,Xor问题 )
- Android-自定义Toolbar的方法
- 可持久化线段树
- 炫丽的倒计时效果
- http服务-建立一个简单http客户端