資源簡介
設計一個模擬計算器的程序,要求能對包含加、減、乘、除、括號運算符及SQR和ABS函數的任意整型表達式進行求解。

代碼片段和文件信息
#include
#include
#include?
#include
//運算符棧數組長度
#define?STACK_OPERATOR_LENGTH?100
//操作數棧數組長度
#define?STACK_DATE_LENGTH?100
//定義運算符棧
typedef?struct?OPStack
{
//定義運算符數組
char?opStack[STACK_OPERATOR_LENGTH];
//棧頂
int?top;
}OPStack*pOPStack;
//定義運算數棧
typedef?struct?DATAStack
{
//定義操作數數組;
double?stack[STACK_DATE_LENGTH];
int?top;
}DATAStack*pDATAStack;
//初始化運算符棧
void?InitpOPStack(pOPStack?&OPStack)
{
//為運算符棧分配空間
if(!(OPStack?=?(?pOPStack)malloc(?sizeof(OPStack?))))
{
printf(“分配內存空間失敗!\n“);
exit(-1);
}
OPStack->top=-1;
}
//初始化運算數棧
void?InitpDATAStack(pDATAStack?&pDStack)
{
//為運算數棧分配空間
if(!(pDStack?=?(?pDATAStack)malloc(sizeof(DATAStack))))
{
printf(“分配內存空間失敗!\n“);
exit(-1);
}
pDStack->top=-1;
}
//運算符進棧
void?PushOPStack(pOPStack?&pOPStack?char?ch)
{
pOPStack->opStack[++(pOPStack->top)]=ch;
}
//運算符出棧
void?PopOPStack(pOPStack?&pOStack?char?&ch)
{
?ch?=?pOStack->opStack[pOStack->top];
?pOStack->top--;
}
//運算數進棧
void?PushDATAStack(pDATAStack?&pDStack?double?d)
{
?++(pDStack->top);
?pDStack->stack[pDStack->top]?=?d;
}
//運算數出棧
void?PopDATAStack(pDATAStack?&pDStack?double?&d)
{
?d?=?pDStack->stack[pDStack->top];
?pDStack->top--;?
}
//清空運算符棧
void?ClearpOPStack(pOPStack?&pOStack)
{
?pOStack->top?=?-1;
}
//清空運算數棧
void?ClearpDATAStack(pDATAStack?&pDStack)
{
?pDStack->top?=?-1;
}
//獲取運算符棧頂元素
char?GetToppOPStack(pOPStack?&pOStack)
{
?return?pOStack->opStack[pOStack->top];
}
?//獲取運算數棧頂元素
double?GetToppDATAStack(pDATAStack?&pDStack)
{
?return?pDStack->stack[pDStack->top];
}
//區分?運算符?和?運算數?的函數,是運算符時返回true否則返回false
bool?IsOP(char?&ch)
{?//判斷是否為符號
?if?(?(ch?==?‘+‘)?||?(ch?==?‘-‘)?||?(ch?==?‘*‘)?||?(ch?==?‘/‘)?||?(ch?==?‘=‘)?||?(ch?==?‘A‘)?||?(ch?==?‘S‘)?||?(ch?==?‘a‘)?||?(ch?==?‘s‘)?||?(ch?==?‘(‘)?||?(ch?==?‘)‘)?)
??return?true;
?else
??return?false;
}
//參考《數據結構》(C語言版)第53頁?3.2.5表達式求值?表?3.1
char?Precede(char?op1?char?op2)
{
?char?tab[9][10];??//定義字符串的二維數組來存放運算符優先級的關系
?strcpy(?tab[0]?“>><<<><<>“?);
?strcpy(?tab[1]?“>><<<><<>“?);
?strcpy(?tab[2]?“>>>><><<>“?);
?strcpy(?tab[3]?“>>>><><<>“?);
?strcpy(?tab[4]?“<<<<<=< ?strcpy(?tab[5]?“>>>>E>>>>“?);
?strcpy(?tab[6]?“>>>><>>>>“?);
?strcpy(?tab[7]?“>>>><>>>>“?);
?strcpy(?tab[8]?“<<<< ?char?op[10];??//定義一維字符串數組來按優先級從低到高存放運算符
?strcpy(op?“+-*/()AS=“);
?int?i?j;
?for(?i?=?0;?i?9;?i++)
??if(?op[i]?==?op1)
???break;
?for(?j?=?0;?j?9;?j++)
??if(?op[j]?==?op2)
???break;
?return?tab[i][j];??//返回比較結果
}
void?exit_E()
{
??printf(“\n?|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n“);
??printf(“\n?|?***歡迎您的下次使用!謝謝!!!***???|?\n\n“);??//退出使用
??printf(“?|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n\n“);
}
??//對出棧的運算符和運算數進行計算
double?Operate(double?a?char?theta?double?b)
{
?double?s;
?switch(theta)
?{
?case?‘+‘:
??s?=?a?+?b;
??break;
?case?‘-‘:
??s?=?a?-?b;
??b
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-08-29?22:21??Debug\
?????文件??????217217??2014-07-11?13:36??Debug\jisuanqi.exe
?????文件??????307760??2014-07-11?13:36??Debug\jisuanqi.ilk
?????文件???????25175??2014-07-11?13:36??Debug\jisuanqi.obj
?????文件??????235928??2014-07-11?12:58??Debug\jisuanqi.pch
?????文件??????500736??2014-07-11?13:36??Debug\jisuanqi.pdb
?????文件???????41984??2014-07-11?13:43??Debug\vc60.idb
?????文件???????53248??2014-07-11?13:36??Debug\vc60.pdb
?????文件????????7893??2014-07-11?13:36??jisuanqi.cpp
?????文件????????3425??2014-07-11?13:43??jisuanqi.dsp
?????文件?????????524??2014-07-11?13:43??jisuanqi.dsw
?????文件???????41984??2014-07-11?13:43??jisuanqi.ncb
?????文件???????48640??2014-07-11?13:43??jisuanqi.opt
?????文件?????????250??2014-07-11?13:43??jisuanqi.plg
- 上一篇:fastKICA快速核ICA
- 下一篇:excel 2007版批量添加字符串插件
評論
共有 條評論