zoukankan      html  css  js  c++  java
  • 小学生四则运算程序

    需求分析:

        为小学生能够出四则运算的题,并且能对其所答的答案进行判断,如答错能显示正确答案。

    代码设计:

        生成随机数和运算符:

    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();
    }

        判断数字或括号前后面所跟的参数:

    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);
            }
    }

        随机生成四则运算试子并让学生进行答题并判断,如果答错显示正确答案。

    int main()
    {
        printf("下面是数学题请同学进行答题:
    ");
        printf("
    ");
        /*随机生成一个四则运算(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("
    ");
            printf("请作答:
    ");
            int p,q=convert(number);
            scanf("%d",&p);
            if(p==q)
            printf("回答正确
    
    ");
            else
            printf("回答错误 正确结果为:%d
    
    ",q);
            
        }
        return 0;
    }

        测试结果:

     ssh:git@git.coding.net:ziyoujay/sizeyunsuan.git

  • 相关阅读:
    汇编学习笔记(一)
    外部中断的资料
    喇叭的落幕
    红外模块
    SQL2005连接不上解决
    DataGrid中动态添加列,使用CheckBox选择行
    List和ObservableCollection的相互转化
    使用C#发送邮件
    C#委托与事件 简明
    Linq GroupBy 求和
  • 原文地址:https://www.cnblogs.com/ziyoujay/p/5844115.html
Copyright © 2011-2022 走看看