📄 小学生算法.cpp
字号:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include<math.h>
int random(int hard);
void right(int i);
void wrong(int i);
void plus(int hard,int n);
void minus(int hard,int n);
void multiply(int hard,int n);
void divide(int hard,int n);
void mix(int hard,int n);
int random(int hard)
{
if (hard==1)
return rand()%10;
else if (hard==2)
return rand()%100;
else return NULL;
}
void right(int i)
{
switch (i)
{
case 0:cout<<"√ 很好!"<<endl;break;
case 1:cout<<"√ 好聪明!"<<endl;break;
case 2:cout<<"√ 很出色!"<<endl;break;
case 3:cout<<"√ 真厉害!"<<endl;
}
}
void wrong(int i)
{
switch (i)
{
case 0:cout<<"× 错了!"<<endl;break;
case 1:cout<<"× 不对哦!"<<endl;break;
case 2:cout<<"× 还差点!"<<endl;break;
case 3:cout<<"× 做错啦!"<<endl;
}
}
void plus(int hard,int n)
{
int t,x,y,z,i,j;
double answer;
t=0;
j=1;
for (i=1;i<=n;i++)
{
do
{
x=random(hard);
y=random(hard);
} while (x+y>=pow(10,hard));
z=x+y;
cout<<"第"<<i<<"题:"<<x<<"+"<<y<<"=";
cin>>answer;
if (answer!=int(answer))
{
wrong(j);
j=(j+1)%4;
}
else if (answer==-1.0)
{
if (i==1)
{
cout<<"本次练习中,你没有做任何题目。"<<endl;
return;
}
else
{
cout<<"本次练习中,你做了"<<i-1<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/(i-1))/100.0<<"%。"<<endl;
return;
}
}
else if (answer==z)
{
right(j);
t=t+1;
j=(j+1)%4;
}
else
{
wrong(j);
j=(j+1)%4;
}
}
cout<<"本次练习中,你做了"<<n<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/n)/100.0<<"%。"<<endl;
}
void minus(int hard,int n)
{
int t,x,y,z,i,j;
double answer;
t=0;
j=1;
for (i=1;i<=n;i++)
{
do
{
x=random(hard);
y=random(hard);
} while (x<y);
z=x-y;
cout<<"第"<<i<<"题:"<<x<<"-"<<y<<"=";
cin>>answer;
if (answer!=int(answer))
{
wrong(j);
j=(j+1)%4;
}
else if (answer==-1.0)
{
if (i==1)
{
cout<<"本次练习中,你没有做任何题目。"<<endl;
return;
}
else
{
cout<<"本次练习中,你做了"<<i-1<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/(i-1))/100.0<<"%。"<<endl;
return;
}
}
else if (answer==z)
{
right(j);
t=t+1;
j=(j+1)%4;
}
else
{
wrong(j);
j=(j+1)%4;
}
}
cout<<"本次练习中,你做了"<<n<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/n)/100.0<<"%。"<<endl;
}
void multiply(int hard,int n)
{
int t,x,y,z,i,j;
double answer;
t=0;
j=1;
for (i=1;i<=n;i++)
{
x=random(hard);
y=random(hard);
z=x*y;
cout<<"第"<<i<<"题:"<<x<<"×"<<y<<"=";
cin>>answer;
if (answer!=int(answer))
{
wrong(j);
j=(j+1)%4;
}
else if (answer==-1.0)
{
if (i==1)
{
cout<<"本次练习中,你没有做任何题目。"<<endl;
return;
}
else
{
cout<<"本次练习中,你做了"<<i-1<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/(i-1))/100.0<<"%。"<<endl;
return;
}
}
else if (answer==z)
{
right(j);
t=t+1;
j=(j+1)%4;
}
else
{
wrong(j);
j=(j+1)%4;
}
}
cout<<"本次练习中,你做了"<<n<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/n)/100.0<<"%。"<<endl;
}
void divide(int hard,int n)
{
int t,x,y,z,i,j;
double answer;
t=0;
j=1;
for (i=1;i<=n;i++)
{
do
{
x=random(hard);
do
{
y=random(hard);
} while (y==0);
} while (x%y!=0);
z=int(x/y);
cout<<"第"<<i<<"题:"<<x<<"÷"<<y<<"=";
cin>>answer;
if (answer!=int(answer))
{
wrong(j);
j=(j+1)%4;
}
else if (answer==-1.0)
{
if (i==1)
{
cout<<"本次练习中,你没有做任何题目。"<<endl;
return;
}
else
{
cout<<"本次练习中,你做了"<<i-1<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/(i-1))/100.0<<"%。"<<endl;
return;
}
}
else if (answer==z)
{
right(j);
t=t+1;
j=(j+1)%4;
}
else
{
wrong(j);
j=(j+1)%4;
}
}
cout<<"本次练习中,你做了"<<n<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/n)/100.0<<"%。"<<endl;
}
void mix(int hard,int n)
{
int op[4],i,j,k,t,s1,s2;
double x[5],a,b,c,answer,tanswer;
t=0;
j=1;
for (i=1;i<=n;i++)
{
do
{
for (k=0;k<5;k++)
x[k]=random(hard);
for (k=0;k<4;k++)
op[k]=random(2)%4;
a=x[0];
s1=op[0];
b=x[1];
for (k=2;k<=4;k++)
{
s2=op[k-1];
c=x[k];
if ((s1/2)>=(s2/2))
{
switch (s1)
{
case 0:a=a+b;break;
case 1:a=a-b;break;
case 2:a=a*b;break;
case 3:while (b==0) tanswer=-1;if (tanswer==-1) continue; a=a/b;
}
s1=s2;
b=c;
}
else
{
switch (s2)
{
case 0:b=b+c;break;
case 1:b=b-c;break;
case 2:b=b*c;break;
case 3:while (c==0) tanswer=-1;if (tanswer==-1) continue; b=b/c;
}
}
}
switch (s1)
{
case 0:tanswer=a+b;break;
case 1:tanswer=a-b;break;
case 2:tanswer=a*b;break;
case 3:while (b==0) tanswer=-1;if (tanswer==-1) continue; tanswer=a/b;
}
} while ((tanswer<0.0)||(tanswer!=int(tanswer)));
cout<<"第"<<i<<"题:"<<int(x[0]);
for (k=1;k<=4;k++)
{
switch (op[k-1])
{
case 0:cout<<"+";break;
case 1:cout<<"-";break;
case 2:cout<<"×";break;
case 3:cout<<"÷";
}
cout<<int(x[k]);
}
cout<<"=";
cin>>answer;
if (answer!=int(answer))
{
wrong(j);
j=(j+1)%4;
}
else if (answer==-1.0)
{
if (i==1)
{
cout<<"本次练习中,你没有做任何题目。"<<endl;
return;
}
else
{
cout<<"本次练习中,你做了"<<i-1<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/(i-1))/100.0<<"%。"<<endl;
return;
}
}
else if (answer==tanswer)
{
right(j);
t=t+1;
j=(j+1)%4;
}
else
{
wrong(j);
j=(j+1)%4;
}
}
cout<<"本次练习中,你做了"<<n<<"题,作对了"<<t<<"题,正确率"<<int(t*10000/n)/100.0<<"%。"<<endl;
}
void main()
{
double i,j,n;
char yn;
srand(time(0));
do
{
cout<<"小学生算术辅助教学程序"<<endl;
do
{
cout<<"请选择难度级别(1-初级;2-高级):";
cin>>i;
} while ((i!=1.0)&&(i!=2.0));
do
{
cout<<"请选择要学习的算术类型(1-加法;2-减法;3-乘法;4-除法;5-混合运算):";
cin>>j;
} while ((j!=1.0)&&(j!=2.0)&&(j!=3.0)&&(j!=4.0)&&(j!=5.0));
do
{
cout<<"请输入要练习的题目数量(运算过程中可以回答'-1'来结束本次练习): ";
cin>>n;
} while ((n!=int(n))||(n<0.0));
switch (int(j))
{
case 1:plus(int(i),int(n));break;
case 2:minus(int(i),int(n));break;
case 3:multiply(int(i),int(n));break;
case 4:divide(int(i),int(n));break;
case 5:mix(int(i),int(n));
}
do
{
cout<<"还想再练习吗?(Y/N)";
cin>>yn;
} while ((yn!='Y')&&(yn!='y')&&(yn!='N')&&(yn!='n'));
cout<<endl<<endl;
} while ((yn=='Y')||(yn=='y'));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -