您的位置:首页 > 其它

个人作业1——四则运算题目生成程序(基于控制台)

2017-03-07 22:31 543 查看
码市地址: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、日后要多熟悉程序语言,也要多向同学们学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: