优点:
1.命名规范:
变量严格按照“代码命名规范文档”命名,易懂,且变量注释写的比较详细;
代码截图:
2.处理问题细致:
(1)题目前面的标号进行了细节化:
运行结果:
(2)高中问题中考虑了tan90不存在的情况,并避免了这种情况;
(如果出现这种情况,退回到上一次的for循环,重写题目,这个是自己没有考虑到的)
代码截图:
3.增加了需求
需求文档中并没有明确表示根据账户生成相应的文件夹,但是这里实现了,能避免不必要的空间浪费;结合实际情况,在只有一个用户使用这个程序的情况下,用户不需要去找自己账号所对应的文件夹,提高了用户体验;
我自己因为懒,虽然考虑到了,但是没有去查,没有实现。
代码截图:
4.代码量浓缩,没有功能重复性的代码,总程序只有300多行,不像我,搞了600多行,依然有很多重复性的内容。。。
缺点:
1.代码浓缩的坏处:
很多功能堆在一个函数里,不利于解读和维护,函数SetProblem()内代码较多,占所有程序的一半还多,实现过程注释不够,逻辑架构分不开,导致阅读起来有些困难;
2.bug:
(1)需求中操作数的个数和范围与需求不符;小学题目中出现了只有一个操作数的情况,而且操作数出现了0和0.5;
如图:
操作数的取值范围1~100可以通过一个do...while循环实现;
在阅读了代码之后,发现出现0.5是因为开方的时候把'^'当成符号处理,而0.5当成数字处理,而在for循环中用了同一个变量表示操作数和指数(包括2和0.5)导致操作数里也包含了0.5;
(2)初中和高中的题目中需求没有完全实现,有的题目中不包含平方或开方(三角函数)中的一个,只有一个操作数;
3.程序中使用的goto语句较多,虽然是在比较简单的模块,但是结构化程序设计中不建议使用goto语句,容易造成程序流程的混乱,使理解和调试程序产生混乱。
总结:
通过分析别人的代码,能对照自己代码的不足,找出他人代码bug的同时也能反思自己代码的不足之处,是很好的学习方法;在做个人项目过程中,有些模块,其实自己没有思路,实在想不出来会去网上查别人相似的代码,然后再写,但是,感觉这位大佬的代码似乎纯个人思路啊,而且还增加了一部分需求,佩服,感觉如果时间再多一些能实现的更好。