个人作业1——四则运算题目生成程序(基于控制台)
码市地址:https://coding.net/u/keyi123/p/kekeke/git/blob/master/四则运算.cpp
https://coding.net/u/keyi123/p/kekeke/git/blob/master/四则运算.exe
a.需求分析
-
除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
-
运算符为 +, −, ×, ÷
-
并且要求能处理用户的输入,并判断对错,打分统计正确率
-
要求能处理用户输入的真分数, 如 1/2, 5/12 等
-
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
b.功能设计
-
自动生成的随机数
-
能够进行整数和真分数的四则运算
-
随机生成运算符号
-
判断对错,得出正确答案,打分统计正确率以及计算得分
c.设计实现
本程序是通过c++来实现的,一共有三个方法和一个主函数,gys(int x,int y)用于求最大公约数函数,gbs(int x,int y)用于求最小公倍数函数,yuefen(int &fz,int &fm)用于定义约分函数,主函数中能够生成随机数,整数和真分数的四则运算,以及判断对错,得出正确答案,打分统计正确率以及计算得分。
d.代码说明
gys(int x,int y)用于求最大公约数函数
int gys(int x,int y) //定义求最大公约数函数
{
return y?gys(y,x%y):x; //递归调用gys,返回最大公约数
}
gbs(int x,int y)用于求最小公倍数函数
int gbs(int x,int y) //定义求最小公倍数函数
{
return x/gys(x,y)*y;
}
yuefen(int &fz,int &fm)用于定义约分函数
void yuefen(int &fz,int &fm) //定义约分函数
{
int s=gys(fz,fm);
fz=fz/s;
fm=fm/s;
}
main函数的主要部分
(1)整数运算
for(i=0;i<num;i++)
{
srand((int)time(0));
int a=rand()%100+1; //生成1~99范围内随机数
int b=rand()%100+1;
int c=rand()%3; //生成0~3范围内随机数。0表示加法,1表示减法,2表示乘法,3表示除法
if(c==0)
{
result1=a+b;
printf("%d+%d=",a,b);
}
if(c==1)
{
while((a-b)<0){
int a=rand()%100+1; //生成1~99范围内随机数
int b=rand()%100+1;
}
result1=a-b;
printf("%d-%d=",a,b);
}
if(c==2)
{
result1=a*b;
printf("%d*%d=",a,b);
}
if(c==3)
{
result1=a/b;
printf("%d÷%d=",a,b);
}
cin>>answer1;
if(answer1==result1)
{
printf("correct\n");
co=co+1; //若正确,co+1
}
else
{
printf("wrong\n");
(2)真分数运算
for(i=0;i<num;i++)
{
srand((int)time(0));
int a=rand()%100+1; //生成1~99范围内随机数
int b=rand()%100+1;
int c=rand()%100+1;
int d=rand()%100+1;
int e=rand()%3; //生成0~3范围内随机数。0表示加法,1表示减法,2表示乘法,3表示除法
if(a<b&&c<d)
{
if(e==0)
{
int u1,u2,v=gbs(b,d);
u1=(v/b*a);
//cout<<u1<<endl;
u2=v/d*c;
fz1=u1+u2;
fm1=v;
yuefen(fz1,fm1);
printf("%d/%d+%d/%d=",a,b,c,d);
}
if(e==1)
{
while((a*d-b*c)<0){
int a=rand()%100+1; //生成1~99范围内随机数
int b=rand()%100+1;
int c=rand()%100+1;
int d=rand()%100+1;
}
int u1,u2,v=gbs(b,d);
u1=v/b*a;
u2=v/d*c;
fz1=u1-u2;
fm1=v;
yuefen(fz1,fm1);
printf("%d/%d-%d/%d=",a,b,c,d);
}
if(e==2)
{
fz1=a*c;
fm1=b*d;
yuefen(fz1,fm1);
printf("(%d/%d)*(%d/%d)=",a,b,c,d);
}
if(e==3)
{
fz1=a*d;
fm1=b*c;
yuefen(fz1,fm1);
printf("(%d/%d)÷(%d/%d)=",a,b,c,d);
}
cin>>answer2; //输入答案
float result2=(float)fz1/(float)fm1;
cout<<"正确的答案为:"<<result2<<endl;
if (abs(answer2-result2)<0.000001)
{
printf("correct\n");
co=co+1; //若正确,co+1
}
else printf("wrong\n");
}
else i=i-1;
}
zhengquelv=(co*1.0)/num; //计算正确率
printf("\n正确率为:%f",zhengquelv);
printf("得分为:%f",zhengquelv*100);
e.测试运行
(1)整数运算
(2)真分数运算
PSP表:
e.小结
1、第一次做软件工程的作业,程序语言掌握的不是很熟练花费了一些时间,通过百度和请教同学,将循环、递归、浮点型比较等慢慢掌握熟练。
2、随机数写在循环里,导致程序运行较慢,以后要注意。
3、markdown的排版、、、写进去,没有注意中英文,导致无法自动排版,以后要多注意中英文的变换。
4、日后要多熟悉程序语言,也要多向同学们学习。