结对编程
组队成员:2352530李博航 2352524丁杰鑫
设计思路:
随机生成数字和运算符,使用 rand() 生成 3个数字(num1, num2, num3),使用 rand() 生成 2个运算符(op1, op2),运算符可以是 +, -, *, /,如果运算符是 /,调整数字使其能整除(如 10 / 2 而不是 10 / 3)。然后计算正确结果,先计算 num1 op1 num2,再计算 (结果) op2 num3,确保最终结果 0 ≤ result ≤ 1000,否则重新生成题目。最后用户输入答案并判断对错,输出题目,等待用户输入答案,比较用户答案和正确结果,给出反馈,防止除数为 0:由于 num2 和 num3 最小是 1,不会出现除 0 错误。
源代码:
include <stdio.h>
include <stdlib.h>
include <time.h>
int main() {
int i, num1, num2, num3, op1, op2, result, answer;
char ops[4] = {'+', '-', '*', '/'};
srand(time(NULL));
for (i = 1; i <= 20; i++) {
num1 = rand() % 100 + 1;
num2 = rand() % 100 + 1;
num3 = rand() % 100 + 1;// 随机生成三个100以内的数字
op1 = rand() % 4;
op2 = rand() % 4; // 随机生成两个运算符
if (op1 == 3 && num1 % num2 != 0) {
num1 = num2 * (rand() % 10 + 1);
}
if (op2 == 3 && num2 % num3 != 0) {
num2 = num3 * (rand() % 10 + 1);
}// 确保除法能整除
switch(op1) {
case 0: result = num1 + num2; break;
case 1: result = num1 - num2; break;
case 2: result = num1 * num2; break;
case 3: result = num1 / num2; break;
}
switch(op2) {
case 0: result = result + num3; break;
case 1: result = result - num3; break;
case 2: result = result * num3; break;
case 3: result = result / num3; break;
}
if (result < 0 || result > 1000) {
i--;
continue;
}//若结果在0-1000之间,重新生成这道题
printf("题目%d: %d %c %d %c %d = ", i, num1, ops[op1], num2, ops[op2], num3);
scanf("%d", &answer);
// 题目的打印显示
if (answer == result) {
printf("正确!\n");
} // 检查答案
else {
printf("错误!正确答案是:%d\n", result);
}
}
return 0;
}
运行结果实例: