资源简介
//介绍程序
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++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 计算机远程唤醒和关机
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
川公网安备 51152502000135号
评论
共有 条评论