zoukankan      html  css  js  c++  java
  • 判断随机生成的四则运算结果

    功能: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("=
    ");
            int p,q=convert(number);
    		scanf("%d",&p);
            if(p==q)
            printf("正确
    
    ");
            else
            printf("错误 正确结果为:%d
    
    ",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);
    		}
    }
    

      

  • 相关阅读:
    3.18日
    线程的面试题
    关于instanceof测试遇到的问题
    spring
    自动登录代码
    Filter
    多态
    基于HTML,css,jQuery,JavaScript,MySQL搭建博客系统
    基于bootstrap+MySQL搭建动态网站
    基于bootstrap_网站汇总页面
  • 原文地址:https://www.cnblogs.com/wangsen123/p/5844045.html
Copyright © 2011-2022 走看看