首页 > 编程语言 >结对编程-四则运算

结对编程-四则运算

时间:2023-04-10 22:33:45浏览次数:41  
标签:operation2 结对 编程 sum 四则运算 operation1 else params &&

  本次结对编程作业由我和2152714完成

  • 源代码:
/*
 *Created by zouran on 2023/4/10.
 *Description:四则运算
 *prams:
*/
#include <ctime>
#include <random>
#include "iostream"
using namespace std;
//存储运算符
class Operations{
private:
    char operation[4]{};
    char randomOperation[2]{};
    int randParams[3]{};
public:
    Operations();
    [[nodiscard]] const char *getOperation() const;
    void initialize(auto u,auto e);
    bool judge();
    void print();
};
//无参构造函数
Operations::Operations() {
    operation[0]='+';
    operation[1]='-';
    operation[2]='*';
    operation[3]='/';
}
//获取运算数组
const char *Operations::getOperation() const {
    return operation;
}
//生成随机题的数据与运算符
void  Operations::initialize(auto u,auto e){
    for(int & randParam : this->randParams)
    {randParam=u(e);}
    randomOperation[0]=this->operation[u(e)%4];
    randomOperation[1]=this->operation[u(e)%4];
}
//俩者间运算
int operation(int param1,int param2,char option){
    switch (option) {
        case '+': return param1+param2;
        case '-': return param1-param2;
        case '*': return param1*param2;
        case '/': return param1/param2;
    }
}
//判断题目运算结果是否在100内
bool Operations::judge(){
    int sum=0;
    int params[3];
    for(int i=0;i<3;i++){
        params[i]=this->randParams[i];
    }
    char operation1=this->randomOperation[0];
    char operation2=this->randomOperation[1];
    if   (operation1=='+'&&operation2=='+')
    {
        sum=params[0]+params[1]+params[2];
    }
    else if(operation1=='+'&&operation2=='-'){
        sum=params[0]+params[1]-params[2];
    }
    else if(operation1=='+'&&operation2=='*'){
        sum=params[0]+params[1]*params[2];
    }
    else if(operation1=='+'&&operation2=='/'){
        sum=params[0]+params[1]/params[2];
    }
    else if(operation1=='-'&&operation2=='+'){
        sum=params[0]-params[1]+params[2];
    }
    else if(operation1=='-'&&operation2=='-'){
        sum=params[0]-params[1]-params[2];
    }
    else if(operation1=='-'&&operation2=='*'){
        sum=params[0]-params[1]*params[2];
    }
    else if(operation1=='-'&&operation2=='/'){
        sum=params[0]-params[1]/params[2];
    }
    else if(operation1=='*'&&operation2=='+'){
        sum=params[0]*params[1]+params[2];
    }
    else if(operation1=='*'&&operation2=='-'){
        sum=params[0]*params[1]-params[2];
    }
    else if(operation1=='*'&&operation2=='*'){
        sum=params[0]*params[1]*params[2];
    }
    else if(operation1=='*'&&operation2=='/'){
        sum=params[0]*params[1]/params[2];
    }
    else if(operation1=='/'&&operation2=='+'){
        sum=params[0]/params[1]+params[2];
    }
    else if(operation1=='/'&&operation2=='-'){
        sum=params[0]/params[1]-params[2];
    }
    else if(operation1=='/'&&operation2=='*'){
        sum=params[0]/params[1]*params[2];
    }
    else if(operation1=='/'&&operation2=='/'){
        sum=params[0]/params[1]/params[2];
    }
    if(sum>=0&&sum<=100)
    return true;
    return false;
}
//打印题目
void Operations::print() {
    printf("%-2d %c %-2d %c %-2d =\n",randParams[0],randomOperation[0],randParams[1],randomOperation[1],randParams[2]);
}
//主执行文件
void exe(){
    auto count=0;
    system("chcp 65001");
    cout<<"请输入要生成的题目数量:\n";
    cin>>count;
    int i=0;
    default_random_engine e;
    uniform_int_distribution<int> u(1,10);
    e.seed(time(nullptr));
    while(i<count) {
        u(e);
        auto *operations = new Operations();
        operations->initialize(u,e);
        if (operations->judge()) {
            i++;
            operations->print();
        }
    }
}
int main(){
    exe();
    return 0;
}
  • 运行结果:

 

 

  • 总结
  • 本次结对编程可以帮助学习别人的代码风格以及编码思路,在本次编码过程中主要的俩个问题如下
  • C++中随机数生成的函数种子问题
  • 多次运行结果中的随机生成数一样的导致程序受阻,在查阅C++11标准的发现可以使用
  • uniform_int_distribution:产生均匀分布的整数
  • 用法如下:

 

#include <iostream>
#include <ctime>
#include <random>
 
int main() {
 
    std::default_random_engine e;
    std::uniform_int_distribution<int> u(2,20); // 左闭右闭区间
    e.seed(time(0));
 
    for (int i=0; i<10; i++) {
        std::cout << u(e) << std::endl;
    }
 
    return 0;
}

 

  • 控制台中文输出乱码问题,这是原来用Devc++开发C++未遇到的问题
  • 解决方法便是在代码中加入下面的语句
system("chcp 65001");

 

标签:operation2,结对,编程,sum,四则运算,operation1,else,params,&&
From: https://www.cnblogs.com/zouran/p/17304589.html

相关文章

  • 结对编程-小学生四则运算题目生成
    这次结对编程我是跟学号为2152520的朋友一起进行的四则运算题目生成的编程的。这次我们采用的编程语言是c++编程要求为:题目均为两次的运算,大小限制在一百以内的数字,且答案需要坐落在0~100之间(不显示出答案)。代码演示:#include<iostream>#include<cstdlib>usingnamespacest......
  • 异步编程的终极方案
    async和await实际上就是让我们像写同步代码那样去完成异步操作await表示强制等待的意思,await关键字的后面要跟一个promise对象,它总是等到该promise对象resolve成功之后执行,并且会返回resolve的结果  上面代码会等待5秒之后,弹出5     ......
  • MyBatisPlus——DML编程控制——乐观锁
    乐观锁业务并发现象带来的问题:秒杀最后一单用于中小型项目(2000请求以下)添加一个数据库字段,使每次请求修改数据时,这个字段就加一,当有多人同时请求时,这些人同时获取到的都是相同的该字段,但当有一人完成了秒杀后字段加一,其他同时获取到的该字段就不匹配了配置步骤数据库表中......
  • MybatisPlus——DML编程控制——增删改
    DML编程控制id生成策略控制不同的表应用不同的id生成策略日志:自增(1,2,3,4,......)购物订单:特殊规则(FQ23948AK3843)外卖单:关联地区日期等信息(1004202003143491)关系表:可省略id......注解控制@TableId类型:属性注解位置:模型类中用于表示主键的属性定义上方作用:设置......
  • 命令式编程\声明式编程\函数式编程
    命令式编程(Imperative):详细的命令机器怎么(How)去处理一件事情以达到你想要的结果(What);声明式编程(Declarative):只告诉你想要的结果(What),机器自己摸索过程(How)。命令式编程是我们一步一步告诉机器需要怎么做,机器按部就班地执行命令。声明式编程是我们告诉机器我想要这样的结果,而不管他是怎......
  • C#编程之c#串口(winform、wpf)
    本文主要向大家介绍了C#编程之c#串口通信讲解(一)(winform、wpf),通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。串口操作需要注意的几点如下:1、如果是USB转串口;则需要安装USB转串口驱动,附件有此驱动。2、串口打开状态最好不要直接插拔串口,可能会导致中控板或者串口线烧坏。......
  • VS2019使用C语言进行websocket编程
    一直在写C#代码好多年不写C语言代码了,记录一下之前某个项目里用C写的一个websocket服务,用C的优势是写的东西体积小性能高,但是写业务的话还得用C#、Java之类的语言,不然会折腾死人。。。 用VisualStudio新建一个C++(因为不能直接建C语言项目)项目,我演示就创建一个控制台项目。项......
  • java并发编程(2):Java多线程-java.util.concurrent高级工具
    高级多线程控制类Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent,提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。ThreadLocal类ThreadLocal类用来保存线程的独立变量。对一个线程类(继承自Thread)当使用ThreadLocal维护变......
  • java并发编程(1):Java多线程-基本线程类-基础知识复习笔记
    复习资料:《同步与异步:并发/并行/进程/线程/多cpu/多核/超线程/管程 》基本线程类基本线程类基本线程类指的是Thread类,Runnable接口,Callable接口继承Thread创建线程继承java.lang.Thread类创建线程是最简单的一种方法,也最直接。publicclassMyThread1extendsThread{}种......
  • Rust编程语言入门之cargo、crates.io
    cargo、crates.io本章内容通过releaseprofile来自定义构建在https://crates.io/上发布库通过workspaces组织大工程从https://crates.io/来安装库使用自定义命令扩展cargo一、通过releaseprofile来自定义构建releaseprofile(发布配置)releaseprofile:是预......