资源简介
//介绍程序
void introduction(){
cout<<"这是一个计算机程序,支持:+,-,*,/,(,)的浮点数运算"<<endl;
cout<<"请不要以+,-,*,/开头,请注意括号的匹配"<<endl;
cout<<"请不要输入不必要的括号"<<endl;
}
如输入1+3*1.2+(2+2.2)=
就会给计算结果8.8
代码片段和文件信息
#include
#include
using namespace std;
/***************************************************************/
//定义一个Stack
enum Error_code { success overflow underflow };
const maxsize=20;
template
class Stack {
public:
Stack();
bool empty() const;
bool full() const;
int size() const;
void clear();
Error_code top(T &item) const;
Error_code pop();
Error_code push(const T &item);
private:
int count;
T entry[maxsize];
};
template
Stack::Stack()
{ count=0;
}
template
bool Stack::empty () const
{ return count==0;
}
template
bool Stack::full () const
{ return count==maxsize;
}
template
int Stack::size() const
{ return count;
}
template
void Stack::clear()
{ count=0;
}
template
Error_code Stack::top (T &item) const
{
if (empty()) return underflow;
item= entry[count-1];
return success;
}
template
Error_code Stack::pop ()
{
if (empty()) return underflow;
count--;
return success;
}
template
Error_code Stack::push (const T &item)
{
if (full()) return overflow;
entry[count++]=item;
return success;
}
/***************************************************************/
//进行计算的函数
void calculate(char sStack&num)
{
double ab;
num.top (b);
num.pop ();
num.top (a);
num.pop ();
switch(s){
case‘+‘:num.push (a+b);break;
case‘-‘:num.push (a-b);break;
case‘*‘:num.push (a*b);break;
case‘/‘:if(b!=0.0) num.push (a/b);
else cout<<“分母不能为0“< break;
}
}
/***************************************************************/
//判断优先级,得到结果的函数
void do_command(Stack&numStack&ch){
string sentence;
string s;
int i=0;
double answer;
string char_num=““;
char sign;
cout<<“请输入要计算的式子“<
cin>>sentence;
s=sentence;
//接下来作为预读;
while(1)
{
if(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘)
{
char_num=char_num+sentence[i];
i++;
while(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘)
{char_num=char_num+sentence[i];
i++;}
//得到一个数以后进行压栈操作
num.push(atof(char_num.c_str()));
}
else
{
sign=sentence[i];
i++;//得到了一个字符以后进行压栈操作
ch.push (sign);
}
char_num=““;//当且仅当读入了2个数字以上才能继续进行
if(num.size()==2)
break;
}
while(sentence[i]!=‘\0‘){
if(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘){
char_num=char_num+sentence[i];
i++;
while(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘){
char_num=char_num+sentence[i];
i++;
}//得到一个数以后进行压栈操作
num.push(atof(char_num.c_str()));
}
else
{
sign=sentence[i];
i++;
switch(sign){
char c;
case‘+‘:
case‘-‘:ch.top(c);
if(c!=‘(‘)
{calculate(cnum);ch
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-01-18 13:50 计算机程序最终版本\
文件 5289 2012-03-24 14:29 计算机程序最终版本\calculate.cpp
目录 0 2013-01-18 13:48 计算机程序最终版本\Debug\
文件 4419 2012-03-24 14:29 计算机程序最终版本\计算机程序最终版本.dsp
文件 544 2012-03-24 14:20 计算机程序最终版本\计算机程序最终版本.dsw
文件 41984 2013-01-18 13:50 计算机程序最终版本\计算机程序最终版本.ncb
文件 48640 2013-01-18 13:50 计算机程序最终版本\计算机程序最终版本.opt
文件 1357 2013-01-18 13:46 计算机程序最终版本\计算机程序最终版本.plg
- 上一篇:二分法解非线性方程
- 下一篇:四位数码管计数器 0—9999计数器 c程序
相关资源
- C++课程设计——停车场管理
- linux C与C++混合编程通用makefile
- C++教程完整
- matlab的smooth()函数c++实现
- C++入门经典(第9版) ([美]Walter Sa
- 扫雷小游戏,c++版本
- 利用指针数组冒泡法排序
- dijkstra算法C++实现
- C++test v6.0.0.5破解版3
- 操作系统 C++ 页面置换算法含实验报告
- TelBook.cpp通讯录课程设计
- 声卡数据采集播放演示源程序vc.zip
- 向量类的设计与实现 VC++6.0
- KLT算法c++实现
- RSA加解密源码VC++实现
- mfc实现画图板源码+实验报告
- libstdc++-libc6.2-2.so.3.tar.gz
- C++ OOP实现贪吃蛇,EASYX图形界面
- c++ primer 第五版 中文版 源代码
- c++函数模板和类模板计实验报告
- c++试题哈工大
- 教室信息管理系统
- C++面向对象程序设计2007龚晓庆
- 酒店管理系统源码完整版C++
- C++大作业之员工管理系统
- DAA算法 VC++实现 画线
- 模糊c均值聚类+FCM算法的c++代码
- 数据结构C++版课后题答案
- C++公司人事管理课程设计
- 调节系统音量调节麦克风音量
评论
共有 条评论