软工第二次结对作业
四则运算
一、题目选择
(1)能够自动生成四则运算练习题
(2)可以定制题目数量
(3)用户可以选择运算符
(4)用户设置最大数(如十以内、百以内等)
(5)用户选择是否有括号、是否有小数
(6)用户选择输出方式(如输出到文件、打印机等)
(7)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
二、任务分工
驾驶员:叶成威
基本完成全部代码工作,程序基本实现全部要求功能,并将代码上传到Conding.net代码托管系统(此处附代码地址)中,并对导航员在本次编程工作中起到的作用给出客观评价。
领航员:金宇航(博客地址)
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试,并根据上次作业的代码检查表对驾驶员的本次工作进行评价。
三、源代码
四、函数功能
4.1生成思路
void xshu(int n,int m,int lenth,int b[],int fil)//生成
{
if(fil==1)
{
FILE *fp;//建立一个文件操作指针
fp=fopen("ceshi.txt","w");//以追加的方式建立或打开ceshi.txt,默认位置在你程序的目录下面
srand((unsigned)time(NULL));
int i;//生成第i行算式
int l;//老师需要的第l个算符
int len;//随机算式长度
double a[50];//用小数数组代表生成的算式
for( i=0;i<n;i++)
{
len=rand()%9+3;
int j;
j=len%2;//判断随机生成的数组的第j位是否为算符位
if(j==0)
len=len-1;
for(j=0;j<len;j++)
{
a[j]=rand()/(double)(RAND_MAX/m);//生成数组
}
for(j=0;j<len;j++)
{
if(j%2!=0)
{
if((((int)a[j])%4)==3)
Divd(&a[j+1],m);//保证除数不为0
}
}
for(j=0;j<len;j++)
{
if(j%2!=0)
{
for(l=0;l<lenth;l++)
{
if((int)a[j]==b[l])
{
Symbol((int)a[j],fp);//生成的算符符号老师要求
break;
}
}
if(l>=lenth)
{
int chong,m=0;
while(1)//生成符合老师要求的算符
{
chong=rand()%4;
for(l=0;l<lenth;l++)
{
if(chong==b[l])
{
m=1;
Symbol(chong,fp);
break;
}
}
if(m==1)
{
break;
}
}
}
}
else
{
if((((int)(a[j]*10))%10)==0)//若生成的为整数,则强制转换为整数输出
{
fprintf(fp,"%d",(int)a[j]);
}
else
{
fprintf(fp,"%.1lf",a[j]);//输出随机生成的算数
}
}
}
fprintf(fp,"=\n");
}
fclose(fp);//关闭流
}
else
{
srand((unsigned)time(NULL));
int i;//生成第i行算式
int l;//老师需要的第l个算符
int len;//随机算式长度
double a[50];//用小数数组代表生成的算式
for( i=0;i<n;i++)
{
len=rand()%9+3;
int j;
j=len%2;//判断随机生成的数组的第j位是否为算符位
if(j==0)
len=len-1;
for(j=0;j<len;j++)
{
a[j]=rand()/(double)(RAND_MAX/m);//生成数组
}
for(j=0;j<len;j++)
{
if(j%2!=0)
{
if((((int)a[j])%4)==3)
Divd(&a[j+1],m);//保证除数不为0
}
}
for(j=0;j<len;j++)
{
if(j%2!=0)
{
for(l=0;l<lenth;l++)
{
if((int)a[j]==b[l])
{
Symbol2((int)a[j]);//生成的算符符号老师要求
break;
}
}
if(l>=lenth)
{
int chong,m=0;
while(1)//生成符合老师要求的算符
{
chong=rand()%4;
for(l=0;l<lenth;l++)
{
if(chong==b[l])
{
m=1;
Symbol2(chong);
break;
}
}
if(m==1)
{
break;
}
}
}
}
else
{
if((((int)(a[j]*10))%10)==0)//若生成的为整数,则强制转换为整数输出
{
printf("%d",(int)a[j]);
}
else
{
printf("%.1lf",a[j]);//输出随机生成的算数
}
}
}
printf("=\n");
}
}
}
4.2运行截图
文件输出
直接打印
五、总结
在本次任务中由我负责整体的规划。在代码编写过程中不断改进,按照用户的要求实现,使我意识到软件工程思想的重要性,在过程中遇到的问题让我反思自己在整体规划方面能力的欠缺。在今后,我会在这方面努力加强自身。在结对编程中我发现我们能够更加专注,并提高解决问题的效率而且减少了错误的发生。