结对编码-四则运算 2252118 2252121

2252118 2252121
程序具有以下特点和功能:
随机生成题目:程序会随机生成包含两个运算符(加、减、乘、除)的四则运算题目。
整数结果:所有运算的结果都是整数,避免了小数的出现。
运算符优先级:程序正确处理了运算符的优先级,确保乘法和除法在加法和减法之前执行。
整除调整:在涉及除法的题目中,程序会调整数字以确保结果为整数。
用户交云:用户可以输入他们的答案,程序会检查答案是否正确,并提供反馈。
鼓励信息:根据用户完成的题目数量,程序会输出不同的鼓励信息。
错误反馈:当用户连续答错一定数量的题目时,程序会提供相应的反馈,鼓励用户更加认真。
退出机制:用户可以通过输入特定的命令(-1)来退出程序。

include

include

include

include

int calculate(int num1, int num2, char op);
bool isResultValid(int result);
void printEncouragement(int count);
void printErrorFeedback(int errorCount);
int main() {
srand(static_cast(time(0)));
int num1, num2, num3, result;
char op1, op2;
std::string input;
int count = 0;
int errorCount = 0;

while (true) {
    do {
        num1 = rand() % 100 + 1; 
        num2 = rand() % 100 + 1;
        num3 = rand() % 100 + 1;
        op1 = "+-*/"[rand() % 4];
        op2 = "+-*/"[rand() % 4];
        if (op1 == '/' && num1 % num2 != 0) {
            num1 = num2 * (rand() % 10 + 1);
        }
        if (op2 == '/' && num2 % num3 != 0) {
            num2 = num3 * (rand() % 10 + 1);
        }
        if (op1 == '+' || op1 == '-') {
            if (op2 == '*' || op2 == '/') {
                num2 = calculate(num2, num3, op2);
                op2 = op1;
                num3 = rand() % 100 + 1;
            }
        }
        result = calculate(num1, num2, op1);
        result = calculate(result, num3, op2);
    } while (!isResultValid(result));
    std::cout << num1 << ' ' << op1 << ' ' << num2 << ' ' << op2 << ' ' << num3 << " = ?\n";
    std::cin >> input;
    if (input == "-1") {
        break;
    }
    int userAnswer;
    std::stringstream ss(input);
    ss >> userAnswer;
    if (userAnswer == result) {
        std::cout << "正确\n";
        errorCount = 0; 
    }
    else {
        errorCount++;
        std::cout << "错误\n";
        printErrorFeedback(errorCount);
    }
    count++;
    printEncouragement(count);
}
return 0;

}
int calculate(int num1, int num2, char op) {
switch (op) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return num2 != 0 ? num1 / num2 : 1;
default: return 0;
}
}
bool isResultValid(int result) {
return result >= 0 && result <= 1000;
}
void printEncouragement(int count) {
switch (count) {
case 1:
std::cout << "还需努力\n";
break;
case 2:
std::cout << "再努力一把\n";
break;
case 3:
std::cout << "今天的量完成啦,请继续提高\n";
break;
case 4:
std::cout << "加油,还能努力一把\n";
break;
case 5:
std::cout << "今天的任务超额完成了,该休息了,明天继续\n";
break;
default:
// No encouragement for other counts
break;
}
}

// Print error feedback based on the error count
void printErrorFeedback(int errorCount) {
if (errorCount >= 5 && errorCount < 10) {

    std::cout << "你错的有点多了哦\n";
}
else if (errorCount >= 10) {
    std::cout << "做题要认真哦\n";
}

}
这里便于展示,达到提示的次数调整为1-5次与错误5次以上和10次以上




实验总结:
结对编程优点:
沟通与协作:结对编程强调了沟通的重要性。通过密切合作,我们能够更好地理解问题,找到更有效的解决方案,并且在编码过程中即时解决疑问。
知识共享:这次实验是一个学习和教学的过程。双方可以互相学习对方的编程技巧和解决问题的方法,从而提高个人技能。
代码质量:有两套眼睛检查代码意味着错误更容易被发现和修正。这通常会导致更高质量、更可维护的代码。
互相学习:每个人都有自己的强项和弱点。结对编程使得团队成员能够互补技能,共同成长。
动态交互:与传统的编程相比,结对编程更加动态和互动。它鼓励实时反馈和讨论,这有助于快速学习和适应。
问题解决:在遇到难题时,两个头脑比一个头脑好用。结对编程提供了即时的支持和创意,有助于找到解决问题的新方法。
效率:虽然结对编程可能看起来效率较低,但它实际上可以通过减少错误和提高代码质量来节省时间。
这次结对编程的实验是一个宝贵的学习经历,它不仅提高了编程技能,还加深了对团队合作和沟通重要性的理解。

posted @ 2024-04-21 13:27  gujiahao  阅读(13)  评论(0)    收藏  举报