小学生四则运算程序

需求分析:

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

代码设计:

    生成随机数和运算符:

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

    测试结果:

时间: 2024-10-15 18:50:59

小学生四则运算程序的相关文章

小学生四则运算程序的简单测试与封装

程序原型:之前写的小学生四运算程序 实验环境:java语言 封装代码如下: 1 package SuanFa; 2 3 public class Core { 4 public double jia(double a,double b) 5 { 6 double c=a+b; 7 return c; 8 } 9 public double jian(double a,double b) 10 { 11 double c=a-b; 12 return c; 13 } 14 public doubl

四则运算程序的测试与封装

程序原型:之前的小学生四则运算程序 编程语言:java 测试代码如下: 1 package SuanFa; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 public class CoreTest { 8 9 @Test 10 public void testJia() { 11 Core core = new Core(); 12 double a = core.jia(9, -3); 13 Syste

小学生四则运算系统项目总结

在经历了六周的时间,经历了需求分析,系统设计,编码调试以及测试,我们共同完成了小学生四则运算系统,实现了基本功能.在这个过程中我们真正走过了一遍软件开发的流程.现在对项目做一个总结,讲解项目的功能实现过程,并谈谈大家对这个课程和项目的感受~ ①小组分工 这次我们的小组开发团队属于小团队,软件设计.开发的过程中需要频繁的交流,最开始的时候大家做了大致的小组分工,后期根据个人的不同情况和项目开发状态,还经历了多次调整.其实在过程中,多数的设计开发过程,大家都是在一起进行的,属于功能团队模型,但每个人

软件工程课后作业一之30道随机四则运算程序2

一.设计30道随机四则运算程序要求: 1.题目避免重复: 2.可定制(数量/打印方式): 3.可以控制下列参数: 是否有乘除法.是否有括号. 数值范围.加减有无负数.除法有无余数.否支持分数 (真分数, 假分数, …).是否支持小数 (精确到多少位).打印中每行的间隔可调整: 二.设计思路:1.题目避免重复我用3个数组将第一个数,第二个数和运算符(已用数字0-3表示加减乘除)存起来,之后用for循环将新产生的数组单元与以前产生的数组单元一一比较,有重复则将当前参数自减一重新产生新数组单元如此反复

四则运算程序代码

                                3月17日 看教材资料查找怎么产生1-100的随机数                            3月18日 将四则运算程序写出来之后,搞不懂怎么调用函数                            3月19日 怎么设置有无乘除法知道了,却没弄懂怎么衔接,怎么在设置之后建立循环语句让这30道题目能够符合要求有要求,只能先写出上次的作业充数了.                        #include<ios

四则运算程序(java基于控制台)

一.题目描述: 1. 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 -o Exercise.txt 将生成10个题目. 2. 使用 -r 参数控制题目中数值(自然数.真分数和真分数分母)的范围,例如 Myapp.exe -r 10 将生成10以内(不包括10)的四则运算题目.该参数可以设置为1或其他自然数.该参数必须给定,否则程序报错并给出帮助信息. 3. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数. 4. 每道题目中出现的运算符个数不超过

201571030315\201571030303《小学生四则运算软件需求说明结对项目报告》

以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. (1)调研对象:小学生,小学数学代课老师,家长 (2)要利用实验二.实验三开发的程序作为软件原型: (3)采用问卷调查,访谈两种方式来需求获取: (4)和小伙伴设计了网上问卷调查,调查了数学代课老师和小学生及其家长 (5)问卷调查网址https://www.wjx.cn/m/22668847.aspx 1.1 编写目的   本文档的目的是详细地介绍<小学生四则运算练习软件>所包含的

小学生四则运算器实验报告

一.题目简介 要指应实现的主要功能是实现一个可供小学数学运算程序,作出了相应的功能,实现相应的输入输出即可,窗口以及共多功能可以在后期完善! 二.github链接地址 https://github.com/LiHaiying/jisuanqi/blob/master/jisuanqi.md 三.测试截图 四.学习心得 该程序利用 方法定义与调用,参数传递方式来计算.使用数组的声明.定义与初始化,数组的处理.用数组作为方法参数和返回值.界面比较单调,功能也很单一,能实现基本的小学的四则运算,复杂的

四则运算程序演变--测试

对此次的四则预算程序演变进行的测试,所有的测试项目目的及结果如下: 1.数值100范围内出10道题的加减乘除随机出题,减法允许负数,除法允许余数 2.数值100范围内出10道题的加减乘除随机出题,减法允许负数,除法不允许余数 3.数值100范围内出10道题的加减乘除随机出题,减法不允许负数,除法允许余数 4.数值100范围内出10道题的加减乘除随机出题,减法不允许负数,除法不允许余数(不允许的字符随机) 测试出现错误,程序中的“其他字符” 只能是数字. 5.测试出20道题 6.测试数值范围 测试