Я хочу сгенерировать некоторые математические вопросы, используя rand и function

Я изучаю программу на С ++ у себя дома. Так что я не очень хорош в его использовании.

  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
{

}
}

// как напечатать выражение вопроса как в примере выше?
// как проверить правильность ответа или нет?

-2

Решение

В generate2Digits(), вы генерируете и печатаете числа 10 раз через цикл сразу.

Я думаю, что вы должны просто найти номера и подождать, пока вы не найдете оператора.

Так как у вас есть функции для генерации цифр (generate2Digits()) и операнд (generateOperators()), вы можете написать цикл для повторения n раз (где n — количество вопросов) и вызывать функции на каждой итерации цикла.

Давайте изменим generate2Digits() в

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

a а также b передаются по ссылке, и сделанные здесь изменения будут отражены в фактических аргументах.

В этой функции мы просто находим 2 значения и сохраняем их в a а также b,

Сейчас

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 и чтобы сделать вещи проще, ценности a а также b Также доступны здесь и на основе выбранного оператора, правильный ответ также рассчитывается и возвращается. Здесь я возвращаю это значение и делаю тип возвращаемого значения int вместо void, Вы можете использовать параметр, переданный по ссылке, если хотите.

Я не пользовалась breakс внутри switch здесь, потому что 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 может быть количество вопросов. На каждой итерации 2 числа находятся с помощью generate2Digits() и операнд и правильный ответ находится с generateOperators(),

Использование вводит число в качестве ответа, и если этот ответ совпадает со значением, вычисленным как generateOperands() здесь ответ правильный.

Вам нужно использовать srand() только один раз и до первого rand() здесь. Тот в main() достаточно. Увидеть этот.

Я вижу, что вы не рассматриваете разделение. Если вам нужно, вы должны использовать тип с плавающей запятой, как double вместо int,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]