资源简介
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
相关资源
- 哈夫曼树的建立(Huffman Tree C语言实现
- 51单片机c语言4x4矩阵键盘实验详细操
- 唯一可译码的辨别 C语言实现
- 模拟退火算法含有C语言源代码
- 五点三次平滑滤波C语言程序
- 使用c语言实现基于图的图像分割代码
- C语言套接字编程TCP连接
- C语言学生信息管理系统附代码73988
- ubuntu交叉编译mysql的C语言程序到ARM开
- 51单片机-舵机控制C语言程序
- C语言实现cordic sinx的算法
- 好玩的C语言代码
- 经典编程900题c语言
- C语言版课室管理系统
- 《新概念51单片机C语言教程--入门提高
- 矩阵求逆算法c语言编程
- 左手法则c语言程序
- BCH3121编码译码解码程序源代码——
- 宇视科技C语言面试题
- 三次样条插值算法c语言
- 模糊pid算法c语言
- 规定3个空瓶子换一瓶饮料,现在又
- 八数码宽度优先搜索加注释.txt
- 诗词大会登录、诗词查找、诗词填空
- C语言标准函数库详解.pdf
- 西南交大考研复试C语言上机真题.ra
- 通讯录管理系统 源代码.rar
- 课程设计——C语言编写图书管理系统
- c语言程序设计_第3版_何钦铭_课后答案
- 2019年全国计算机考试二级C语言——公
评论
共有 条评论