小学生四则运算程序

需求分析:

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

代码设计:

    生成随机数和运算符:

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

原文地址:https://www.cnblogs.com/ziyoujay/p/5844115.html