2352510 四则运算
一、实验要求
小学老师要每周给同学出300道四则运算练习题。
两个运算符,100 以内的数字,不需要写答案。
需要检查答案是否正确,并且保证答案在 0..1000 之间
二、实验环境
Dev-C++
三、实验步骤
1.生成三个随机数和两个运算符号
2.用户输入回答需判断正确和提示正确答案
四、代码解读
main 主函数:
借助 srand 函数初始化随机数种子。
运用 while 循环生成 300 道符合要求的练习题。
随机生成 100 以内的三个数字以及两个运算符。
调用 calculate 函数计算表达式的正确结果。
alculate 函数:
先计算 num1 和 num2 之间的乘除运算,把结果存于 left_result 变量。
接着依据 op2 运算符计算最终结果。
五、源代码
点击查看代码
#include <iostream>
#include <cstdlib>
#include <ctime>
// 计算表达式的值
double calculate(double num1, char op1, double num2, char op2, double num3) {
double left, right;
// 先计算左边的运算
if (op1 == '+') {
left = num1 + num2;
} else if (op1 == '-') {
left = num1 - num2;
} else if (op1 == '*') {
left = num1 * num2;
} else if (op1 == '/') {
if (num2 == 0) {
return -1; // 避免除零错误
}
left = num1 / num2;
}
// 再计算右边的运算
if (op2 == '+') {
right = left + num3;
} else if (op2 == '-') {
right = left - num3;
} else if (op2 == '*') {
right = left * num3;
} else if (op2 == '/') {
if (num3 == 0) {
return -1; // 避免除零错误
}
right = left / num3;
}
return right;
}
int main() {
srand(static_cast<unsigned int>(time(NULL)));
int count = 0;
while (count < 300) {
// 随机生成 100 以内的三个数字
int num1 = rand() % 100 + 1;
int num2 = rand() % 100 + 1;
int num3 = rand() % 100 + 1;
// 随机选择两个运算符
char operators[] = {'+', '-', '*', '/'};
char op1 = operators[rand() % 4];
char op2 = operators[rand() % 4];
double result = calculate(num1, op1, num2, op2, num3);
if (result >= 0 && result <= 1000) {
std::cout << num1 << " " << op1 << " " << num2 << " " << op2 << " " << num3 << " = ";
double userAnswer;
std::cin >> userAnswer;
if (userAnswer == result) {
std::cout << "回答正确!" << std::endl;
} else {
std::cout << "回答错误,正确答案是 " << result << std::endl;
}
count++;
}
}
return 0;
}
七、实验体会
起初随机生成运算符号 忽略运算优先级 导致用户算对了 机器判错和提示错误答案

考虑到需编写条件函数判断运算优先级和此代码适配的低龄的儿童 干脆将第一个运算符号规定好乘除 第二个运算符为加减这样从左到右的运算顺序遵循了运算优先级

浙公网安备 33010602011771号