一、题目要求

我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
能够自动生成四则运算练习题
可以定制题目数量
用户可以选择运算符
用户设置最大数(如十以内、百以内等)
用户选择是否有括号、是否有小数
用户选择输出方式(如输出到文件、打印机等)
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二、任务分配

领航员: 王超
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试。
驾驶员: 罗东旭
能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中。

三、代码

代码地址

1.可视化界面

我使用vs的MFC应用程序项目实现图形化界面。如图:

图中两个编辑框一个用来输入题目个数,一个用来输入最大值,大的编辑框用来输出,右边可以勾选运算符,是否有括号,是否有小数等选项,都选好后点击生成即可生成符合要求的题目,同时把题目生成在文本文档中。

2.主程序代码

include <stdio.h>

include <stdlib.h>

include <time.h>

include <string.h>

int main()
{
FILE p;
p=fopen("1.txt","w");
int num,max1,kuohao,xiaoshu,i,mode,len,d,e,f;
float a,b,c;
char yunsuanfu[5];
printf("请输入题目个数\n");
scanf("%d",&num);
printf("请输入运算符\n");
scanf("%s",yunsuanfu);
printf("请输入最大数\n");
scanf("%d",&max1);
printf("是否有小数?(1是,2否)\n");
scanf("%d",&xiaoshu);
printf("请输入运算形式(1为a+b,2为a+b+c)\n");
scanf("%d",&mode);
len=strlen(yunsuanfu);
if(mode2)
{
printf("是否有括号?(1是,2否)\n");
scanf("%d",&kuohao);
}
srand(time(NULL));
if(xiaoshu
1)
for(i=0;i<num;i++)
{
a=rand()%(max1
100);
a=a/100;
b=rand()%(max1100);
b=b/100;
c=rand()%(max1
100);
c=c/100;
if(mode1)
{
printf("%.2f%c%.2f=\n",a,yunsuanfu[rand()%len],b);
fprintf(p,"%.2f%c%.2f=\n",a,yunsuanfu[rand()%len],b);
}
else
{
if(kuohao
2)
{
printf("%.2f%c%.2f%c%.2f=\n",a,yunsuanfu[rand()%len],b,yunsuanfu[rand()%len],c);
fprintf(p,"%.2f%c%.2f%c%.2f=\n",a,yunsuanfu[rand()%len],b,yunsuanfu[rand()%len],c);
}
else
if(rand()%20)
{
printf("(%.2f%c%.2f)%c%.2f=\n",a,yunsuanfu[rand()%len],b,yunsuanfu[rand()%len],c);
fprintf(p,"(%.2f%c%.2f)%c%.2f=\n",a,yunsuanfu[rand()%len],b,yunsuanfu[rand()%len],c);
}
else
{
printf("%.2f%c(%.2f%c%.2f)=\n",a,yunsuanfu[rand()%len],b,yunsuanfu[rand()%len],c);
fprintf(p,"%.2f%c(%.2f%c%.2f)=\n",a,yunsuanfu[rand()%len],b,yunsuanfu[rand()%len],c);
}
}
}
else
for(i=0;i<num;i++)
{
d=rand()%(max1);
e=rand()%(max1);
f=rand()%(max1);
if(mode
1)
{
printf("%d%c%d=\n",d,yunsuanfu[rand()%len],e);
fprintf(p,"%d%c%d=\n",d,yunsuanfu[rand()%len],e);;
}
else
{
if(kuohao2)
{
printf("%d%c%d%c%d=\n",d,yunsuanfu[rand()%len],e,yunsuanfu[rand()%len],f);
fprintf(p,"%d%c%d%c%d=\n",d,yunsuanfu[rand()%len],e,yunsuanfu[rand()%len],f);
}
else
if(rand()%2
0)
{
printf("(%d%c%d)%c%d=\n",d,yunsuanfu[rand()%len],e,yunsuanfu[rand()%len],f);
fprintf(p,"(%d%c%d)%c%d=\n",d,yunsuanfu[rand()%len],e,yunsuanfu[rand()%len],f);
}
else
{
printf("%d%c(%d%c%d)=\n",d,yunsuanfu[rand()%len],e,yunsuanfu[rand()%len],f);
fprintf(p,"%d%c(%d%c%d)=\n",d,yunsuanfu[rand()%len],e,yunsuanfu[rand()%len],f);
}
}
}
}

四、实验结果

1.整数无括号

2.小数无括号

3.小数有括号

五、总结

这是第二次结队实验,也是我和王超同学的第二次合作,由于我俩是一个宿舍的好朋友,以前还一起参加过acm比赛,所以合作起来默契无间,看起来很难的问题,经过我们的讨论也变得容易起来。所以最后我们尝试了一下图形化界面,虽然困难,但通过我们查阅资料,互相讨论,还是勉强做了出来。通过此次作业,我发现两个人的力量远远大于一个人,许多一个人想不到的想法两个人就可以想到,比如这次作业中怎么生成浮点型的随机数就困扰了我很久,但我和王超同学一讨论,就有了生成随机数后除以100便可以实现此功能,而且整个编程过程中王超同学也一直在给我方向,做完一个操作后马上就可以给我分析好接下来的操作,领我写起程序有如神助。
评价一下我的领航员王超,看起来大大咧咧的一个人,心思却很细腻,许多微小的错误都是他给挑了出来,使编程异常顺利,正因如此,我们的代码质量大大提高,因为时间有限,这样的合作模式也提高了完成效率。

六、合作照片

posted on 2019-05-06 21:24  罗东旭啊  阅读(164)  评论(0编辑  收藏  举报