• 大小: 11KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签: C语言  四则运算    

资源简介

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


评论

共有 条评论