第二次结对作业
一、题目要求:
- 本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
能够自动生成四则运算练习题
可以定制题目数量
用户可以选择运算符
用户设置最大数(如十以内、百以内等)
用户选择是否有括号、是否有小数
用户选择输出方式(如输出到文件、打印机等)
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
驾驶员:
能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中
能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结。
领航员:
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试
能够根据上次作业的代码检查表对驾驶员的本次工作进行评价
能够对本次工作完成500字以上的总结
二、队友以及Coding
-
结对伙伴:饶光宇、杨里生
驾驶员(黄绍伟)、领航员(饶光宇、杨里生) 具体分配
三、代码
因为自己对前端开发的不熟悉不了解,难度很大,所以放弃对界面的设计。然后这个程序是让用户自己去选择功能和数目,并且提供答案参考,看是否做得对,对了几道题。
源代码上传到了Coding。
核心代码:
void add()
{
int d,e,x;
printf("\t\t\t请选择几以内的运算:");
scanf("%d",&x);
printf("\t\t\t需要练习多少道题:");
scanf("%d",&d);
printf("\t\t\t是否为小数(1.小数 2.整数): ");
scanf("%d",&e);
switch(e)
{
case 1:
Xiaoshu1(d,x);break;
case 2:
Zhengshu1(d,x);
break;
}
}
void Zhengshu1(int d,int x)
{
int a,b,i;
for(i=0;i<d;i++)
{
a=rand()%x;
b=rand()%x;
printf("\n\t\t\t %d + %d = %d",a,b,a+b);
}
}
void Xiaoshu1(int d,int x)
{
float a,b;
int i;
x=x*100;
for(i=0;i<d;i++)
{
a=rand()%x*0.01;
b=rand()%x*0.01;
printf("\n\t\t\t %.2f + %.2f =%.2f",a,b,a+b);
}
}
void del()
{
int d,e,x;
printf("\t\t\t请选择几以内的运算:");
scanf("%d",&x);
printf("\t\t\t需要练习多少道题:");
scanf("%d",&d);
printf("\t\t\t是否为小数(1.小数 2.整数): ");
scanf("%d",&e);
switch(e)
{
case 1:
Xiaoshu2(d,x);break;
case 2:
Zhengshu2(d,x);
break;
}
}
void Zhengshu2(int d,int x)
{
int a,b,i;
for(i=0;i<d;i++)
{
a=rand()%x;
b=rand()%x;
for(;a-b<0;)
{
a=rand()%x;
b=rand()%x;
}
printf("\n\t\t\t %d - %d = %d",a,b,a-b);
}
}
void Xiaoshu2(int d,int x)
{
float a,b;
int i;
x=x*100;
for(i=0;i<d;i++)
{
a=rand()%x*0.01;
b=rand()%x*0.01;
printf("\n\t\t\t %.2f - %.2f =%.2f",a,b,a-b);
}
}
void mul()
{
int d,e,x;
printf("\t\t\t请选择几以内的运算:");
scanf("%d",&x);
printf("\t\t\t需要练习多少道题:");
scanf("%d",&d);
printf("\t\t\t是否为小数(1.小数 2.整数): ");
scanf("%d",&e);
switch(e)
{
case 1:
Xiaoshu3(d,x);break;
case 2:
Zhengshu3(d,x);
break;
}
}
void Zhengshu3(int d,int x)
{
int a,b,i;
for(i=0;i<d;i++)
{
a=rand()%x;
b=rand()%x;
printf("\n\t\t\t %d * %d = %d",a,b,a*b);
}
}
void Xiaoshu3(int d,int x)
{
float a,b;
int i;
x=x*100;
for(i=0;i<d;i++)
{
a=rand()%x*0.01;
b=rand()%x*0.01;
printf("\n\t\t\t %.2f * %.2f =%.2f",a,b,a*b);
}
}
void di()
{
int d,e,x;
printf("\t\t\t请选择几以内的运算:");
scanf("%d",&x);
printf("\t\t\t需要练习多少道题:");
scanf("%d",&d);
printf("\t\t\t是否为小数(1.小数 2.整数): ");
scanf("%d",&e);
switch(e)
{
case 1:
Xiaoshu4(d,x);break;
case 2:
Zhengshu4(d,x);break;
}
}
void Zhengshu4(int d,int x)
{
int a,b,i;
for(i=0;i<d;i++)
{
a=rand()%x;
b=rand()%x+1;
printf("\n\t\t\t %d / %d = %d",a,b,a/b);
}
}
void Xiaoshu4(int d,int x)
{
float a,b;
int i;
x=x*100;
for(i=0;i<d;i++)
{
a=rand()%x*0.01;
b=rand()%x*0.01+0.01;
printf("\n\t\t\t %.2f / %.2f =%.2f",a,b,a/b);
}
}
void kuohao()
{
int a,b,c,x,d,i,e;
printf("\t\t\t请选择几以内的运算:");
scanf("%d",&x);
printf("\t\t\t需要练习多少道题:");
scanf("%d",&e);
for(i=0;i<=e;i++)
{
a=rand()%x;
b=rand()%x;
d=rand()%x;
printf("\n\t\t\t (%d + %d)*%d = ",a,b,d);
a=a+b;
printf("%d",a*d);
}
}
- 主程序截图:
四、运行结果:
1.加法:
整数加法
小数加法
2.减法:
小数减法
整数减法
3.乘法:
小数乘法
4.除法:
小数除法
整数除法
5.括号:
五、心得体会:
这是第二次结对作业,当时看到作业题目的时候感觉道这个题不是很难,但是上手后发现随机生成数每次都一样,不会改变,后来上网查阅资料蔡发现rand()函数需要调用一个时间函数srand()来实现随机数的生成,并且这个随机数rand是一个值,是需要我们去控制其范围的。在这次作业中,我身为驾驶员,是整个程序的作者,是我赋予了他生命,但是也得需要领航员来进行修改。就像一款成功的app不是创作出来就是推向市场,而是需要很多的测试来保证其稳定性。总的来说,齐心协力比自己干自己的强很多。我也看了别的同学的代码,他们的生成符号也是随机的,但是我的是选择了模式后做到底,各有各的好吧,rand%4来取符号位可以说是一个比较创新的做法,可以省去很多行代码,但是我还是选择了保留自己的特色。在这次作业中,团队协作的能力得到了提高,沟通和行动都是很大影响工程的因素!