首页 > 编程语言 >结对编程——四则运算题目生成程序

结对编程——四则运算题目生成程序

时间:2023-04-08 22:44:14浏览次数:40  
标签:结对 编程 return op2 四则运算 middle right false true

在本次结对编程中,我和2152618徐成阳一起完成了四则运算题目生成程序的编写,在这次结对编程中收获良多。在一起完成一个项目时,首先应该进行明确的分工,根据自己的特长进行分工可以大大提高效率,结对编程可以培养我们团队合作的意识,让我们更好地完成工作。以下是程序的源代码:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

enum enOp {
    Add, Minus, Multiply, Divide
};

//将 枚举类型转换为字符类型,以便输出。
char enum2char(enOp op) {
    switch (op) {
        case Add:
            return '+';
        case Minus:
            return '-';
        case Multiply:
            return '*';
        case Divide:
            return '/';
    }
    return ' ';
}

//检查生成计算式的正确与否。其中 减法结果不能为负数,除法结果不能为小数。
bool checkFormula(int left, int right, int middle, enOp op1, enOp op2) {
    if (op1 == Add) {
        if (op2 == Add)
            return true;
        if (op2 == Minus) {
            if (left + middle < right)
                return false;
            else
                return true;
        }
        if (op2 == Multiply)
            return true;
        else {
            if (right == 0)
                return false;
            return true;
        }

    }
    if (op1 == Minus) {
        if (op2 == Add) {
            if (left < middle)
                return false;
            else
                return true;
        }
        if (op2 == Minus) {
            if (left < middle)
                return false;
            if (left - middle < right)
                return false;
            else
                return true;
        }
        if (op2 == Multiply) {
            if (left < middle * right)
                return false;
            else
                return true;
        } else {
            if (right == 0)
                return false;
            if (left < middle / right)
                return false;
            else
                return true;
        }
    }
    if (op1 == Multiply) {
        if (op2 == Add)
            return true;
        if (op2 == Minus) {
            if (right * middle < right)
                return false;
            else
                return true;
        }
        if (op2 == Multiply)
            return true;
        else {
            if (right == 0)
                return false;
            return true;
        }
    }
    if (op1 == Divide) {
        if (op2 == Add) {
            if (middle == 0)
                return false;
            else
                return true;
        }
        if (op2 == Minus) {
            if (middle == 0)
                return false;
            if (left / middle < right)
                return false;
            else
                return true;
        }
        if (op2 == Multiply) {
            if (middle == 0)
                return false;
            else
                return true;
        } else {
            if (middle == 0)
                return false;
            if (right == 0)
                return false;
            return true;
        }
    }
}


//依据给定操作符,生成符合条件的表达式。
void getFormula(int *left, int *right, int *middle, enOp op1, enOp op2) {
    for (;;) {
        *left = 1 + rand() % 100;
        *middle=1 + rand() % 100;
        *right = 1 + rand() % 100;
        if (checkFormula(*left, *right, *middle, op1, op2))
            break;
    }
}

int main() {
    int Num;
    cout << "请输入生成题目数量:";
    cin >> Num;
//左侧数
    int left[Num];
//右侧数
    int right[Num];
//中间数
    int middle[Num];
//操作符 +-*/
    enOp op1[Num];
    enOp op2[Num];
    cout << "正在生成,请稍等。" << endl;
//随机种子
    srand(time(nullptr));
//开始生成计算表达式。
    for (int i = 0; i < Num; i++) {
//操作符
        op1[i] = enOp(rand() % 4);
        op2[i] = enOp(rand() % 4);
        getFormula(&left[i], &middle[i], &right[i], op1[i], op2[i]);
    }

    cout << "生成计算式完成,开始答题!" << endl;
//输出表达式,让用户答题
    for (int i = 0; i < Num; i++) {
//输出表达式
        cout << left[i] << ' ' << enum2char(op1[i]) << ' ' << middle[i] << enum2char(op2[i]) << right[i] << " = "
             << endl;
    }
}

 

标签:结对,编程,return,op2,四则运算,middle,right,false,true
From: https://www.cnblogs.com/123wjt/p/17299448.html

相关文章

  • Rust编程语言入门之函数式语言特性:-迭代器和闭包
    函数式语言特性:-迭代器和闭包本章内容闭包(closures)迭代器(iterators)优化改善12章的实例项目讨论闭包和迭代器的运行时性能一、闭包(1)-使用闭包创建抽象行为什么是闭包(closure)闭包:可以捕获其所在环境的匿名函数。闭包:是匿名函数保存为变量、作为参数可在一个地方......
  • 在结队编程过程中,我收获了这些 【Tutorials】
    在结队编程过程中,我收获了这些受到了编程开发领域文档设计的启发’Whatnobodytellsyouaboutdocumentation’,本文结构为四种基本博客文档结构中的Tutorials类型,旨在记录与总结,并以清晰的行文展示出来。......
  • 第七周实验——结对编程
    结对编程-四则运算练习题一、结对成员2152102&2152108 二、实验目的通过两位同学组队用结对编码(一位同学coding,另一个同学在旁边审核代码,之后再交换角色)的方式完成本次实验。本次实验需要设计一个四则运算练习题的随机出题程序,可以通过C/C++/Java/Python等语言进行实现,四......
  • 结对编程--随机四则运算生产
    在本次作业中,与我一同搭档完成结对编程的同学学号为2152434。在讨论后,我们决定基于c++进行本次程序开发。在该系统中,如何产生随机数及使用随机数产生随机符号为开发关键点。以下为程序部分代码展示:    而输出结果如下:  实验体会:结对编程中最重要的是调......
  • 分析以下数字的规律1 1 2 3 5 8 13 21用Python语言编程实现输出,此为斐波那契数列
    方法一:list1=[]#定义一个空列表foriinrange(15):#遍历语句循环15次ifi==0ori==1:#前两个数字的值都是1list1.append(1)#print(list1)else:list1.append(list1[i-1]+list1[i-2])print(list1)方法二:list1=[1,......
  • 前端笔试遇到的两个编程题
    倒计时:在倒计时不超过一天的代码varhour=document.querySelector(".hour");  varminute=document.querySelector(".minute");  varsecond=document.querySelector(".second");//截止的时间  varinputTime=+newDate("2023-4-0820:0......
  • Python 进阶指南(编程轻松进阶):十四、实践项目
    原文:http://inventwithpython.com/beyond/chapter14.html到目前为止,这本书已经教会了你编写可读的Python风格代码的技巧。让我们通过查看两个命令行游戏的源代码来实践这些技术:汉诺塔和四人一排。这些项目很短,并且基于文本,以保持它们的范围较小,但是它们展示了本书到目前为......
  • Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法
    原文:http://inventwithpython.com/beyond/chapter17.html很多语言都有OOP特性,但是Python有一些独特的OOP特性,包括属性和魔术方法。学习如何使用这些Python风格技巧可以帮助您编写简洁易读的代码。属性允许您在每次读取、修改或删除对象的属性时运行一些特定的代码,以......
  • Python 进阶指南(编程轻松进阶):七、编程术语
    原文:http://inventwithpython.com/beyond/chapter7.html在XKCD漫画《飞人五号》(xkcd.com/1133)中,网络漫画的艺术家兰道尔·门罗只用了1000个最常见的英语单词,就创作出了土星五号火箭的技术示意图。这部漫画把所有的技术术语分解成小孩子能理解的句子。但这也说明了为什么我......
  • Python 进阶指南(编程轻松进阶):八、常见的 Python 陷阱
    原文:http://inventwithpython.com/beyond/chapter8.html虽然Python是我最喜欢的编程语言,但它也不是没有缺陷。每种语言都有缺点(有些比其他的多),Python也不例外。新的Python程序员必须学会避免一些常见的“陷阱”程序员学习这类知识是随机的,来自经验,但本章把它收集在一个地......