【问题标题】:I want to generate some mathematical questions by using rand and function我想通过使用 rand 和函数来生成一些数学问题
【发布时间】:2017-10-31 17:04:36
【问题描述】:

我正在家里学习 c++ 程序。所以我不擅长使用它。

  1. 首先我想像下面的语句一样输出程序。
  2. “问题 1:4 + 5 = 9 正确!
  3. “问题 2:5 * 5 = 9 失败!
  4. “问题 3:9 - 5 = 4 正确! 我想提出至少 5 个问题,不超过 10 个问题。 我的好奇心是如何增加问题数量以及如何检查我是否正确回答了这个问题。到目前为止,我已经完成了。请务必理解我的代码,因为我是在家里独自学习 C++

int main()
{
    int a, b, digit1, digit2,;
    char op, k;
    a = digit1;
    b = digit2;
    op = k;

    srand (time (NULL));

    generate2Digits(a,b);
    generateOperators(op);


}

void generate2Digits (int& a, int& b) 
{
    int digit1;
    int digit2;

    srand (time (NULL));

    digit1= rand ()%10;
    digit2= rand ()%10;

    for(int i = 1; i<= rand()%10; i++) 
    {
        cout << digit1 << endl;
        cout << digit2<< endl;
    }


}

void generateOperators(char& op)

{ 
    int k;

    for(int i=1; i<= 10; i++)
    {
        k = rand () % 4;

        switch(k)
        {
            case 0: cout << "+" << endl;
            break;
            case 1: cout << "-" << endl;
            break;
            case 2: cout << "*" << endl;
            break;
        }

    }


}

void printExpression(int a, int b, char op)
{
    do
    {






    }
}

// 如何打印上面例子中的问题表达式? // 如何判断答案是否正确?

【问题讨论】:

  • 需要重新格式化...
  • @Steve ...我会说更好的解释。
  • 如何增加题号以及如何检查我是否正确回答了这个问题。
  • printExpression() 发生了什么?
  • generateOperators() 将 k 设置为 0 到 3(含)的值,但开关没有 case 3: 将其更改为 % 3 或添加另一个除法案例。

标签: c++ random mathematical-expressions


【解决方案1】:

generate2Digits() 中,您会立即通过循环生成并打印 10 次数字。

我认为你应该只找到数字并等到找到运算符。

由于您有生成数字 (generate2Digits()) 和操作数 (generateOperators()) 的函数,您可以编写一个循环来重复 n 次(其中 n 是问题的数量)并在每次迭代中调用函数循环。

我们把generate2Digits()修改成

void generate2Digits (int& a, int& b)
{
    a=rand()%10;
    b=rand()%10;
}

ab 通过引用传递,此处所做的更改将反映回实际参数。

在这个函数中,我们只找到2个值并将它们存储在ab中。

现在

int generateOperators(char& op, int a, int b)
{
    int k = rand () % 3;
    switch(k)
    {
        case 0: op='+';
            return a+b;
        case 1: op='-';
            return a-b;
        case 2: op='*';
            return a*b;
    }
}

在您的程序中,您使用了k = rand () % 4,但没有case 用于3。由于您没有这种情况,您可以使用k = rand () % 3;

op 一个操作数,为了方便起见,这里还提供ab 的值,并且根据所选的运算符,还会计算并返回正确的答案。在这里,我返回这个值并将返回类型设为int 而不是void。如果您愿意,可以使用通过引用传递的参数。

我在这里没有在switch 中使用breaks,因为return 无论如何都会控制机箱。

现在

void printExpression(int n)
{
    int a, b, ans, res;
    char op;
    for(int i=0; i<n; ++i)
    {
        generate2Digits(a, b);
        res=generateOperators(op, a, b);
        cout<<a<<op<<b<<"=";
        cin>>ans;
        if(ans==res)
        {
            cout<<" correct!";
        }
        else
        {
            cout<<" fail!";
        }
        cout<<endl;
    }
}

循环迭代n 次,其中n 可能是问题的数量。在每次迭代中,使用generate2Digits() 找到两个数字,使用generateOperators() 找到操作数和正确答案。

用户输入一个数字作为答案,如果这个答案与这里generateOperands()计算的值相同,则答案是正确的。

您只需在此处使用srand() 一次并且在第一个rand() 之前使用。 main() 中的一个就足够了。见this

我看到你不考虑除法。如果您需要,您必须使用像 double 这样的浮点类型,而不是 int

【讨论】:

  • 您好,非常感谢您为我所做的一切!但是我想使用另一个函数,例如 int result(a,b,op),这样我就可以在那里查看结果!
  • @hoi 您可以在该函数中执行printExpression() 的最后部分所做的操作
  • 你知道怎么数数是对的吗?
  • 使用该函数计算并返回结果,然后将其与用户输入相匹配。如果正确,增加一个计数器。
猜你喜欢
  • 2019-08-18
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多