Я изучаю программу на С ++ у себя дома. Так что я не очень хорош в его использовании.
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
{
}
}
// как напечатать выражение вопроса как в примере выше?
// как проверить правильность ответа или нет?
В 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
,
Других решений пока нет …