【问题标题】:Generating Random Math Operators in C++在 C++ 中生成随机数学运算符
【发布时间】:2019-07-03 07:49:42
【问题描述】:

所以我正在创建一个程序,我必须在其中创建具有随机数和运算符的随机问题集。我制作随机数没有问题。但是,我对如何随机化我需要使用的三个运算符(加法、减法和乘法)感到困惑。我知道我必须使用数字来表示这三个运算符,但我不明白该怎么做。我必须使用随机数生成器来执行此操作以及 If & Then 语句。这是我的源代码。

我尝试创建一个名为 "const int MAXOP_VALUE = 3" 的单独常量。我被困在之后该怎么做。如何将加法、减法和乘法运算符表示为数字?

#include "pch.h"
#include <iostream>
#include <iomanip>
#include <cmath>  
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
/*Constants*/
const int MIN_VALUE = 1;
const int MAX_VALUE = 100;

/*Variables*/
int number_1;
int number_2;
int math_op;

/*Get the System Time*/
unsigned seed = time(0);

/*Seed the Random Number Generator*/
srand(seed);

/*Generates Random Numbers for the Math Problems*/
number_1 = (rand() % (MAX_VALUE - MIN_VALUE + 1)) + MIN_VALUE;
number_2 = (rand() % (MAX_VALUE - MIN_VALUE + 1)) + MIN_VALUE;

/*Answer to Problem*/


/*Explains How the Program Works*/
cout << "****************************************" << endl << endl;
cout << "Welcome to the awesome math tutor! \n";
cout << "Get ready to add, subtract, and multiply!" << endl << endl;
cout << "****************************************" << endl << endl;
cout << "How much is" << number_1 << math_op << number_2 << "?" << 
endl;


return 0; 
}

我希望输出如下所示: “25+42是什么?” “什么是 54*3?” “什么是 76-2?”

【问题讨论】:

标签: c++


【解决方案1】:

一个用于生成随机math_op 的衬垫。删除int math_op 并将此行放在srand(seed) 之后的某个位置。

char math_op = "+-*"[rand() % 3];

您可以使用switch-case 语句进行实际计算。

【讨论】:

    【解决方案2】:

    一旦你有了两个随机数,你就可以使用另一个随机数来生成操作和预期的结果,比如:

    char op; int expected;
    switch(rand() % 3) {
        case 0:  op = '+'; expected = num1 + num2; break;
        case 1:  op = '-'; expected = num1 - num2; break;
        default: op = '*'; expected = num1 * num2; break;
    }
    

    然后您将能够输出表达式并将输入的内容与预期结果进行比较:

    int answer;
    std::cout << "What is " << num1 << " " << op << " " << num2 << "? ";
    std::cin >> answer;
    std::cout << "Your answer is " << (answer == expected) ? "right" : "wrong" << ".\n";
    

    通常我还建议您检查预期结果是否正常,因为没有溢出或被零除,或者在5 / 2 == 2 处小心进行整数除法。

    但是由于这两个数字都在 1 到 100 之间,并且除以零/整数除法不是问题,因为您的规范只允许加法、减法和乘法,应该没问题。

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 2015-12-20
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多