结对项目——二柱子再更新版

更高更高要求的四则运算

一、程序要求

1、学生写的程序必须能够判定用户的输入答案是否正确;

2、程序必须能处理四种运算的混合算式;

3、在上次程序的基础上,添加新的功能;

二、程序设计思想

1、在上次程序的基础之上添加要求;

2、判断答案正误时,整数比分数容易判断(判断过程不予叙述),所以单独引入分数类,设计函数分别计算分数四则运算的结果并与输入的结果比较判断;

三、源程序

//李俏,张莹荧,2016.3.15
//随机生成四则运算3

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;

class Fenshu
{
private:
    int fenzi;  // 分子
    int fenmu;  // 分母
public:
    Fenshu(int fz = 0, int fm = 1) :fenzi(fz), fenmu(fm){}
    void set(int,int);
    void simplify();
    friend bool judge1(const Fenshu &c1, const Fenshu &c2);     //判断两个分数是否相等
    friend bool judge2(const Fenshu &c1, int z);     //判断两个分数是否相等
    friend Fenshu add(const Fenshu &c1, const Fenshu &c2);  //两个分数相加,结果要化简
    friend Fenshu sub(const Fenshu &c1, const Fenshu &c2);  //两个分数相减,结果要化简
    friend Fenshu mul(const Fenshu &c1, const Fenshu &c2);  //两个分数相乘,结果要化简
    friend Fenshu div(const Fenshu &c1, const Fenshu &c2);  //两个分数相除,结果要化简
};

void Fenshu::set(int m, int n)// 分数赋值
{
    fenzi = m;
    fenmu = n;
}

void Fenshu::simplify()// 分数化简
{
    int m, n, r;
    m = abs(fenmu);
    n = abs(fenzi);
    while (r = m%n)  // 求m,n的最大公约数
    {
        m = n;
        n = r;
    }
    fenmu /= n;     // 化简
    fenzi /= n;
    if (fenmu<0)  // 将分母转化为正数
    {
        fenmu = -fenmu;
        fenzi = -fenzi;
    }
}

Fenshu add(const Fenshu &c1, const Fenshu &c2)// 分数相加
{
    Fenshu t;
    t.fenzi = c1.fenzi*c2.fenmu + c2.fenzi*c1.fenmu;
    t.fenmu = c1.fenmu*c2.fenmu;
    t.simplify();
    return t;
}

Fenshu sub(const Fenshu &c1, const Fenshu &c2)// 分数相减
{
    Fenshu t;
    t.fenzi = c1.fenzi*c2.fenmu - c2.fenzi*c1.fenmu;
    t.fenmu = c1.fenmu*c2.fenmu;
    t.simplify();
    return t;
}

Fenshu mul(const Fenshu &c1, const Fenshu &c2)// 分数相乘
{
    Fenshu t;
    t.fenzi = c1.fenzi*c2.fenzi;
    t.fenmu = c1.fenmu*c2.fenmu;
    t.simplify();
    return t;
}

Fenshu div(const Fenshu &c1, const Fenshu &c2)// 分数相除
{
    Fenshu t;
    if (!c2.fenzi) return c1;
    t.fenzi = c1.fenzi*c2.fenmu;
    t.fenmu = c1.fenmu*c2.fenzi;
    t.simplify();
    return t;
}

bool judge1(const Fenshu &c1, const Fenshu &c2)//判断正误
{
    bool flag;
    if ((c1.fenzi == c2.fenzi) && (c1.fenmu == c2.fenmu))
    {
        flag = true;
        return flag;
    }
    else
    {
        flag = false;
        return flag;
    }
}

bool judge2(const Fenshu &c1, int z)//判断正误
{
    bool flag;
    if (0==c1.fenzi-z)
    {
        flag = true;
        return flag;
    }
    else
    {
        flag = false;
        return flag;
    }
}

void main()
{
    int first, second, firstm, secondm;
    int sign, i, j;
    int num, chengchu, fushu, yushu, fanwei;
    int ans,ansm,ansy;
    int right = 0,wrong = 0;
    Fenshu x1, x2, x, y;

    cout << "请输入题目数量:";
    cin >> num;
    if (num == 0)
    {
        exit(1);
    }

    cout << "是否有乘除法?1.是,2.否:";
    cin >> chengchu;

    if (chengchu == 1)
    {
        cout << "除法是否有余数?1.是,2.否:";
        cin >> yushu;
    }

    cout << "减法是否有负数?1.是,2.否:";
    cin >> fushu;

    cout << "请输入数值范围:";
    cin >> fanwei;

    srand((int)time(NULL)); //用时间做种子,每次产生随机数都不一样

    for (i = 0; i<num; i++)
    {
        j = rand() % 2;        //选择生成整数运算还是分数运算

        if (j == 0)           //选择整数
        {
            first = rand() % (fanwei + 1);
            second = rand() % (fanwei + 1);
            if (chengchu == 1)
            {
                sign = rand() % 4;
            }
            else
            {
                sign = rand() % 2;
            }
            switch (sign)
            {
            case 0:                      //整数加法
                cout << first << "+" << second << "=" << endl;
                cout << "请输入结果:";
                cin >> ans;
                if (ans == first + second)
                {
                    cout << "答对了!" << endl;
                    right = right + 1;
                }
                else
                {
                    cout << "答错了!" << endl;
                    wrong = wrong + 1;
                }
                break;
            case 1:                      //整数减法
                if (fushu == 1)
                {
                    cout << first << "-" << second << "=" << endl;
                    cout << "请输入结果:";
                    cin >> ans;
                    if (ans == first - second)
                    {
                        cout << "答对了!" << endl;
                        right = right + 1;
                    }
                    else
                    {
                        cout << "答错了!" << endl;
                        wrong = wrong + 1;
                    }
                }
                else
                {
                    if (first>second)
                    {
                        cout << first << "-" << second << "=" << endl;
                        cout << "请输入结果:";
                        cin >> ans;
                        if (ans == first - second)
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                    else
                    {
                        cout << second << "-" << first << "=" << endl;
                        cout << "请输入结果:";
                        cin >> ans;
                        if (ans == second - first)
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                }
                break;
            case 2:                   //整数乘法
                cout << first << "*" << second << "=" << endl;
                cout << "请输入结果:";
                cin >> ans;
                if (ans == first * second)
                {
                    cout << "答对了!" << endl;
                    right = right + 1;
                }
                else
                {
                    cout << "答错了!" << endl;
                    wrong = wrong + 1;
                }
                break;
            case 3:                   //整数除法
                if (yushu == 1)
                {
                    if (second != 0)
                    {
                        cout << first << "/" << second << "=" << endl;
                        cout << "请输入结果(商和余数):";
                        cin >> ans>>ansy;
                        if ((ans == (first/second))&&(ansy == (first%second)))
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                    else
                    {
                        i = i - 1;
                    }
                }
                else
                {
                    if (second != 0 && (first%second == 0))
                    {
                        cout << first << "/" << second << "=" << endl;
                        cout << "请输入结果:";
                        cin >> ans;
                        if (ans == first / second)
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                    else
                    {
                        i = i - 1;
                    }
                }
                break;
            }
        }

        else              //选择分数
        {
            first = rand() % (fanwei + 1);
            second = rand() % (fanwei + 1);//分子
            firstm = rand() % (fanwei + 1);
            secondm = rand() % (fanwei + 1);//分母
            if (chengchu == 1)
            {
                sign = rand() % 4;
            }
            else
            {
                sign = rand() % 2;
            }

            switch (sign)
            {
            case 0:                //分数加法
                if ((firstm != 0) && (secondm != 0) && (first<firstm) && (second<secondm))
                {
                    cout << first << "/" << firstm << "  +  " << second << "/" << secondm << "=" << endl;
                    cout << "请输入结果(分子和分母):";
                    cin >> ans >> ansm;
                    x.set(ans, ansm);
                    x1.set(first, firstm);
                    x2.set(second, secondm);
                    y = add(x1, x2);
                    if (true == judge1(x, y))
                    {
                        cout << "答对了!" << endl;
                        right = right + 1;
                    }
                    else
                    {
                        cout << "答错了!" << endl;
                        wrong = wrong + 1;
                    }
                }
                else
                {
                    i = i - 1;
                }
                break;
            case 1:                //分数减法
                if (fushu == 1)
                {
                    if ((firstm != 0) && (secondm != 0) && (first<firstm) && (second<secondm))
                    {
                        cout << first << "/" << firstm << "  -  " << second << "/" << secondm << "=" << endl;
                        cout << "请输入结果(分子和分母):";
                        cin >> ans ;
                        if(ans!=0)
                        {
                            cin >> ansm;
                            x.set(ans, ansm);
                            x1.set(first, firstm);
                            x2.set(second, secondm);
                            y = sub(x1, x2);
                            if (true == judge1(x, y))
                            {
                                cout << "答对了!" << endl;
                                right = right + 1;
                            }
                            else
                            {
                                cout << "答错了!" << endl;
                                wrong = wrong + 1;
                            }
                        }
                        else
                        {
                            x1.set(first, firstm);
                            x2.set(second, secondm);
                            y = sub(x1, x2);
                            if (true == judge2(y, ans))
                            {
                                cout << "答对了!" << endl;
                                right = right + 1;
                            }
                            else
                            {
                                cout << "答错了!" << endl;
                                wrong = wrong + 1;
                            }
                        }
                    }
                    else
                    {
                        i = i - 1;
                    }
                }
                else
                {
                    if ((firstm != 0) && (secondm != 0) && (first<firstm) && (second<secondm) && ((first / firstm)>(second / secondm)))
                    {
                        cout << first << "/" << firstm << "  -  " << second << "/" << secondm << "=" << endl;
                        cout << "请输入结果(分子和分母):";
                        cin >> ans ;
                        if(ans!=0)
                        {
                            cin >> ansm;
                            x.set(ans, ansm);
                            x1.set(first, firstm);
                            x2.set(second, secondm);
                            y = sub(x1, x2);
                            if (true == judge1(x, y))
                            {
                                cout << "答对了!" << endl;
                                right = right + 1;
                            }
                            else
                            {
                                cout << "答错了!" << endl;
                                wrong = wrong + 1;
                            }
                        }
                        else
                        {
                            x1.set(first, firstm);
                            x2.set(second, secondm);
                            y = sub(x1, x2);
                            if (true == judge2(y, ans))
                            {
                                cout << "答对了!" << endl;
                                right = right + 1;
                            }
                            else
                            {
                                cout << "答错了!" << endl;
                                wrong = wrong + 1;
                            }
                        }
                    }
                    else
                    {
                        i = i - 1;
                    }
                }
                break;
            case 2:                //分数乘法
                if ((firstm != 0) && (secondm != 0) && (first<firstm) && (second<secondm))
                {
                    cout << first << "/" << firstm << "  *  " << second << "/" << secondm << "=" << endl;
                    cout << "请输入结果(分子和分母):";
                    cin >> ans ;
                    if(ans!=0)
                   {
                       cin >> ansm;
                       x.set(ans, ansm);
                       x1.set(first, firstm);
                       x2.set(second, secondm);
                       y = sub(x1, x2);
                       if (true == judge1(x, y))
                       {
                           cout << "答对了!" << endl;
                           right = right + 1;
                       }
                       else
                       {
                           cout << "答错了!" << endl;
                           wrong = wrong + 1;
                       }
                    }
                    else
                    {
                        x1.set(first, firstm);
                        x2.set(second, secondm);
                        y = sub(x1, x2);
                        if (true == judge2(y, ans))
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                }
                else
                {
                    i = i - 1;
                }
                break;
            case 3:                //分数除法
                if ((firstm != 0) && (secondm != 0) && (first != 0) && (second != 0) && (first<firstm) && (second<secondm))
                {
                    cout << first << "/" << firstm << "  /  " << second << "/" << secondm << "=" << endl;
                    cout << "请输入结果(分子和分母):";
                    cin >> ans ;
                    if(ans!=0)
                    {
                        cin >> ansm;
                        x.set(ans, ansm);
                        x1.set(first, firstm);
                        x2.set(second, secondm);
                        y = sub(x1, x2);
                        if (true == judge1(x, y))
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                    else
                    {
                        x1.set(first, firstm);
                        x2.set(second, secondm);
                        y = sub(x1, x2);
                        if (true == judge2(y, ans))
                        {
                            cout << "答对了!" << endl;
                            right = right + 1;
                        }
                        else
                        {
                            cout << "答错了!" << endl;
                            wrong = wrong + 1;
                        }
                    }
                }
                else
                {
                    i = i - 1;
                }
                break;
            }
        }
    }
    cout << "总共完成" << num << "道题,做对" << right << "道,做错" << wrong << "道题!" << endl;
}

四、结果截图

周活动总结表

姓名:李俏           日期:2016年3月12日

日期   任务 听课  编写程序 阅读课本 准备考试     日总计

周一

120 60 30       210

周二

    30       30

周三

    30       30

周四

120 60 30       210

周五

    30       30

周六

  180  30       210

周总结

240 300
180

      720

阶段时间和效率                            周数:1

不包括上一周在内的累计时间


总计


240


300


180


720


平均


240


300


180


720


最大


240


300


180


720


最小


240


300


180


720

以前各周的累计时间


总计


平均


最大


最小

六、时间记录表:

学生:       李 俏                              日期 :2016年3月12日

教师:      王建民                              课程 :软件工程


日期


开始时间


结束时间


中断时间


净时间


活动


备注


3.7


16:30


17:30



60


编写程序


作业


20:00


20:30



30


阅读


作业


3.8


20:10


20:40



30


阅读


作业


3.9


20:00


20:40


10min


30


wc


3.10


18:50


19:50



60


编写程序


作业


20:00


20:30



30


阅读


作业


3.11


21:10


21:40



30


阅读


作业


3.12


11:00


14:30


30min


180


编写程序


作业

七、缺陷记录日志:

学生        李俏

日期     2016年3月12日

教员          王建民

程序号


日期


编号


类型


引入阶段


排除阶段


修复时间


修复缺陷


3.7


1


20


编码


编译


5min


描述:初次添加参数控制,控制语句放置错误


3.10


2


20


编码


编译


10min


描述:if...else...语句没有加大括号,导致层次不分明


3.12


3


40


运行


运行后


10min


描述:错删break,题目数目不对


3.15


4


A


编译


编译


1min


描述:条件不成立时, 写成i=i+1,应该是i=i-i

时间: 2024-11-02 15:39:19

结对项目——二柱子再更新版的相关文章

结对项目——博客记录

结对项目内容:http://www.cnblogs.com/jiel/p/4830912.html 结对成员:康家华,马腾跃(http://www.cnblogs.com/summerMTY) 关于结对编程 “在结对编程模式下,一对程序员肩并肩地.平等地.互补地进行开发工作.两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作.他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等.”——<构建之法> 通过阅读教科书和网络上的参

黄金点游戏二人结对项目总结

经过近两个星期结对项目编程,从中收获了很多也发现了许多自身存在的问题.结对编程过程中比如讨论分工问题,起初不知如何下手,后来经过慢慢讨论有了比较合理的分工.我和我的同伴有着不同性格和工作方式,在做项目的过程中会有很多不同的思路和想法,编程习惯也不相同.他喜欢从整体入手,先想好程序的每一个环节,构思好整体后,才开始编程.就我而言,我习惯一层一层,循序渐进的进行编程,将每个环节做好然后进行下一项,虽然效率有点慢,但是对我来说,这种方式能让我在编程的时候少出错.我很喜欢我同伴预先做好整体构思的方法,很

高级四则运算器—结对项目反思(193 &amp; 105)

高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格   PSP2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 1.5h Development 开发 · Analysis · 需求分析 (包括学习新技术) 3h · Design Spec · 生成设计文档 5h ·

实践作业3 结对项目

结对项目 一.实践目的 1.熟悉Java GUI相关类的API. 2.理解并实践事件驱动程序设计中的监听器.监听器方法.监听器适配器接口.   二.实践要求 利用Java GUI的组件类.容器类和辅助类设计所选项目的用户界面,并在深入理解并掌握事件驱动程序设计原理的基础上,实现事件驱动的程序设计.   三.项目需求 所选项目名称:万年历. 项目需求描述,主要指应实现的主要功能. 实现了日历的查询,方便使用.界面主要是由查询输入部分和结果显示部分两部分组成. 查询输入:①一个文本域,用于输入年份.

二柱子四则运算定制版+升级版

题目:在上次程序的基础上,实现对连除的判断,并且实现多个数的混合运算,要求可以输入结果,并进行判断. 思路:基于上次程序,首先思考混合运算,这里运用两个数组,分别记录随机产生的运算数和运算符号.然后对连除进行判断,,检查运算符号数组里是否有连续的除号,有的话加上括号,避免歧义.最后对运算结果进行计算,并对用户输入的结果进行比较,给出相应提示,回答,计算方面,要优先对括号,乘除进行运算,然后再进行加减运算,每次运算完后都要记录下运算的结果. 代码: //吕广浩 3/19 #include<iost

结对项目的完成与体会

项目名称:黄金点游戏 合作人:赵海东  2013040101112  http://www.cnblogs.com/zhaohaidong/ 赵海东同学是我老乡,所以在生活之间的交流中不会有何多大的分歧,但是在本次项目的交流中,遇到了不少的分歧:我是属于:自己码的代码,无论如何都要从我的思路先执行代码,然后再进行改进:然而在老乡同学是希望在探讨中寻求最好的方案,一起执行.不能说孰对孰错,只能说想法不一样,但是在本次的结对项目中,更加的注重与人处事,想法不一不必强求,为的是同一个目标,寻求更大的进

结对项目报告

一.仓库地址:https://git.coding.net/Enther/Teamwork.git 二.预计PSP及实际PSP对比展示 SP2.1     Personal Software        Process Stages             Time :      SeniorStudent(h)  Time : SDE(h) Planning 计划 5 6 Estimate 估计这个任务需要多少时间,规划大致步骤 1 1 Development 开发 200 240 Anal

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

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

# 2019-2020-4 《Java 程序设计》结对项目总结

2019-2020-4 <Java 程序设计>结对项目阶段总结---<四则运算--整数> 一.需求分析 实现一个命令行程序 要求: 1.自动生成小学四则运算题目(加,减,乘,除): 2.支持整数: 3.支持多运算符(例如生成包含n个运算符的题目): 4.支持真分数(后续实现): 5.统计正确率. 扩展需求 1.文件: (1)处理生成题目并输出到文件: (2)完成题目后从文件读入并判断. 2.多语言支持:简体中文,繁體中文,English: 3.生成题目去重. 二.设计思路以及代码解