计算机辅助教学
计算机在教育领域中的应用称为计算机辅助教学(CAI)。
请编写程序,帮助小学生学习整数的四则运算。利用rand函数产生两个一位的正整数,接着程序应该现实诸如“How much is 6 times 7?”的问题。然后学生输入答案。接下来程序会检查学生的答案。如果回答正确,打印出“Very Good!”,随后问另外一个乘法问题。如果回答错误,打印出“No, Please try again.”,然后让学生继续尝试回答同样的问题,直到最后回答正确。需要用一个单独的函数专门用于产生新的问题。当程序刚执行时或者用户问题回答正确时,就调用这个函数。
计算机辅助教学环境中出现的一个问题就是学生容易疲劳。这是可以消除的,通过变换计算机的响应来抓住学生的注意力。请完善1的程序,是的对于每个正确的答案和不正确的答案,应该打印出不同的评语,如下所示:
正确答案的评语:
Very good!
Excellent!
Nice Work!
Keep up the good work!
错误答案的评语:
No. Please try again.
Wrong. Try once more.
Don't give up!
No. Keep trying.
利用随机数生成器在1-4之间选择一个数,用它为每个正确或不正确的回答选择相应的评语。使用switch语句发出响应。
许多较复杂的计算机辅助教学系统可以监控学生在一段时间内的表现。决定开始一个新的主题通常是基于学生成功完成前面主题的情况。请完善2中的程序,统计学生回答正确和回答错误的次数。学生回答10次以后,程序应该计算回答正确的百分比。如果百分比低于75%,那么程序应打印“Please ask your teacher for extra help.”,然后重置程序,这样另一学生可以使用它。如果百分比大于等于75%,则显示“Congratulations, you are ready to go to the next level!”,然后重置程序,这样另一学生可以使用它。
继续完善3中的程序,让它可以使用户输入难度等级。在难度等级为1时,程序在问题中只使用一位数;在难度等级为2时,程序最多使用两位数;以此类推。
继续完善4中的程序,允许用户能选择一种类型的算术问题来学习。选择1代表只有加法运算,2代表只有减法运算,3说明只有乘法运算,4表示只有除法运算,5表示上面四种类型运算的随机混合。
代码如下:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int Degree();//难度等级
int FirstDecision();//在难度1中选择要进行的运算
int Addition();//加法运算
int Subtraction();//减法运算
int Multiplication();//乘法算式
int Division();//除法运算
int Mix();//四种类型随机混合
int SecondDecision();//在难度2中选择要进行的运算
int LevelAddition();//加法算式进阶版
int LevelSubtraction();//减法运算进阶版
int levelMultiplication();//乘法算式进阶版
int LevelDivision();//除法运算进阶版
int LevelMix();//四种类型随机混合进阶版
void Comment();//回答正确的评语
void Remark();//回答错误时的评语
int Addition()//加法算式;当学生回答错误时,产生新的随机数
{
unsigned int number1 = 1 + rand() % 10;//产生随机数
unsigned int number2 = 1 + rand() % 10;
int Afrequency = 0;
int sum;
int Tsum;
Tsum = number1 + number2;
std::cout << "请计算下列加法算式:" << std::endl;
std::cout << number1 << " + " << number2 << " = " << std::endl;
std::cout << " 请输入你的计算答案sum:" << std::endl;
std::cin >> sum;//学生输入答案
while(sum)
{
if(sum == Tsum) //判断学生回答是否正确以及给出对应的评语
{
Comment();//以及给出对应的评语
Degree();
}
else
{
Remark();//学生回答错误时,产生随机的评语,然后继续进行加法运算。
Addition();
}
}
}
int LevelAddition()//加法算式进阶版
{
unsigned int number11 = 10 + rand() % 100;//产生随机数
unsigned int number22 = 10 + rand() % 100;
int Lsum;
int LTsum;
LTsum = number11 + number22;
std::cout << "请计算下列加法算式:" << std::endl;
std::cout << number11 << " + " << number22 << " = " << std::endl;
std::cout << " 请输入你的计算答案Lsum:" << std::endl;
std::cin >> Lsum;//学生输入答案
while(Lsum)
{
if(Lsum == LTsum) //判断学生回答是否正确以及给出对应的评语
{
Comment();//以及给出对应的评语
Degree();
}
else
{
Remark();//学生回答错误时,产生随机的评语,然后继续进行加法运算。
Addition();
}
}
}
int Subtraction()//减法运算
{
unsigned int number7 = 1 + rand() % 10;//产生随机数
unsigned int number8 = 1 + rand() % 10;
int differ;
int Sdiffer;
int Sfrequency = 0;
Sdiffer = number8 - number7;
std::cout << "请回答下列减法算式" << std::endl;
std::cout << number8 << " - " << number7 << " = " << std::endl;
std::cout << "请输入你的计算结果differ:" << std::endl;
std::cin >> differ;
while(differ)
{
if(Sdiffer == differ)//判断学生是否回答正确
{
Comment();//给出评语
Degree();//返回选择页面,重新选择
}
else
{
Remark();
Subtraction();//学生回答错误,则继续进行减法运算
}
}
}
int LevelSubtraction()//减法运算进阶版
{
unsigned int number77 = 10 + rand() % 100;//产生随机数
unsigned int number88 = 10 + rand() % 100;
int Ldiffer;
int LSdiffer;
LSdiffer = number88 - number77;
std::cout << "请回答下列减法算式" << std::endl;
std::cout << number88 << " - " << number77 << " = " << std::endl;
std::cout << "请输入你的计算结果differ:" << std::endl;
std::cin >> Ldiffer;
while(Ldiffer)
{
if(LSdiffer == Ldiffer)//判断学生是否回答正确
{
Comment();//给出评语
Degree();//返回选择页面,重新选择
}
else
{
Remark();
Subtraction();//学生回答错误,则继续进行减法运算
}
}
}
int Multiplication()//乘法算式
{
unsigned int number3 = 1 + rand() % 10;
unsigned int number4 = 1 + rand() % 10;//产生随机数
int times;
int Mtimes;
int Mfrequency = 0;
Mtimes = number3 * number4;
std::cout << "请回答下列乘法算式:" << std::endl;
std::cout << number3 << " * " << number4 << " = " << std::endl;//产生随机的乘法算式
std::cout << "请输入你的计算结果times:" << std::endl;
std::cin >> times;
while(times)
{
if(Mtimes == times)//判断学生的答案是否正确
{
Comment();
Degree();//回答正确,返回选择页面
}
else
{
Remark();
Multiplication();//回答错误,继续进行乘法运算
}
}
}
int LevelMultiplication()//乘法算式进阶版
{
unsigned int number33 = 10 + rand() % 100;
unsigned int number44 = 10 + rand() % 100;//产生随机数
int Ltimes;
int LMtimes;
LMtimes = number33 * number44;
std::cout << "请回答下列乘法算式:" << std::endl;
std::cout << number33 << " * " << number44 << " = " << std::endl;//产生随机的乘法算式
std::cout << "请输入你的计算结果times:" << std::endl;
std::cin >> Ltimes;
while(Ltimes)
{
if(LMtimes == Ltimes)//判断学生的答案是否正确
{
Comment();
Degree();//回答正确,返回选择页面
}
else
{
Remark();
Multiplication();//回答错误,继续进行乘法运算
}
}
}
int Division()//除法运算
{
unsigned int number5 = 5 + rand() % 10;
unsigned int number6 = 1 + rand() % 5;
int Dfrequency = 0;
double except;
double Dexcept;
Dexcept = number5 / number6;
std::cout << "回答下列除法算式" << std::endl;
std::cout << number5 << " / " << number6 << " = " << std::endl;
std::cout << "请输入你的计算结果expect:" << std::endl;
std::cin >> except;
while(except)
{
if(Dexcept == except)//判断学生的答案案是否正确
{
Comment();
Degree();//回答正确,返回选择页面
}
else
{
Remark();
Division();//回答错误,继续进行除法运算
}
}
}
int LevelDivision()//除法运算进阶版
{
unsigned int number55 = 10 + rand() % 100;
unsigned int number66 = 10 + rand() % 100;
double Lexcept;
double LDexcept;
LDexcept = (number55 / number66) + (number55 % number66);
std::cout << "回答下列除法算式" << std::endl;
std::cout << number55 << " / " << number66 << " = " << std::endl;
std::cout << "请输入你的计算结果expect:" << std::endl;
std::cin >> Lexcept;
while(Lexcept)
{
if(LDexcept == Lexcept)//判断学生的答案案是否正确
{
Comment();
Degree();//回答正确,返回选择页面
}
else
{
Remark();
Division();//回答错误,继续进行除法运算
}
}
}
int Mix()//四种随机混合运算
{
unsigned int cRef = 1 + rand() % 4;//通过产生随机数,来控制算式的随机出现
switch(cRef)
{
case 1:
Addition();
break;
case 2:
Subtraction();
break;
case 3:
Multiplication();
break;
case 4:
Division();
break;
default:
std::cout << "输入了不正确的数值" << std::endl;
break;
}
}
int LevelMix()
{
unsigned int LcRef = 1 + rand() % 4;//通过产生随机数,来控制算式的随机出现
switch(LcRef)
{
case 1:
LevelAddition();
break;
case 2:
LevelSubtraction();
break;
case 3:
LevelMultiplication();
break;
case 4:
LevelDivision();
break;
default:
std::cout << "输入了不正确的数值" << std::endl;
break;
}
}
void Comment() //产生1~4的随机数,然后根据产生的随机数给出对应的评语(回答正确时对应的评语)
{
unsigned int r = 1 + rand() % 4;
switch(r)
{
case 1:
std::cout << "Very Good!" << std::endl;
break;
case 2:
std::cout << "Excellent!" << std::endl;
break;
case 3:
std::cout << "Nice Work!" << std::endl;
break;
case 4:
std::cout << "Keep up the good work!" << std::endl;
break;
default:
std::cout << "输入的数值不正确" << std::endl;
break;
}
}
void Remark()// 回答错误时,随机产生的评语
{
unsigned int R = 1 + rand() % 4;
switch(R)
{
case 1:
std::cout << "No. Please try again." << std::endl;
break;
case 2:
std::cout << "Wrong. Try once more." << std::endl;
break;
case 3:
std::cout << "Don't give up!" << std::endl;
break;
case 4:
std::cout << "No. Keep trying." << std::endl;
break;
default:
std::cout << "输入的数值不正确" << std::endl;
break;
}
}
int FirstDecision()//选择要进行的算式的类型,难度等级1
{
int numDecision;
std::cout << "请输入你要选择要进行的运算:\n1:加法运算\n2:减法运算\n3:乘法运算\n4:除法运算\n5:四则混合运算" << std::endl;
std::cin >> numDecision;//输入要选择的算式类型
switch(numDecision)
{
case 1:
Addition();//选择加法
break;
case 2:
Subtraction();//进行减法运算
break;
case 3:
Multiplication();//进行乘法运算
break;
case 4:
Division();//进行除法运算
break;
case 5:
Mix();//进行上述四种混合运算
break;
default:
std::cout << "输入了不在选择范围内的数值" << std::endl;
}
}
int SecondDecision()//选择要进行的算式的类型,难度等级2
{
int numberDecision;
std::cout << "请输入你要选择要进行的运算:\n1:加法运算\n2:减法运算\n3:乘法运算\n4:除法运算\n5:四则混合运算" << std::endl;
std::cin >> numberDecision;//输入要选择的算式类型
switch(numberDecision)
{
case 1:
LevelAddition();//选择加法的难度等级
break;
case 2:
LevelSubtraction();//进行减法运算
break;
case 3:
LevelMultiplication();//进行乘法运算
break;
case 4:
LevelDivision();//进行除法运算
break;
case 5:
LevelMix();//四种运算随机混合进阶版
break;
default:
std::cout << "输入了不在选择范围内的数值" << std::endl;
}
}
int Degree()//加法难度等级
{
int numDegree;
std::cout << "请输入你选择的难度等级:\n1:难度等级为1\n2:难度等级为2" << std::endl;
std::cin >> numDegree;
switch(numDegree)
{
case 1:
FirstDecision();
break;
case 2:
SecondDecision();
break;
default:
std::cout << "输入了错误的数值!" << std::endl;
break;
}
}
int main()
{
srand(static_cast<unsigned int>( time(0)));//产生随机数
std::cout << " **********欢迎进入计算机教学辅助系统**********" << std::endl;
Degree();
return 0;
}
有哪位大佬可以帮我解决一下“统计回答正确的次数”这个问题(。◕◡◕。)ノ
(我的疑问:函数自己调用自己之后,会出现frequency又重置为0的情况,该怎样解决,希望大家都能发表一下自己的方法。)