(1)GitHub链接:https://github.com/Victorbatman/jieduixiangmu/
(2)PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
Planning | 计划 | 1.5 | 2 |
Estimate | 估计这个任务需要多少时间 | 2 | 3 |
Development | 开发 | 5.5 | 5 |
Analysis | 需求分析(包括学习新技术) | 12 | 16 |
Design Spec | 生成设计文档 | 3.5 | 2 |
Design Review | 设计复审(和同事审核设计文档) | 1 | 1.5 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 2 | 1 |
Design | 具体设计 | 2 | 3 |
Coding | 具体编码 | 14 | 17 |
Code Review | 代码复审 | 2 | 1 |
Test | 测试(自我测试,修改代码,提交修改 | 11 | 8 |
Reporting | 报告 | 2 | 4 |
Test Report | 测试报告 | 3 | 2 |
Size Measurement | 计算工作量 | 4 | 3 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 2 | 4 |
| 合计 | 67.5 | 72.5 |
(3)解题思路及资料查找:
刚开始看到四则运算这个题目时,感觉很简单,但是后面的要求特别多,感觉一时不知从何处下笔的,先说一说生成吧,四则运算的生成,我主要借助了随机数来进行生成四则运算,那么问题来了,要生成出一个表达式,我们需要有操作数和操作符,生成的算式的长度是根据操作数的多少还是操作符的数量,考虑到加减乘除都是二元运算符,所以我是根据随机生成的运算符的个数来决定操作数的个数,也就是说,利用操作符的二元性进行匹配操作数,我的操作数也是随机产生的,于随机产生的操作符匹配上随机产生的操作数就构成了我的算式。
对于一个已经输入的算式,我需要将它计算出,而输入的是一个字符串,经过查资料,我了解到,我们输入的是中缀表达式,如果是要进行计算,我们需要将中缀表达式转换为后缀表达式,了解到可以利用栈的操作进行转换,转换为后缀表达式之后,我们可以进行计算,利用一个数组,每生成的一个表达式立即转换为后缀表达式,再计算出结果,存入定义好的的数组中,在数组中我们存入的是对应算式的结果,然后定义一个变量,当用户输入时,监控用户输入的哪一个算式,然后将数组中于该算式对应的值和变量的值判断相等即可。
(4)在设计过程中,难度较大的地方在于,如何将一个字符串转换为我们的算数表达式,这里要根据后缀表达式来进行,而不能简单的利用字符串进行处理。在判断结构设计时,一开始自己并不知道如何要去设计判断,最后经过和别的同学讨论才发现,可以直接利用数组存入结果,再利用一个变量来监控用户的输入,与定义好的数组进行匹配判断即可。
(5)我的生成代码:
//随机数式生成
void create()
{
char shift[4]={'+','-','*','/'};
int s1,s2;
int op[11],temp;
char string[100];
for(int i=1;i<=1000;i++)
{
s1=rand()%4+1;//操作符个数
for(int j=1;j<=s1;j++) //生成操作符
{
op[j]=rand()%4;
temp=rand()%100+1;
printf("%d",temp);
printf("%c",shift[op[j]]);
}
temp=rand()%100+1;
printf("%d",temp);
printf("\n");
}
}
void create()
{
char shift[4]={'+','-','*','/'};
int s1,s2;
int op[11],temp;
char string[100];
for(int i=1;i<=1000;i++)
{
s1=rand()%4+1;//操作符个数
for(int j=1;j<=s1;j++) //生成操作符
{
op[j]=rand()%4;
temp=rand()%100+1;
printf("%d",temp);
printf("%c",shift[op[j]]);
}
temp=rand()%100+1;
printf("%d",temp);
printf("\n");
}
}
组队队友:李*