本次结对编程作业由我和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