下载第一个全套驱动程迟宽蚂序软件包,解压后安装即可。
我跟你讲一下思路旁配吧,代虚纤码不想敲!首先你要设置一个成员变量或者全局变量标志,初始化标志,对不同的标志状态进行判断,一个状态判断里写设置定时器(SetTimer)和改变标志状态,另一个写(KillTimer)和改变标志状态差启仿。函数要是不会用就自己百度吧,很简单!C++计算春镇瞎器#include "iostream"
#include "string"
using namespace std
/旅耐/---------------------------------- Stack.h --------------------------
//定义Stack类
const maxsize=20
enum Error_code { success, overflow, underflow }
template <class T>
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 <class T>
Stack<T>::Stack() {
count=0
}
template <class T>
bool Stack<T>::empty () const {
return count==0
}
template <class T>
bool Stack<T>::full () const {
return count==maxsize
}
template <class T>
int Stack<T>::size() const {
return count
}
template <class T>
void Stack<T>::clear() {
count=0
}
template <class T>
Error_code Stack<扒空T>::top (T &item) const {
if (empty()) return underflow
item= entry[count-1]
return success
}
template <class T>
Error_code Stack<T>::pop () {
if (empty()) return underflow
count--
return success
}
template <class T>
Error_code Stack<T>::push (const T &item) {
if (full()) return overflow
entry[count++]=item
return success
}
//------------------------------------------额外函数------------------
bool user_says_yes()
{
int c
bool initial_response = true
do { // Loop until an appropriate input is received.
if (initial_response)
cout <<" (y,n)? " <<flush
else
cout <<"Respond with either y or n: " <<flush
do { // Ignore white space.
c = cin.get()
} while (c == '\n' || c ==' ' || c == '\t')
initial_response = false
} while (c != 'y' &&c != 'Y' &&c != 'n' &&c != 'N')
return (c == 'y' || c == 'Y')
}
//---------------------------------- Main Program ----------------------
Stack<char>sign
Stack<double>num
int set// 判断程序中的异常,以便适时退出
void process(char c) { //计算两个数的 + - * / 运算
int k=0
double a,b
sign.pop()
if (num.top(b)==success){//判断例外
num.pop()
if (num.top(a)==success) {
num.pop()
k=1
}
}
if (k) {
switch (c) {
case '+': num.push(a+b)break
case '-': num.push(a-b)break
case '*': num.push(a*b)break
case '/':
if (b==0) { //分母不能为0
set=4
num.push(-1)
}
else
num.push(a/b)
break
}
}
else {set=1num.push(-1)}
}
//输入表达式
void get_command(string &str) {
cout<<"\n请输入要进行运算的表达式,包括\" +,-,*,/,=,(,)\"和数字,"<<endl
<<"例如:\" 3+2.5*(6-25/4)-8.32= \"."<<endl
<<"注意: 以数字开头,等号结尾,中间括号要匹配."<<endl
cin>>str
}
//求值 表达式
double do_command(const string &str) {
string s=""
double outcome=-1
char c
for (int i=0str[i]!='\0'i++)
{
if (set!=0) break //例外 则停止运行
while (1) { //分离数据与运算符
if (str[i]<='9' &&str[i]>='0' || str[i]=='.') {
s+=str[i]
i++
}
else {
if(s!="") {
if (num.push(atof(s.c_str ()))==overflow)
set=3
s=""
}
break
}
}
char ch= str[i]
switch (ch) { //处理运算的优先级,并注意例外抛出
case '*':
case '/':
if (sign.top(c)==success)
if(c=='*'||c=='/') process(c)
if (sign.push(ch)==overflow)
set=3
break
case '+':
case '-':
while (sign.top(c)==success) {
if (c!='(') process(c)
else break
}
if (sign.push(ch)==overflow)
set=3
break
case '(':
if (sign.push(ch)==overflow)
set=3
break
case ')':
while (sign.top(c)==success) {
if (c!='(') process(c)
else break
}
sign.pop()
break
case '=':
while (sign.top(c)==success) {
if (c!='(') process(c)
else break
}
break
default: set=2break
}
}
if (num.size()==1 &&sign.size()==0)
num.top(outcome)
else set=1
if (set==0) cout<<"运算结果是:\n"<<endl//出错时的错误信息
else {
outcome=-1
if (set==1) cout<<"\n您输入的不匹配,有错误发生。Result lost!!"<<endl
if (set==2) cout<<"\n您输入了非法字符 , 请重新输入,谢谢合作!"<<endl
if (set==3) cout<<"\nStack is full, Lost result!!"<<endl
if (set==4) cout<<"\n 分母为0,不能进行除法运算,出现溢出, Lost result!!"<<endl
}
return outcome
}
// 主程序main()
int main() {
do {
string str,s
set=0
get_command(str)
s=str
if( str[0]=='-') str='0'+str //处理表达式中的负号
for (int i=1str[i]!='\0'i++) {
if (str[i]=='-' &&str[i-1]=='(') {
str.insert (i,"0")
i++
}
}
double out= do_command(str)
cout<<s<<out<<endl //输出结果
num.clear() //清空栈
sign.clear()
cout<<"\n还要计算其它的吗"<<flush
}while (user_says_yes()) //允许多次执行运算
return 1
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)