十条秘籍
1- 不要用万能头文件 (第一个错)
为什么不要用? 那我问问,初中高中数学考试,或者高考,为什么不让用计算器?
因为要考察的是计算。
这里是一样的:信奥考察的是对各个库的理解程度,以及之后衍生出来的灵活应用能力。
如果依赖万能头文件,是能少写一些程序,但最后,自己用了什么C++中的库,完全不知道。
这就任何体育项目(不管是脑力还是体力)中的训练,完全相悖。
2- 用C语言的格式
明明用的是C++,偏喜欢用C的格式,这就属于返祖。
这也说明,老师根本不会C++。
在这个例子中,这位同学还真不错,写得正经就是C++。
3- 同2, 是C的输入输出,略过
4- 用cin (第二个错)
cin是在console端读数据。
但为什么不要用cin?
简单,我给你一个长达100个字符的0和1的数列,来吧,手算吧。
行么?
别说100个了,就是10个字符,手动输入,也有误差的可能。
所以,当然不要用cin来手动输入。
肯定是读文件。
而且,真正参加初中联赛的复赛的时候,考试系统用的是cin判卷子吗?
当然不是cin,是文件读写。
所以再次的,当然不要用cin。
5- 这个和提高组的代码执行效率有关,就不介绍了,略过
6- 全部程序都在main里面,不到万不得已,一定不用函数(第三个错)
这是个三本出来的根本没有正经写过一行软件的小师傅的一个通病。
那就是把所有程序堆在main也就是程序入口里面。
能不能运行?
能运行。
容不容易错?
很容易错。
好不好纠错?
极难纠错。
我们游戏软件行业有个真实的笑话。
有个游戏开发团队,程序员跑路了。所以主策划就提刀上马开始自学程序。
但这个主策划是学中文毕业的,根本不是科班出身。
偏偏他又绝顶聪明,于是,他就把整个游戏都写在了main里面。
大概是二三十万行程序。
他也没觉得有啥问题。
游戏也确实能跑。
后来这个游戏上线之后,被好事者给反编译了,一看里面程序,当时就吓绿了!
反手就把程序截图发在论坛上了。
惊恐地说,“他们!竟然!全部!写在!MAIN里!!!!”
结果引来一大堆猎奇的玩家来围观。
到最后,销量确实出乎意料得不错。
其实,大家围观就是一件事儿:你是怎么把整个游戏写在程序入口的?
这就好像有人说要起个100层的高楼,然后用牙签搭了一个。
大家于是都来参观。
到今天,说起这个事儿,大家还是当成笑话说,而不是说这位游戏开发者如何力挽狂澜。
所以,不要把程序都写在main里面,丢人,
这是个基本要求。
7- 命名一定是abc(第四个错)
这应该是谭浩强老师傅的锅。
这位老先生我就不介绍了,基本上是在误人子弟上,走上了一条不归路。
在任何成熟或者半成熟的软件公司中,都绝对不允许a,b,c这样的命名。
为的,就是程序可读性。
程序可读性,是在危难时刻,能够拯救考场上的奥赛生的重要品质。
只可惜,三本小师傅们,听都没听说过这件事。
8- 变量一定不初始化 (第五个错)
在C++里面,全局变量不初始化还有个初值,局部变量不初始化,那,用的时候一定会是个随机值。
如果觉得不初始化,值也一定是0的话,那就大错特错了。
这种属于,高危险度的动作。
堪比过马路不看红绿灯。
对,就这种危险度。
9- 数据结构一定是静态数组不是动态数组 (第六个问题【不算是错】)
静态数组一般在初中联赛的范畴,完全是可以被更稳定,更不容易错,但稍微用起来有点麻烦的动态数组替代的。
但有些三本师傅,他们学的时候,就学的是遗臭万年的谭浩强老师傅的C语言设计,完全就没这根可以用STL库中的动态数组的弦儿,于是,很自然的,他们教出来的学生,也不知道有这么个东西可以用。
用动态数组不会出现插入数据的时候的数组越界啊,小朋友。
就初中联赛这么点儿运算量,动态数组比静态数组多浪费的这些腾挪数据的时间,完全就是可以忽略不计的。
真正需要用到静态数组,是DP,是哈希。
不是平时做的这种小破题。
所以,这虽然不算是个错,但是个潜在风险。
10- 能不加大括号,就不加(第七个错)
这个其实我是没想写,虽然我知道一定会有。
只不过当时写的时候,从1到9,凑9个,就没写。
不写大括号,这依然还是C语言的遗毒。