資源簡(jiǎn)介
1、可以計(jì)算多位整數(shù)或者小數(shù)范圍內(nèi)的四則運(yùn)算。。
2、C語言,通過入棧方式實(shí)現(xiàn)四則運(yùn)算優(yōu)先級(jí)順序。。
3、用了兩個(gè)棧實(shí)現(xiàn),操作數(shù)棧和運(yùn)算符棧,這一點(diǎn)不是很讓人滿意。。
4、具體實(shí)現(xiàn)方式可參考嚴(yán)蔚敏《數(shù)據(jù)結(jié)構(gòu)》相應(yīng)內(nèi)容。。

代碼片段和文件信息
#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? {
if?(arrOP[i]?==?a)
{
aOrder?=?i;
break;
}
}
for?(i?=?0;?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ǐng)輸入一個(gè)合法的有理數(shù)范圍內(nèi)的四則運(yùn)算表達(dá)式.(退出請(qǐng)輸入q后按回車)\n“);
printf(“可以包含加\‘+\‘減\‘-\‘乘\‘*\‘除\‘/\‘和小括號(hào)\‘()\‘以等號(hào)\‘=\‘結(jié)尾.\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);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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
評(píng)論
共有 條評(píng)論