啊哈C!思考快你一步——用编程轻松提升逻辑力

啊哈C!思考快你一步——用编程轻松提升逻辑力(双色)(每个人都应该学习如何编程,因为它教会你如何思考。——史蒂夫.乔布斯

啊哈磊

ISBN 978-7-121-21336-6

20139月出版

定价:39.00

200

20
啊哈C!思考快你一步——用编程轻松提升逻辑力

编辑推荐

为什么要让孩子们学习数学和编程?都是为了锻炼他们的逻辑力,有了逻辑力,走遍天下都不怕!

内容提要


是一本非常有趣的编程启蒙书,全书从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。并配合超萌的编程软件,从开始
学习与计算机对话到自己独立制作一个游戏,由浅入深地讲述编程的思维。同时,与计算机展开的逻辑较量一定会让你觉得很有意思。你可以在茶余饭后阅读本书,
甚至蹲在马桶上时也可以看得津津有味。编程将会改变我们的思维,教会我们如何思考,让我们的思维插上计算机的翅膀,以一种全新的方式来看世界。现在就让我
们一起走进计算机编程的神奇世界,探索和发现计算机编程的魔力吧。

目录

第1章  编程改变思维          1

第1节  为什么要学习编程          1

第2节  本书是讲什么的、写给谁看的     4

第2章  梦想起航          7

第1节  编程的魔力     7

第2节  让计算机开口说话          9

第3节  多彩一点          18

第4节  让计算机做加法     21

第5节  数字的家——变量          25

第6节  数据输出——我说咋地就咋地     30

第7节  数据输入——我说算啥就算啥     33

第8节  究竟有多少种小房子     36

第9节  拨开云雾见月明     39

第10节  逻辑挑战1:交换小房子中的数         41

第11节  天啊!这怎么能看懂   44

第3章  较量才刚刚开始     48

第1节  大于、小于还是等于     48

第2节  判断正数          49

第3节  偶数判断          52

第4节  神器else53

第5节  请告诉我谁大          55

第6节  逻辑挑战2:3个数怎么办   58

第7节  逻辑挑战3:我要排序  62

第8节  运算符总结     66

第9节  1>2究竟对不对    67

第10节  讨厌的嵌套   69

第11节  if-else语法总结    72

第4章  重量级选手登场     74

第1节  永不停止的哭声     74

第2节  我说几遍就几遍     78

第3节  if对while说:我对你很重要        82

第4节  求和!求和!!求和!!!       85

第5节  逻辑挑战4:60秒倒计时开始     89

第6节  这个有点晕——循环嵌套来了     93

第7节  逻辑挑战5:奔跑的字母      97

第8节  究竟循环了多少次          101

第9节  逻辑挑战6:奔跑的小人      103

第10节  for隆重登场107

第5章  好戏在后面     111

第1节  程序的3种结构     111

第2节  啰嗦一下          112

第3节  逻辑挑战7:判读质数很简单      113

第4节  更快一点:break    117

第5节  continue   119

第6节  逻辑挑战8:验证哥德巴赫猜想  120

第7节  逻辑挑战9:水仙花数  123

第8节  逻辑挑战10:解决奥数难题         127

第9节  逻辑挑战11:猜数游戏         130

第10节  逻辑挑战12:你好坏,关机啦  134

第6章  天啊!一大串数正在接近     136

第1节  逆序输出          136

第2节  申请100个小房子怎么办     137

第3节  100个数的逆序      139

第4节  逻辑挑战13:陶陶摘苹果    140

第5节  逻辑挑战14:一个萝卜一个坑    143

第6节  逻辑挑战15:选择排序         148

第7节  二维数组          151

第8节  剩下的一些东西     153

第7章  有了它你能做更多的事          157

第1节  字符的妙用     157

第2节  多余的回车键          159

第3节  字符的本质     162

第4节  人名怎么存储呢     163

第5节  逻辑挑战16:字母的排序    167

第6节  逻辑挑战17:字典序    169

第7节  多行字符          170

第8节  存储一个迷宫          173

第8章  游戏时间到了          176

第1节  走迷宫     176

第2节  推箱子     186

附录A  标识符命名规则      188

附录B  运算符的优先级和结合性      190

精彩节摘

1  编程的魔力

从一个神奇的数字说起——2 147 483 647。

2 147 483 647是一个质数(也称为素数,即只能被1和其本身整除的数)。发现这个质数的人是伟大的欧拉同学。1722年,他在双目失明的情况下,以惊人的毅力靠心算证明了2 147 483 647是一个质数,堪称当时已知的世界上最大的质数,他也因此获得了“数学英雄”的美名。现在你通过计算机只需要1秒就可以证明2 147 483 647是一个质数。

再来看一个经典的问题——八皇后问题。

如何能够在8?8的国际象棋棋盘上放置8个“皇后”,使得任何一个“皇后”都无法直接吃掉其他“皇后”?为了达到这个目的,任意两个“皇后”都不能处于同一条横行、纵行或斜线上。下面就是一种解决方案。没错,你可以自己拿出笔和纸画一画,看看还有没有其他方案。但是,如果我想知道所有的方案该怎么办?

又轮到计算机出马了,一共有92种不同的解决方案,很棒吧!计算机只需要1秒,就可以算出所有的解。

再来看一个很流行的益智游戏——数独。

在一个9?9格的大九宫格中有9个3?3的小九宫格,默认在其中填写了一些数字,现在请在其他空格上填入数字1~9。每个数字在每个小九宫格内只能出现一次,每个数字在每行每列也只能出现一次。

我想,你一定很快就找到了一种可行解,可是你知道上面这个数独一共有多少种不同解吗?99 410种不同解!很难想象吧,计算机仍然只需1秒!怎么样,计算机编程是不是很神奇,你甚至可以轻而易举地在一定范围内去验证“哥德巴赫猜想”。

在接下来的内容里你将学会如何与计算机对话,如何让计算机进行数学计算和判断,如何让计算机永不停止地工作,以及做一些很有意思的程序和游戏。一场有趣的逻辑思维大战即将开始,不要走开,赶快进入第2节——让计算机开口说话!

2  让计算机开口说话


什么会有计算机的出现呢?我们伟大的人类,发明的每一样东西都是为了帮助我们改善生活。计算机同样是用来帮助我们的工具。想一想,假如你现在希望让计算机
帮助你做一件事情,你首先需要做什么?是不是要先与计算机进行沟通?那么沟通就需要依赖于一门语言。人与人的沟通,可以用肢体语言、汉语、英语、法语和德
语等。你若要与计算机沟通,就需要使用计算机能够听懂的语言。我们学习的“C 语言”便是计算机语言的一种,计算机语言除了C语言外,还有C++、Java、C#等。C 语言是一门比较简单的计算机语言,更加适合初学者。所有的计算机语言都是相通的,如果你能够熟练掌握C语言,那么再学习其他语言就会变得易如反掌。

既然计算机是人类制造出来的帮助人类的工具,显然让计算机开口说话,让计算机把“它”所知道的东西告诉我们是非常重要的。

下面我们就来解决第一个问题:如何让计算机开口说话?

回想当年,我们刚刚来到这个世界的时候,说的第一句话是什么?应该不会是“你好!”、“吃了没?”……这样会把你的爸爸妈妈吓坏的!

伴随着“wa wa wa”
的一阵哭声,我们来到了这个精彩的世界。现在我们也让计算机来“哭一次”。这个地方特别说一下,计算机要把“它”想说的告诉我们,有两种方法,一种是显示
在显示器屏幕上,另一种是通过喇叭发出声音。就如同我们,一种是写在纸上,另一种是用嘴巴说出来。目前我们让计算机用音箱输出声音还比较麻烦,因此我们采
用另外一种方法,即用屏幕输出“wa wa wa”。

printf("wa wa wa");

这里有一个生疏单词叫作printf,你不要被它吓坏了,目前你不用搞清楚它的本质意义是什么,只要记住它和中文里面的“说”,以及英文里面的“say”是一个意思,就是控制计算机说话的一个单词而已。在printf后面紧跟的( ),是不是很像一个嘴巴,把要说的内容“放在”这个“嘴巴”里。这里还有一处需要注意,在"wa wa wa"的两边还有"",里面就是计算机需要“说”的内容,这一点是不是很像我们的汉语?最后,一句话结束时要有一个结束的符号。汉语中用句号表示一句话的结束;英语中用点号表示一句话的结束;计算机语言中用分号表示一个语句的结束。

注:计算机的每一句话,就是一个语句。

好了,现在如果让你写一个语句,让计算机说“ni hao”,该怎么办?

printf("ni hao");

我们现在让计算机来运行这个语句,这里需要说明一下,仅仅输入printf("ni hao");,我们的计算机是识别不了的,需要加一个框架。完整的程序如下:

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("ni
hao");

return 0;

}

这里的

#include <stdio.h>

#include <stdlib.h>

int main()

{

return 0;

}

是所有C语言都必须要有的框架,现在你暂时不需要理解它,知道要有这个即可,以后再来详细地讲它的用途。但是有一点,我们今后写的所有类似printf的语句都要写在{ }里才有效。

接下来我们需要让计算机运行我们刚才写的程序。

作者简介

啊哈磊,原名纪磊,毕业于武汉大学。曾在中科院玩单片机,在微软亚洲研究院开发“爬虫”,在国际会议上发表论文,也做过老师,是全国青少年信息学奥林匹克金牌教练。非常喜欢小朋友,每天都过得很开心。为什么叫“啊哈磊”呢?因为这是一个很喜庆的名字。新浪微博:@啊哈磊  人人网公共主页:renren.com/601196462

媒体评论

@百度移动云首席布道师张辉:学习编程能为自己打开一扇全新的窗户。本书可能是最通俗易懂、生动好玩的C语言教程,它不只是让你成为编程大师,更是帮你理解身边的种种奇妙。

@chd9527:想学C,发现其他入门书的门槛挺高,看不懂。偶尔发现这本小学生都能读懂的C语言书籍,学习了一下,觉得写得很好,和“入门”一词真的很贴切。

@阳光雨:不但教大家怎样去做,关键是告诉大家原理!语言幽默生动,有很亲切的感觉。比奥数有趣有意思,可以提升孩子的逻辑思考力。

@家长100鱼小肥:通俗易懂,可以作为孩子的编程启蒙读物,是很好的科普书,能把复杂的知识用简单的方式表达出来,孩子看了很感兴趣。如果编程书都能写得如此风趣,自学将变得很轻松。

@tingting:这本书从小朋友的角度和立场读起来一点都不费劲。跟同类的书籍比起来,更加通俗易懂,生动有趣。

@mijianxing:我一直想通过学编程更好地了解这个世界,对照这本书,自己编一些小程序,亲自设计的感觉很奇妙。

@jocal:推荐的啊哈C编程工具也挺好用的,简洁明了!小朋友看着书,自己跟着一步步操作,很有成就感!

前言


常被问到一个问题:当初你为什么会去学编程?因为我很喜欢玩游戏。每一个喜欢玩游戏的人,都梦想着可以通过修改游戏的程序使游戏中的自己变得非常强大,而
这需要学习编程。其实每一个人都曾有过创造游戏的梦想,那我们为什么不把这种梦想变成学习的动力呢?我就是这样踏上编程之路的。

牛人肯? 汤普逊(Kenneth Lane Thompson)自己编写了一个叫作“星际旅行(Star Travel)”的游戏。而汤普逊为了能更顺畅地玩这个游戏,竟然自己动手用汇编写了UNIX操作系统。后来他觉得用汇编写UNIX操作系统非常麻烦、非常辛苦,于是和另一个牛人丹尼斯?里奇一起创造了C语言。没想到吧,C语言竟然是一个牛人为玩自己写的游戏而创造的。其实这在计算机界很正常,程序员们往往就是因为某个游戏或者软件的现有功能不能满足自己的需求,才开发出了更加优秀的游戏和软件。本书中超萌、超简洁的“啊哈C”编程软件也是这样来的。

经常被问到第二个问题:为什么普通人需要关心编程呢?因为当下程序员几乎主宰了整个世界,控制着你我生活的方方面面。我们住的房子、穿的衣服、吃的东西、用的各种电子产品,以及我们去ATM取
钱、坐电梯、开汽车、坐飞机、坐火车……你坐火车时有没有想过,一条铁轨上同时运行的那么多列火车是如何调度的才没有导致它们相撞呢。这个时代很难想象还
有什么不是通过计算机程序控制的。如果想理解这个时代,就必须得理解计算机编程,编程会让我们以一种全新的方式来看世界。当然,在学习编程的过程中还可以
提高我们的逻辑推理能力、批判性思维和动手解决问题的能力。与计算机展开的逻辑较量一定会让你觉得很有意思。

还经常被问到第三个问题:什么样的人可以自学编程,学习编程需要什么基础?答案是你只需小学四年级以上,并且可以熟练运用鼠标和键盘就可以。你若不信,那就从这本书开始吧。

编程很容易让我们实现梦想。如果我们觉得某个游戏玩得不爽,或者某个软件不够好用,想自己做一个。没问题,现在就可以!而唯一的投入就是一台计算机。实现梦想从未变得如此简单过。编程世界里每天都上演着传奇,一大批热爱编程并且满怀梦想的人正在充满激情地奋斗着。

编程将会改变我们的思维,教给我们如何思考,会编程的人总想改变点什么。正如乔布斯所说“I think everybody in this country should learn how to program a
computer, should learn a computer language, because it teaches you how to
think.”

致    谢

首先感谢我的父母,不仅仅因为他们辛辛苦苦地把我拉扯大,更因为他们睿智的选择。我读高一那年,家里经济并不富裕,他们却满足了我当时相对奢侈的要求:为我买了我人生中的第一台电脑(赛扬667)。虽然我从小都在当地还不错的学校读书,但是学习成绩很一般,貌似我的父母并不是很担心这个,我猜只要名次不是倒数就可以吧。很疑惑我的父母为什么如此果断地为我买了当时价值不菲的这台电脑,很感谢他们满足了我当年的超级梦想。


谢江苏省清江中学的周法龙老师,他是我的编程启蒙老师。还感谢崔绪春老师,他是我的高三班主任。在学习压力异常紧张的高三,我爱上了编程,他们不但没有劝
阻我,反而鼓励我去学习编程。最后,我在一项编程竞赛(全国青少年信息学奥林匹克联赛)中获得了全国一等奖,被保送到武汉大学。感谢两位老师对我的梦想的
支持……


学的日子过得飞快。很幸运能在这匆匆时光下结识了许多男女朋友。胡倩、丁广浩、徐锦鸿、刘晓晖、徐肖南、列夫(这是一个真名)……怀念我们一起在银海的日
子,一起学习,一起做项目,一起赚钱付房租,一起吃宵夜,一起奋斗……期待我们的重逢。特别感谢丁广浩在我创业时对我的信任,以及不计回报的付出,我非常
感动。

感谢微软亚洲研究院的唐珂和纪蕾(是不是很有缘分),感谢你们各方面的指导。在MSRA工作、学习的这段日子让我印象最深刻的就是:我们的每个想法,以及每行代码都很有可能最终被用到真正的产品中,这是多么激动人心的事情啊。同时也感谢当时面试我的前辈们,感谢你们给了我锻炼自己的机会。


俞的一句话:在绝望中寻找希望,人生终将辉煌。虽然土,但真正创过业的人必能感受到这句话无穷的力量。亚亚是我第一个创业伙伴,感谢你陪我走过创业初期的
风风雨雨。袁毅成、鄢丙荣、周老师、林老师……也感谢你们的陪伴与支持。还有华中科技大学的蒋老师,感谢你对我的信任。还有可爱的学生们和家长们,我们永
远都是好朋友。

感谢博文视点的侠少和符隆美。感谢侠少主动联系我,陪我走过了整本书的创作过程,并给予了很多宝贵意见。感谢我的美女插画师苏谜,你灵感涌现的插图为本书增色。感谢ahalei.com网站上所有的网友们rosynirvana、Smallbee、C习生……因为有你们的鼓励,才有了我写下去的动力。感谢所有支持我并且帮助我的人。

啊哈磊

2013年5月28日 武昌

上一篇:[Mac A]如何学习Mac编程?


下一篇:C/C++ 内联函数