实验目的
本次学习的任务是通过两人结对编程(一个人Coding,一个人审核)的方式,来体会团队合作的过程。本次实验由我和2230232共同完成。
编程题目
小学老师要每周给同学出300道四则运算练习题。
–这个程序有很多种实现方式:
C/C++
C#/VB.net/Java
Excel
Unix Shell
Emacs/Powershell/Vbscript
Perl
Python
– 两个运算符,100 以内的数字,不需要写答案。
– 需要检查答案是否正确,并且保证答案在 0..100 之间
– 尽可能地多设置一些条件
项目实现过程
本次项目我们通过讨论决定使用C++语言进行编写。我们通过C++中getPriority()
函数生成随机生成计算式,为了确保计算结果最终在0~100之间,我们设置了一个循环调用getAnswer(int a, string op, int b)
函数来确保该计算式的结果是在0~100以内,若答案超过这个范围则重新生成计算式。在答题结束后通过displayAnswers()
函数来显示答题的题目。但是在实际使用中发现打印出的答案和题目使用一个颜色,所以我们经过讨论使用<windows.h>头文件中的SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
来设置答案的颜色,使得更方便区分,也易于使用。
项目实现的功能
- 输出需要的计算式数量,随机生成需要数量的计算式。
- 作答完成后统计正确数量
- 输出打印正确的答案
运行截图
实验代码
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <random>
#include <algorithm>
#include <windows.h>
using namespace std;
class Project {
public:
int M = 3;
static const int N = 301;
int a[N];
int b[N];
int c[N];
float ans[N];
float check[N];
int w[N];
bool flag;
map<string, int> opMap;
string op[4] = {"+", "-", "*", "/"};
string ch1[N];
string ch2[N];
int getAnswer(int a, string op, int b) {
if (a < 0 || b < 0) return -1; // 如果a或b小于0,则返回-1
if (a > 100 || b > 100) return -1; // 如果a或b大于100,则返回-1
if (op == "+") {
if (a + b > 100) return -1; // 如果加法结果大于100,则返回-1
return (a + b);
}
if (op == "-") {
if (a - b < 0) return -1; // 如果减法结果小于0,则返回-1
return (a - b);
}
if (op == "*") {
if (a * b > 100) return -1; // 如果乘法结果大于100,则返回-1
return (a * b);
}
if (op == "/") {
if (b == 0 || a % b != 0 || a / b > 100) return -1; // 若b为0或a不能整除b或除法结果大于100,则返回-1
return (a / b);
}
return 0;
}
void displayAnswers() {
cout << "正确答案如下:" << endl;
for (int i = 1; i <= M; i++) {
int correctAnswer = getAnswer(a[i], ch1[i], b[i]);
//调用此方法设置参数
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
correctAnswer = getAnswer(correctAnswer, ch2[i], c[i]);
cout << "(" << i << ") " << a[i] << ch1[i] << b[i] << ch2[i] << c[i] << "=" ;
//调用此方法设置参数
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout<< correctAnswer << endl;
}
}
void getPriority() {
opMap["+"] = 0;
opMap["-"] = 0;
opMap["*"] = 1;
opMap["/"] = 1;
random_device rd;
mt19937 gen(rd());
for (int i = 0; i <= M; i++) {
//设置一个循环,确保生成的计算式计算结果在0~100之间
flag = false;
while (!flag) {
a[i] = gen() % 101;
b[i] = gen() % 101;
c[i] = gen() % 101;
ch1[i] = op[gen() % 4];
ch2[i] = op[gen() % 4];
int result = getAnswer(a[i], ch1[i], b[i]);
result = getAnswer(result, ch2[i], c[i]);
if (result >= 0 && result <= 100) {
ans[i] = result;
flag = true;
}
}
}
}
public:
Project() {
getPriority();
}
int getM() {
return M;
}
void setM(int m) {
M = m;
}
int* getA() {
return a;
}
int* getB() {
return b;
}
int* getC() {
return c;
}
float* getAns() {
return ans;
}
float* getCheck() {
return check;
}
int* getW() {
return w;
}
bool isFlag() {
return flag;
}
map<string, int> getOpMap() {
return opMap;
}
string* getOp() {
return op;
}
string* getCh1() {
return ch1;
}
string* getCh2() {
return ch2;
}
};
int main() {
int t;
Project pj = Project();
cout << "请输入您要出的题目数量" << endl;
cin >> t;
pj.setM(t);
pj.getPriority();
int num = 0;
cout << "请依次输入答案,按回车自动进入下一道题" << endl;
for (int i = 1; i <= pj.getM(); i++) {
cout << "(" << i << ") " << pj.getA()[i] << pj.getCh1()[i] << pj.getB()[i] << pj.getCh2()[i] << pj.getC()[i] << "=";
cin >> pj.getCheck()[i];
if (pj.getCheck()[i] != pj.getAns()[i])
pj.getW()[++num] = i;
}
cout << "您一共答对" << (pj.getM() - num) << "道题" << "答错" << num << "道题" << endl;
pj.displayAnswers();
return 0;
}
标签:结对,return,string,软件开发,int,编程,100,include,op
From: https://www.cnblogs.com/z045/p/18153144