第二次结对作业
四则运算
1.题目要求
(1)可以定制题目数量
(2)用户可以选择运算符
(3)用户设置最大数(如十以内、百以内等)
(4)用户选择是否有括号、是否有小数
(5)用户选择输出方式(如输出到文件、打印机等)
(6)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
2.任务分工
驾驶员:王妍楠
要求:能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中。
能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结。
领航员:彭辰麟
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试。
能够根据上次作业的代码检查表对驾驶员的本次工作进行评价。
能够对本次工作完成500字以上的总结。
3.代码地址
https://dev.tencent.com/u/chengzinaiyou/p/sizeyunsuan/git
4.函数功能
(1)随机生成四则运算
首先先随机n个可指定范围的随机整数或小数,再随机生成n-1的随机符号,将其组合成数字列,再通过转换成字符串
int ch_f;
int ch_k;
int i=0;
float afk[shu];
float num[shu];
float answer[100];
char ans[100];
int au=0;
int t,p;
int ak=0;
ch_k=zautorand(2,3);
if(flag==1)
{
for(int p=0;p<shu;p++)
{
num[p]=zautorand(a,b);
}
for(int p=0;p<shu-1;p++)
{
afk[p]=choose(1);
}
t=0;
i=0;
p=0;
answer[t]=num[i];
t++;
answer[t]=afk[p]*10000;
t++;
answer[t]=50000;
t++;
for(int u=0;;)
{
i++;
answer[t]=num[i];
t++;
u++;
if(u==ch_k)
{
break;
}
p++;
answer[t]=afk[p]*10000;
t++;
}
answer[t]=60000;
t++;
for(int u=ch_k+1;;)
{
p++;
answer[t]=afk[p]*10000;
t++;
u++;
if(u>shu)
{
break;
}
i++;
answer[t]=num[i];
t++;
}
au=t;
}
if(flag==2)
{
for(int p=0;p<shu;p++)
{
num[p]=xautorand(a,b);
}
for(int p=0;p<shu-1;p++)
{
afk[p]=choose(1);
}
t=0;
i=0;
p=0;
answer[t]=num[i];
t++;
answer[t]=afk[p]*10000;
t++;
answer[t]=50000;
t++;
for(int u=0;;)
{
i++;
answer[t]=num[i];
t++;
u++;
if(u==ch_k)
{
break;
}
p++;
answer[t]=afk[p]*10000;
t++;
}
answer[t]=60000;
t++;
for(int u=ch_k+1;;)
{
p++;
answer[t]=afk[p]*10000;
t++;
u++;
if(u>shu)
{
break;
}
i++;
answer[t]=num[i];
t++;
}
au=t;
}
/*for(int u=0;u<au-1;u++)
{
printf("%.3f,",answer[u]);
}
printf("\n");
*/
int k=0;
int u=0;
for( ;k<au-1;)
{
if(answer[k]==50000)
{
ans[u]='(';
u++;
}
else if(answer[k]==10000)
{
ans[u]='+';
u++;
}
else if(answer[k]==20000)
{
ans[u]='-';
u++;
}
else if(answer[k]==30000)
{
ans[u]='*';
u++;
}
else if(answer[k]==40000)
{
ans[u]='/';
u++;
}
else if(answer[k]==60000)
{
ans[u]=')';
u++;
}
else
{
char ch[100];
sprintf(ch,"%.2f",answer[k]);
int n;
n=strlen(ch);
for(int i=0;i<n;i++)
{
ans[u]=ch[i];
u++;
}
}
k++;
}
ans[u]='=';
ans[u+1]='\0';
printf("%s\n",ans);
//FILE *fptr;
FILE *fptr1,*fptr2;
fptr1=fopen("1.txt","a");
fprintf(fptr1,"%s",ans);
fprintf(fptr1,"\n");
fclose(fptr1);
fptr2=fopen("end.txt","a");
fprintf(fptr2,"%s",ans);
fprintf(fptr2,"\n");
fclose(fptr2);
(2)运用逆波兰式计算
应注意小数的转换,具体代码见详细代码
5.运行截图
6.总结
在本次任务中我担任驾驶员的角色,在刚开始编写代码时,毫无思路,在不断摸索和讨论中终于决定了现在这个思路。由于时间紧促,代码还有很多不完善的地方,代码也有些冗余。在编程中有时会有新的想法,思路但在实践中并不是都能成功,所以应该在无路可走时要及时放弃,重新思考。在这次编程中我学会了合作,也加强了逻辑思维能力。太久没有编写读写文件的代码,对于各种格式已经遗忘的差不多了,只能通过上网查询,查看以前的程序来重新学习,不过最后还是有点瑕疵。逆波兰式在编译原理的课程上学习过,但并没有进行过编程实现,重新翻书了解理论,上网上查询相关文章程序,进行代码的整合,终于得到了现在的结果。
我的领航员彭辰麟在任务中给了我极大的帮助,两人在一起编写完成代码,增加了效率,也减少了错误,提供了新的思路。在以后的工作和学习中可以选择结对编程。