内容目录
通过学习和练习结对编程,达到提高代码质量和稳定性、增强团队合作和沟通能力、减少错误、增加效率、促进知识分享、提高代码可读性和可维护性等效果。
两名程序员一同合作完成四则运算程序的编写;一人负责编写代码,另一人在旁边负责审查代码、提出建议和指导。在一段时间内,两人交替角色和任务,确保代码被充分审查和改进。
- 小学老师要每周给同学出300道四则运算练习题。
- 这个程序有很多种实现方式:
– C/C++
– C#/VB.net/Java
– Excel
– Unix Shell
– Emacs/Powershell/Vbscript
– Perl
– Python
- 一或两个运算符(a+b或a+b+c),100 以内的数字,不需要写答案。
- 需要检查答案是否正确,并且保证答案在 0..100 之间
- 尽可能地多设置一些条件
#include <random> #include<string> #include <iostream> #include <stack> #include <unordered_map> using namespace std; const int ADD = 0; const int SUB = 1; const int MUL = 2; const int DIV = 3; const string ope[4] = { "+","-","*","/" }; class Question { public: string content; int ans; Question() :content(""), ans(0) {}; Question(string con, int ans) { this->content = con; this->ans = ans; } void print_ques(); }; void Question::print_ques() { cout << this->content << "=" << endl << endl; } // 生成随机整数的函数,包含端点 int generateRandomInt(int min, int max) { // 使用 C++11 随机数引擎 std::random_device rd; // 随机设备,用于获取种子 std::mt19937 gen(rd()); // Mersenne Twister 随机数引擎 std::uniform_int_distribution<int> dis(min, max); // 均匀分布整数 return dis(gen); // 生成并返回随机整数 } //传入四则运算数学表达式的字符串,返回int结果 int calculateMathExpression(const std::string& expr) { std::stack<int> numStack; // 存放数字的栈 std::stack<char> opStack; // 存放操作符的栈 std::unordered_map<char, int> precedence = { {'+', 1}, {'-', 1}, {'*', 2}, {'/', 2} }; // 运算符的优先级映射 int i = 0; while (i < expr.length()) { char c = expr[i]; if (isdigit(c)) { int num = 0; while (i < expr.length() && isdigit(expr[i])) { num = num * 10 + (expr[i] - '0'); i++; } numStack.push(num); } else if (c == '+' || c == '-' || c == '*' || c == '/') { while (!opStack.empty() && precedence[opStack.top()] >= precedence[c]) { char op = opStack.top(); opStack.pop(); int num2 = numStack.top(); numStack.pop(); int num1 = numStack.top(); numStack.pop(); int result = 0; if (op == '+') { result = num1 + num2; } else if (op == '-') { result = num1 - num2; } else if (op == '*') { result = num1 * num2; } else if (op == '/') { result = num1 / num2; } numStack.push(result); } opStack.push(c); i++; } else { i++; } } while (!opStack.empty()) { char op = opStack.top(); opStack.pop(); int num2 = numStack.top(); numStack.pop(); int num1 = numStack.top(); numStack.pop(); int result = 0; if (op == '+') { result = num1 + num2; } else if (op == '-') { result = num1 - num2; } else if (op == '*') { result = num1 * num2; } else if (op == '/') { result = num1 / num2; } numStack.push(result); } return numStack.top(); } //随机生成算式 Question generate_ques() { int n = generateRandomInt(1, 4); string con = ""; n = 2 * n + 1; int* a = new int[n]; for (int i = 0; i < n; i++) a[i] = generateRandomInt(1, 99); for (int i = 0; i < n; i++) { if (i % 2 == 0) con.append(to_string(a[i])); else { int index = a[i] % 4; con.append(ope[index]); } } Question A(con, calculateMathExpression(con)); return A; } //菜单界面 void title() { Question A[100]; for (int i = 0; i < 100; i++) A[i] = generate_ques(); cout << "<--说明:本程序会自动生成100道数学计算题,只涉及加减乘除四种运算符,操作数的范围:[1,99].\n"; cout << "在答题时输入114可退出程序,输入514可跳过本题。\n"; cout << "注意!不支持浮点数的运算,因此带有除法的算式得出的结果可能会与手算或计算器结果不同\n"; cout << endl << endl; while (true) { cout << "\t\t\t\t+---------------------------------+\n"; cout << "\t\t\t\t+-----------1->查看题目-----------+\n"; cout << "\t\t\t\t+-----------2->开始做题-----------+\n"; cout << "\t\t\t\t+-----------3->退出---------------+\n"; cout << "\t\t\t\t+---------------------------------+\n"; /*cout << "\n1->查看题目" << endl; cout << "2->开始做题" << endl; cout << "3->退出" << endl << endl;*/ cout << "请输入指令:"; int o; cin >> o; switch (o) { case 1: { system("cls"); for (int i = 0; i < 100; i++) A[i].print_ques(); break; } case 2: { system("cls"); for (int i = 0; i < 100; i++) { cout << "+---------------------------------+" << endl; cout << A[i].content << "="; int ans; cin >> ans; if (ans == A[i].ans) continue; else if (ans == 114)return; else if (ans == 514) { cout << "跳过此题" << endl; continue; } else { cout << "\n答案错误,请重新输入!" << endl; i--; } } break; } case 3: { return; } default: { cout << endl << "给你一拳,让你瞎按" << endl << endl; } } } } int main() { system("color 8E"); title(); system("pause"); return 0; }
1)主界面
2)选择查看题目功能
3)选择开始做题功能
4)输入514跳过此题目
2152130:
作为结对编程的一员,通过这次实验作业,自认为提高了我们的编程效率,减少了编程过程中的错误率,同时也增强了我们的团队协作的能力。在这个过程中,我们可以通过不断地交流,讨论和协商来寻找问题的解决方案,同时也可以学习到对方的编程技巧和思维方式,从而更好地提升自己的能力。
2152125:
在结对编程中,我们需要注重与对方的沟通和合作,包括尊重对方的意见,耐心地倾听对方的想法,以及积极地提出自己的看法和建议。通过这种合作方式,我们能更好地完成编程任务,同时也能够建立良好的团队合作关系,共同实现项目的目标。
标签:numStack,结对,编程,num1,num2,int,四则运算,else,result From: https://www.cnblogs.com/marisa514/p/17314534.html