判断随机生成的四则运算结果
功能:1.随机生成一个四则运算
2.用户输入式子结果后判断是否正确(结果取整)
输出结果:
代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<stack> using namespace std; int n,t,n1; struct ZX { char a; bool b;//if b=0 括号 if b=1 数字 } ; stack<ZX>s1; void atersz(ZX number[100]); void afterfh(ZX number[100]); void passkh(ZX number[100]); int convert(ZX number[100]) { stack<ZX>s2; for(int i=0;i<t;i++) { if(number[i].b==1)//操作数 s2.push(number[i]); else { if(number[i].a==')') { while(s1.top().a!='(') { s2.push(s1.top()); s1.pop(); } s1.pop(); } else if(s1.empty()||s1.top().a=='('||number[i].a=='(') s1.push(number[i]); else { if(number[i].b==0&&(number[i].a=='*'||number[i].a=='/')&&(s1.top().a=='+'||s1.top().a=='-')) s1.push(number[i]); else { s2.push(s1.top()); s1.pop(); i--; } } } } while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } while(!s2.empty()) { ZX s=s2.top(); s2.pop(); s1.push(s); } ZX c1; int c2,c3,c4; stack<int>s3; while(!s1.empty()) { c1=s1.top(); s1.pop(); if(c1.b==1) s3.push(c1.a); else { c2=s3.top(); s3.pop(); c3=s3.top(); s3.pop(); switch(c1.a) { case '+':c4=c3+c2;break; case '-':c4=c3-c2;break; case '*':c4=c3*c2;break; case '/':c4=c3/c2;break; } s3.push(c4); } } return s3.top(); } int main() { /*随机生成一个四则运算(100以内) 第一位 左括号(0-2) 数字(3-9) 数字后面是+-/*(0-2) 什么都没有(3-6) 右括号(7-9) 右括号后面 +-/*(0-2) 什么都没有(3-6) 右括号(7-9) +-/*后面 左括号(0-2) 数字(3-9) 左括号后面 左括号(0-2) 数字(3-9) */ while(1) { n1=0,n=0; ZX number[100]; t=0; afterfh(number); while(n>0) { number[t].a=')'; number[t++].b=0; n--; } while(number[0].a=='('&&number[0].b==0&&number[t-1].b==0&&number[t-1].a==')') passkh(number); while(number[t-3].a=='('&&number[t-3].b==0) { number[t-3].a=number[t-2].a; number[t-3].b=number[t-2].b; t-=2; } for(int i=0;i<t;i++) { if(number[i].b==0) printf("%c",number[i].a); else printf("%d",number[i].a); } printf("=\n"); int p,q=convert(number); scanf("%d",&p); if(p==q) printf("正确\n\n"); else printf("错误 正确结果为:%d\n\n",q); } return 0; } void passkh(ZX number[100]) { for(int i=1;i<t-1;i++) { number[i-1].a=number[i].a; number[i-1].b=number[i].b; } t-=2; } void aftersz(ZX number[100]) { int i=rand()%10; if(i<=2) { int j=rand()%4; switch(j) { case 0:number[t].a='+';break; case 1:number[t].a='-';break; case 2:number[t].a='*';break; case 3:number[t].a='/';break; } number[t].b=0; t++; afterfh(number); } else if(i>=3&&i<=6) { if(n1==1) { aftersz(number); } else return ; } else//右括号 { if(n>0&&number[t-2].a!='('&&number[t-2].b!=0) { number[t].b=0; number[t].a=')'; n--; t++; aftersz(number); } else aftersz(number); } } void afterfh(ZX number[100]) { int p=rand()%10; if(p>=3)//数字 { number[t].b=1; number[t].a=rand()%100; t++; n1++; aftersz(number); } else//左括号 { number[t].b=0; number[t].a='('; n++; t++; afterfh(number); } }