程序题做题一般步骤
(持续更新中(* ^ _ ^ *) )
一、读题
- 翻译题目意思
- 注意题目的细节(比如:输出格式,数据范围等等)
、
二、工整地在草稿纸上把题目给的样例模拟一遍,计算,写写画画等等(这步一定要做,不然会浪费很多时间)
三、写总体思路
- 模块思想(不同的功能用分为不同的模块,比如输出模块,输入模块)如果有使用函数,通常一个函数为实现一种功能。
- 大化小,对于一个大的问题,把它肢解为小问题,从小到大地推导
四、落实思路细节
具体到
- 初值怎么选
注意,任何局部变量在使用之前都要初始化,不管是输入给它一个数还是在中途通过赋值语句
- 变量怎么设
- 循环设几层
- 如何输出
- 变量类型
五、写代码
六、Debug
- Debug的基本步骤
- 找数据
- 静态、动态调试
- 重复以上直到正确
Q:为什么要Debug?
A:有数据过不了
而过不了的数据绝大多数是特殊数据。
现在很多情况下我们是没办法知道我们没通过的具体是什么数据,这就要求我们在Debug的时候自己去想特殊数据来测试我们自己的程序。基本上是越特殊越好。千万不要仅仅只用样例来Debug,通常而言,出题人会把样例设计得正确与不正确的程序都可以通过。这是血的教训 别问我怎么知道的
当我们有了这组bug数据之后,我们就可以对代码进行调试了。调试分两种:动态调试 和 静态调试
动态调试:现阶段我们能使用的功能只有查看程序运行中的变量的值。而且不同的编译器有不同的调试方式。
静态调试:在程序中使用printf语句将自己要查看的变量输出出来。具体格式及使用方法取决于程序员。
我个人推荐静态调试。理由如下
- 静态调试的稳定性高,兼容性好,任何IDE环境,只要能编译,就能静态调试。
- 动态调试对程序的查看并不如静态调试灵活,且现在阶段的程序规模不大,没必要使用动态调试。
在静态调试里面,我们甚至可以输出( •̀ ω •́ )✧)
来指示程序是否运行到某位置。
静态调试的大致顺序
- 检查赋值语句
- 检查输入
- 检查中间的计算
- 检查输出
最后王牌
- 如果你在尝试了静态调试之后还是没思路,那么我们还有最后王牌,那就是在草稿纸上手动运行。这个方法虽然笨,且耗时有点长,但是很有用。
- 有些错误我们是完全不知道,但我们可能一直以为它是对的。这种情况下,我们就要进行等值替换,对每个模块进行简单化的替换。把高级的等值变成最最最低级的,确保一定能够正确执行,然后再去看看哪里错了
其他注意事项
别用isalpha() (第四次作业的第3题用它就过不了,我也不知道为什么)