c++24点游戏_24点游戏大全
c++24点游戏由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“24点游戏大全”。
c++24点游戏
#include “iostream” #include “string” using namespace std;
//定义Stack类
const maxsize=20;
enum Error_code { succe, overflow, underflow };
template cla 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 succe;}
template
Error_code Stack::pop(){ if(empty())return underflow;count--;return succe;}
template
Error_code Stack::push(const T &item){ if(full())return overflow;entry[count++]=item;return succe;}
Stack sign;Stack num;
int set;
// 判断程序中的异常,以便适时退出?//
void proce(char c)
//计算两个数的 +-* / 运算// { int k=0;double a,b;sign.pop();
if(num.top(b)==succe){
num.pop();
if(num.top(a)==succe){ 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){ set=4;num.push(-1);} else
num.push(a/b);break;} }
else {set=1;num.push(-1);} }
void get_command(string &str){
cout
>str;}
double do_command(const string &str){ string s=“”;
double outcome=-1;char c;
for(int i=0;str[i]!=' ';i++){
if(set!=0)break;//例外 则停止运行
while(1){ //分离数据与运算符
if(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)==succe)if(c=='*'||c=='/')proce(c);if(sign.push(ch)==overflow)set=3;break;case '+': case '-':
while(sign.top(c)==succe){ if(c!='(')proce(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)==succe){ if(c!='(')proce(c);else break;}
sign.pop();break;case '=':
while(sign.top(c)==succe){ if(c!='(')proce(c);else break;} break;
default: set=2;break;} }
if(num.size()==1 && sign.size()==0)num.top(outcome);else set=1;
if(set==0)cout
if(set==1)cout
if(set==4)cout
return outcome;}
void main()int f(){ double out;do { string str,s;set=0;
get_command(str);s=str;
if(str[0]=='-')str='0'+str;//处理表达式中的负号
for(int i=1;str[i]!=' ';i++){ if(str[i]=='-' && str[i-1]=='('){ str.insert(i,“0”);i++;} } out= do_command(str);
cout
我gai过此行
cout>out;cout
return out;}
int main(void)
{
int ii,zz,jj;
printf(“0-12的4个数字nn”);
for(jj=0;jj
{
for(ii=0;ii
{
zz=rand()()% 12;
cout
}
cout
f();
cout
cin>>jj;
cout
}