码迷,mamicode.com
首页 > 其他好文 > 详细

小学生四则运算程序

时间:2016-09-06 00:52:51      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

需求分析:

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

代码设计:

    生成随机数和运算符:

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

    测试结果:

技术分享

 

小学生四则运算程序

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!