小学计算题——四则运算

一、题目要求

我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
(1)能够自动生成四则运算练习题
(2)可以定制题目数量
(3)用户可以选择运算符
(4)用户设置最大数(如十以内、百以内等)
(5)用户选择是否有括号、是否有小数
(6)用户选择输出方式(如输出到文件、打印机等)
(7)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二、角色分配

驾驶员——王越——博客地址
(1)能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中
(2)能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结,并且上传和队友工作时的照片
领航员——张雨蝶——博客地址
(1)能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试
(2)能够根据上次作业的代码检查表对驾驶员的本次工作进行评价
(3)能够对本次工作完成500字以上的总结

三、功能函数

coding地址

1、运算符函数

小学四则运算包含四钟运算符——加减乘除,从优先级考虑,加减的优先级相同,乘除的优先级相同,乘除的优先级高于加减,所以在运行时尽量避免全是乘除或加减时有括号的存在,加减可以适当的存在。所以进行了以下的优化。在写入运算符时判断此时括号的存在,若出现左括号,下一个运算符赋予加或减;若出现右括号,下一个运算符赋予乘或除。保证出题的规范性。代码如下显示:

void CC::Operator(FILE* fp)
{
    if (bl == 1)
    {
        for (int i = 0; i < 4; i++)
        {
            if (op[i] == '+' || op[i] == '-')
            {
                if(print==1) fprintf(fp, "%c", op[i]);
                cout << op[i];
                bl = 0;
                break;
            }
        }
    }
    else if (br == 1)
    {
        for (int i = 0; i < 4; i++)
        {
            if (op[i] == '*' || op[i] == '/')
            {
                if(print==1) fprintf(fp, "%c", op[i]);
                cout << op[1];
                br = 0;
                break;
            }
        }
    }
    else
    {
               while(1)
              {
          opp = rand() % (strlen(op)-1);
                  if(op[opp]!=' ') break;
              }
        if(print==1) fprintf(fp, "%c", op[opp]);
        cout << op[opp];
    }
}

2、括号函数

为了保证计算的个数存在随机性,增加了用户随机输入计算个数的功能。个数的多少对括号产生影响.编写代码时括号要注意以下几个问题:
(1)允许出现嵌套括号
(2)左右括号需互相匹配,并数目相同
(3)第一个数之前出现左括号与最后一个数后出现的右括号不相互匹配。
(4)在倒数第一位数与倒数第二位数前不出现左括号
(5)避免乘除运算出现括号
问题(2)解决方法:在最后一个数输入完,输出未输出的右括号
问题(3)解决方法:若第一个数之前出现左括号,规定与它相匹配的右括号出现的位置
代码如下显示:

void CC::rbcalculate(FILE* fp) //分有括号和无括号
{
    int i;
    if (sign == 1)
    {
        br = 1;
        sign = 0;
        if(print==1) fprintf(fp, ")");
        cout << ")";
    }
    else
    {
        brnum = rand() % 2;//随机生成1或0,1代表有括号,0代表无括号
        if (brnum == 1)
        {
            for (i = 0; i < 10; i++)
            {
                if (blnum[i] == 1)
                {
                    br = 1;
                    blnum[i] = 0;
                    if(print==1) fprintf(fp, ")");
                    cout << ")";
                    break;
                }
            }
        }
        //保证在计算个数输出之前输出右括号
        if (Cnum == Cnumber)
        {
            for (i = 0; i < 10; i++)
            {
                if (blnum[i] == 1)
                {
                    blnum[i] = 0;
                    if(print==1) fprintf(fp, ")");
                    cout << ")";
                }
            }
        }
    }
}

3、运算代码

整体的输出算数题的过程如下代码所示:

void CC::calculate(FILE* fp)
{
    for (Cnum = 1; Cnum <= Cnumber; Cnum++)//计算个数
    {
        if (Cnum != 1)//运算符
        {
            Operator(fp);//输出运算符
        }
        if (bracket == 1 && Cnum != Cnumber)//左括号
        {
            if (sign == 0)
            {
                lbcalculate(fp);//输出左括号
            }
        }
        //数字的输出
        int num = rand() % 2;   //0代表整数四则运算,1代表小数四则运算,2代表有括号四则运算。
        if (num == 1 && point == 1)//小数四则运算
        {
            pcalculate(fp);
        }
        else         //整数四则运算
        {
            icalculate(fp);
        }
        bright = Cnum;
        if (bracket == 1 && bright > bleft)//右括号//直接判断是否有左括号的产生
        {
                rbcalculate(fp);
        }
    }
    if(print==1) fprintf(fp,"=");
    if(print==1) fprintf(fp, "\n");
    cout << "=" << endl;
}

四、运行结果

加减乘除混合运算运行结果如下图所示:

五、队友点评

本次结对作业是我和队友(张雨蝶)第一次合作完成这次的项目,我负责编写代码,她负责测试工作。虽说两个人的职责各不相同,但我们会互相帮助来取得更好的成果。
在合作的过程中我的队友给与我了巨大的帮助,当我遇到难点时,我会向她寻求帮助,而她也会给我一些建设性的建议。在检查的阶段及时发现错误,指出问题的所在,更加方便了我修改代码中的错误。在整个编写代码的过程中,我们一同讨论功能的需求与实现的方法,并上网查阅各种各样的资料,让项目的功能更加全面、更加完善。
做每个项目时我们都需要有自己的队友,有了队友就相当于有了支持你的后盾,有人帮助你向前走,有人在后方帮你勘查情况。在这种团队的氛围之中,你能成长的更快,学会如何与别人共同合作做一件事情,如何处理好人际关系的,对你有莫大的帮助。
优化代码,功能全面是驾驶员与领航员共同要做的事情,互帮互助,合作共进。

六、结对照片

原文地址:https://www.cnblogs.com/yemaoaiyue/p/10821493.html

时间: 2024-08-25 09:56:36

小学计算题——四则运算的相关文章

小学计算题一次大满足

海量小学计算题 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 120 300 ? Estimate ? 估计这个任务需要多少时间 600 1460 Development 开发 ? Analysis ? 需求分析 (包括学习新技术) 120 300 ? Design Spec ? 生成设计文档 30 60 ? Design Review ? 设计复审 20 30 ? Coding Sta

随机30道小学计算题修改01

经过两位老师的点评,我此次修正以下两个问题: 1.整数除数为0(如果出现这种情况,就把符号改成除除法之外的随机一种) 2.分数可约分(新增函数zuidagongyueshu,如果存在最大公约数,就除以这个最大公约数,其结果替换之前的数字) #include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x) #include <iostream> using na

随机30道小学计算题02(修改)

由于上周作业实在存在许多问题,所以这周重新写了代码. 这次代码和上次完全不一样,将生成的算式保存在数组里了. 1.避免重复(通过for循环一个一个比较字符串)2.定制数量/打印方式(循环次数提出来作为变量/ 打印到文件通过引用函数实现)3.控制参数 是否有乘除(rand()%4改成%2,) 是否有括号,最多十个数(完成,随机生成插入括号的位置,不过只能插入一个括号就是) 数值范围(random(x)中x作为变量) 加减有无负数(通过计算结果,调用函数,返回bool判断) 除法有无余数(通过计算结

随机30道小学计算题

一开始我是想直接把整数和分数写成两个函数再随机调用的,后来发现存在问题:1.分数随机出来很可能成是假分数,假分数时调用了也不会输出.2.如果这样那还得再来个时间,而且在试过之后发现再来一个随机出的数字也一样,就太冗余了. 综上:我选择了一个比较讨巧的方式,即:一个时间,当能生成真分数时就输出分数,不能的时候就用整数. 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #define random(

小学二年级四则运算题

一.题目要求 产生300道小学二年级的四则运算的数学题,减法不能出现负数,除法要整除. 二.编写过程 编写产生30道小学二年级的四则运算的数学题,用rand()产生随机数,和随机的符号,在除法运算中在被除数不为零的情况下利用一组随机数来产生被除数和除数是被除数的整数倍,这样保证了除法的整除,减法要先判断两个随机数的大小,输出的结果为大数减去小数.然后利用for循环30次输出30道题目. 三.程序运行 四.程序代码 #include<stdio.h>#include<stdlib.h>

MathExam小学一二年级计算题生成器V1.0

MathExam小学一二年级计算题生成器v1.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ? Estimate ? 估计这个任务需要多少时间 880 1540 Development 开发 ? Analysis ? 需求分析 (包括学习新技术) 60 100 ? Design Spec ? 生成设计文档 20 20 ? Design Review ? 设计复审 10 20 ? Co

悲催的二柱子们做小学二年级四则运算题(Javaweb)

1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <body background="C:\Users\26624\Desktop/beijing.jpg"> 7

MathExamV2.0四则混合运算计算题生成器

MathExamV2.0四则混合运算计算题生成器----211606360 丁培晖 211606343 杨宇潇 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ? Estimate ? 估计这个任务需要多少时间 60 100 Development 开发 ? Analysis ? 需求分析 (包括学习新技术) 360 440 ? Design Spec ? 生成设计文档 20 20 ? D

[编程题] 四则运算

[编程题] 四则运算 题目描述 请实现如下接口 /* 功能:四则运算 * 输入:strExpression:字符串格式的算术表达式,如: "3+2*{1+2*[-4/(8-6)+7]}" * 返回:算术表达式的计算结果 */ public static int calculate(String strExpression) { /* 请实现*/ return 0; } 约束: pucExpression字符串中的有效字符包括['0'-'9'],'+','-', '*','/' ,'('