首页 > 代码库 > 判断随机生成的四则运算结果

判断随机生成的四则运算结果

功能: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);		}}

  

判断随机生成的四则运算结果