资源简介
1、可以计算多位整数或者小数范围内的四则运算。。
2、C语言,通过入栈方式实现四则运算优先级顺序。。
3、用了两个栈实现,操作数栈和运算符栈,这一点不是很让人满意。。
4、具体实现方式可参考严蔚敏《数据结构》相应内容。。

代码片段和文件信息
#include
#include
#include
#include
#include
#include “CharStack.h“
#include “DoubleStack.h“
#define OP_NUM 7
char arrOP[OP_NUM] = {‘+‘ ‘-‘ ‘*‘ ‘/‘ ‘(‘ ‘)‘ ‘=‘};
char priority[OP_NUM][OP_NUM] =
{
{‘>‘ ‘>‘ ‘<‘ ‘<‘ ‘<‘ ‘>‘ ‘>‘}
{‘>‘ ‘>‘ ‘<‘ ‘<‘ ‘<‘ ‘>‘ ‘>‘}
{‘>‘ ‘>‘ ‘>‘ ‘>‘ ‘<‘ ‘>‘ ‘>‘}
{‘>‘ ‘>‘ ‘>‘ ‘>‘ ‘<‘ ‘>‘ ‘>‘}
{‘<‘ ‘<‘ ‘<‘ ‘<‘ ‘<‘ ‘=‘ ‘?‘}
{‘>‘ ‘>‘ ‘>‘ ‘>‘ ‘?‘ ‘>‘ ‘>‘}
{‘<‘ ‘<‘ ‘<‘ ‘<‘ ‘<‘ ‘?‘ ‘=‘}
};
char Compare(char a char b)
{
int i;
int aOrder bOrder;
aOrder = -1;
bOrder = -1;
for (i = 0; i < OP_NUM; i++)
{
if (arrOP[i] == a)
{
aOrder = i;
break;
}
}
for (i = 0; i < OP_NUM; i++)
{
if (arrOP[i] == b)
{
bOrder = i;
break;
}
}
if ((aOrder == -1) || (bOrder == -1))
{
printf(“Input illegal..\n“);
getch();
exit(0);
}
else if (priority[aOrder][bOrder] == ‘?‘)
{
printf(“Input illegal..\n“);
getch();
exit(0);
}
else
{
return (priority[aOrder][bOrder]);
}
}
double Operate(double a char op double b)
{
double result;
result = 0;
switch (op)
{
case ‘+‘:
result = a + b;
break;
case ‘*‘:
result = a * b;
break;
case ‘/‘:
if (fabs(b) < 0.000001)
{
printf(“Divisor cannot be zero..\n“);
getch();
exit(0);
}
result = a / b;
break;
case ‘-‘:
result = a - b;
break;
default:
printf(“\“%c\“ is unfinished..\n“ op);
getch();
exit(0);
break;
}
return (result);
}
int main()
{
CharStack op;//operator set..
DoubleStack num;//num set..
char c[1000];
double num1 num2;
char tempOP;
int length;
int isNum;
int isFloat;
int floatBit;
int i;
printf(“请输入一个合法的有理数范围内的四则运算表达式.(退出请输入q后按回车)\n“);
printf(“可以包含加\‘+\‘减\‘-\‘乘\‘*\‘除\‘/\‘和小括号\‘()\‘以等号\‘=\‘结尾.\n“);
gets(c);
length = strlen(c);
while ((c[0] != ‘q‘) || (length != 1))
{
InitCharStack(&op length);
InitDoubleStack(&num length);
PushChar(&op ‘=‘);
i = 0;
isNum = 0;
isFloat = 0;
while ((c[i] != ‘=‘) || (GetTopChar(op) != ‘=‘))
{
if ((c[i] >= 48) && (c[i] <= 57))
{
if (isNum == 1)
{
if (isFloat == 1)
{
floatBit++;
PushDouble(&num PopDouble(&num) + (c[i] - 48) / pow(10 floatBit));
}
else
{
PushDouble(&num PopDouble(&num) * 10 + c[i] - 48);
}
}
else
{
PushDouble(&num c[i] - 48);
isNum = 1;
}
i++;
}
else
{
if ((c[i] == ‘.‘) && (isNum == 1))
{
isFloat = 1;
floatBit = 0;
i++;
}
else
{
isNum = 0;
isFloat = 0;
switch (Compare(GetTopChar(op) c[i]))
{
case ‘<‘:
PushChar(&op c[i]);
i++;
break;
case ‘=‘:
PopChar(&op);
i++;
break;
case ‘>‘:
tempOP = PopChar(&op);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3456 2010-06-11 01:08 Calc.c
文件 29614 2010-10-19 22:45 Calc.exe
文件 1506 2010-06-11 01:08 CharStack.h
文件 1562 2010-06-11 01:08 DoubleStack.h
----------- --------- ---------- ----- ----
36138 4
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论