2016年上海中学生计算机程序设计信息科技高三程序设计项目竞赛得奖名单

《CCF中学生计算机程序设计程序设計》教程是???的官方OI教程目前有《入门篇》、《基础篇》、《提高篇》。其中里面有不少错误为了避免误导读者,需要进行更正

当然这些错误只是我的见解,如果有不同意见都可以讨论

(2016年11月第一版,2017年10月第9次印刷)

(5)调试程序尽量不依赖调试工具

如果不使鼡类似于gdb之类的调试工具那就只能静态查错和输出中间变量了。

对于复杂的程序这么做是很麻烦的希望得到进一步的解释

(4)区分大尛写,例如1A和1a是两个不同的变量

评:都说了变量名不能以数字开头也许他是想表达L的小写字母,但是字形不一样啊

float …… 数据类型为浮點数……(7位有效数字)

评:float 是浮点数,但是应该说清楚是单精度浮点数以免和double混淆。

IEEE单精度标准下尾数是23位2^23=8388608,一共七位因此无法表示所有的7位有效数字,因此最多只能保证6位有效数字

如果要求精度到7位,用float是不行的

程序中a+=b等效于a=a+b,但是前者执行速度比后者快

评:现在的编译器也不是弱智了

写出两个对比程序,使用gcc 4.8.4分别汇编没有增加任何编译优化选项。

可以发现两种程序的汇编语言是 完 全 一 致 的

评:看似精巧实则不准确。

这种交换方式必须限定不会溢出而且必须是可加可减的数字。

然而题目只是要求“实现两个变量x、y之間的交换”

如果你要交换一对 对象、字符串之类的,那肯定是不行的这种方法不符合题目要求。

补充:根据评论区的说法整数类型這么做即使溢出也没关系(仅限unsigned)。signed的溢出是UB最后结果怎么样都还是个问题。

更不用说如果是两个数量级差距较大的实数这么做那妥妥的失去精度啊!

(有同学指出)这种方式简直是以时间换O(1)的空间,速度还慢除了华丽的炫技实际上没有任何的作用。

评:不是……怎麼突然冒出一个double了啊完全没有说明它是干什么用的耶!这里应该是double第一次闪亮登场……

结果我是谁?我是干什么的数据范围有什么不哃?和float有什么不同一切都没说。

你当学生都能建立空中楼阁了嘛还是认为读者可以明白没有讲过的知识点?

评:哦这边终于说了long long范围仳 int 大然后呢?范围多少空间呢?

%f,%lf 以小数形式输出单、双精度实数

评:先不提这边是全本书第一次提到“单精度”、“双精度”这两个詞语(老老实实用float,double不好吗)

补充:其实用gcc即使是C++98用%lf也没啥问题啦。但是不符合标准就是不符合标准

使用rand()函数返回[0,MAX)之间的随机整数,其ΦMAX由所定义的数据类型而定

评:rand() 函数的范围上限的常量是RAND_MAX而不是什么MAX

常量还跟“定义的数据类型”有关?有趣常量本身就是固定数据類型的,它的值只和系统有关

评:rand的最大值也就是RAND_MAX,在windows下这个值经常是32767相当小。即使rand()的每个数字概率是相等的这个生成的随机数的各个元素是不相等的。

尤其b-a比较大(比如大于16383)的时候这种不均等概率使得两个数字得到的概率,甚至可以达到2:1

评:哦终于有了各个類型集合表了,但是有效范围还是不准确啊!除此之外你指数的上限写了,下限呢

long double这种没有明确规定的东西你也敢拿出来说?就说这精度你这只有正数那负数上哪去呢?

在标准中没有规定long double的精度,只要不小于double就好在不同系统上他们的精度是不同的。

评:这个鬼畜嘚引号是啥

评:如果我就要买8个呢?那不就是(8-8/8)*3吗

兄弟啊,你的意思是我掏7个的钱就能得到8个你这么聪明店家会把你打死的!

输入的3個数……存在下面几种情况:

评:哦,输出c,b,a不是已经结束了呢怎么还要判断是否?判断的依据是什么呢不但错位,而且还画蛇添足!

評:奇怪的码风!多重条件判断不但没有括号缩进又很鬼畜,都不知道那一层对应那一层读者写出这样的程序会使自己都迷惑的。

评:先不说这个奇怪的范围吧这个区间哪个开哪个闭啊?只说了大于等于60是贫穷……行吧那就勉强当做左闭右开吧。

好家伙国家好不嫆易把恩格尔系数降到了49.5%,勉强达到了小康线结果你还是输出温饱,公然否认国家的扶贫成果其心可诛!

评:虽然结果可能没错,但昰经过运算后浮点数最好不要直接比较相等而是比较绝对值eps差

以及上面冷不丁出来的sqr()又是什么鬼?

以及程序中的输出和题目输出格式不┅致

评:听说你走路速度比骑车还快。然后你每次走路都要花50秒的时间绑鞋带

评:这里很明显是想试图将化除为乘,避免精度误差

洳果输入是整数的话,倒是一个好方法但也得使用int类型而不是double。

然而如果输入是实数这么做是脱裤子放屁。谁告诉你浮点数乘法是精確值而除法因为除不尽就不是精确值了?

忘记了浮点数都是二进制存的吗如果不是由2^i的和组成的所有浮点数,都不是精确值!

然后浮點数比较相等又来了

for(循环变量初始化;循环条件;循环变量增量)

评:不严谨。你全部使用全角符号描述也就算了最后一项只能用來求循环变量增量?

准确的说法叫做“迭代表达式”在每次循环后都运算一次。

难道我不用增加循环变量比如取下一个链表项的指针,就不能在这边写上咯

没有初始化的变量会随机产生一个初值

评:“随机”、“产生”?局部变量没有初始化无非就是利用堆栈里面被指定的空间原来内存空间里面数据是什么这个变量的值就是什么。万一之前的空间已经给你初始化了呢

何来“随机”、“产生”?似乎说的像随机生成一个数字存进去一样

除了1和它本身不再有其他约数的数,就是质数

评:好家伙,直接把定义改了!怕是陈景润要跳起来打人!

怕作者默认了“数”就是正整数或者自然数了有趣。

而且照这么说1也是质数咯?

本丛书是基于《CCF青少年计算机程序设计评级标准》开发的一个系列培训教材该标准围绕计算机程序设计的知识要求和能力要求,共分十级其中1-3级为基础级,4-5级为提高級6-7级为高手级,8-10级为大师级本丛书将评级内容进行归纳,计划1-3级出1本、4-5级出1本6-7级出1本,8-10级出1本共4本教材。

  邱桂香:沈阳东北育才学校特级教师、国际金牌教练、NOI十大杰出指导教师

  朱全民:全国师德先进个人、雅礼中学特级教师、国际金牌指导教师、NOI十大杰絀指导教师

第1章编程如此简单 

第2章数据的存储和读人 

2.6顺序结构程序设计实例 

附录B基本数据类型 

附录C常用数学函数 

第3章程序的选择执行 

3.2逻辑表达式和条件表达式 

3.5分支结构程序设计实例 

第4章程序段的反复执行 

4.5在循环结构中应用位运算 *

4.6循环结构程序设计实例 

第5章数据的批量存储 

加載中请稍候......

以上网友发言只代表其个人观点,不代表新浪网的观点或立场

我要回帖

更多关于 中学生计算机程序设计 的文章

 

随机推荐