《兔宝宝学编程记》.docx
《《兔宝宝学编程记》.docx》由会员分享,可在线阅读,更多相关《《兔宝宝学编程记》.docx(38页珍藏版)》请在冰豆网上搜索。
《兔宝宝学编程记》
兔宝宝学编程记
三个月学会用C编小游戏
作者何勤
公元2013年3月27日,网名为兔宝宝的群友加入了何勤老师创建的QQ群:
C游戏编程学习研讨班。
兔宝宝是一个初学者,对编程完全不懂,但兔宝宝打算在比较短的时间内学会用C语言编写小游戏。
以下是兔宝宝与何勤老师的互动教学过程的完整记录。
从记录中你可以了解到,兔宝宝是如何从零开始只用了两个多月时间,就学会编写小游戏程序的。
2013年3月27日
内容:
1、什么是计算机、编译程序、源程序
2、C语言源程序的基本结构
兔宝宝:
新人报到!
各位大神好!
群主大人好。
何老师:
兔宝宝,早上好!
别叫我群主大人。
你叫我老师吧。
兔宝宝:
嗯,老师,听说您能用比较短的时间教会初学者编写小游戏程序,这是真的吗?
学会编写游戏,这可是我儿时的远大理想啊!
老师,您能够收下我做弟子吗?
何老师:
兔宝宝,你这个徒弟我收不收下完全取决于你自己。
关键要看你是否吃得了苦。
可以说智力正常的人三个月内就一定能够学会编写出贪吃蛇、俄罗斯方块等小游戏。
努力跟我学的话,甚至两个月就有可能编写出小游戏来。
但是又可以说任何人都决不能够在三个月内学会编写游戏程序的。
兔宝宝:
谢谢老师。
不过老师,您的话好像自相矛盾耶。
何老师:
关键要看你怎么学了。
在跟我认真学习的过程中,一定要每天坚持至少编写两个程序。
而且所编写的程序的难度一定要逐渐递增,题目类型要丰富。
通过认真阅读、输入、调试、运行我上课时给出的所有编程例题,认真消化、领会和吃透这些例题中的蕴含着的各方面知识(主要是编程思路、编程技巧和语法),就一定能够在三个月内编出小游戏来!
如果只爱看编程书而不愿做编程题、或者做的编程题数量不够多、编程题的类型不够丰富、或者所做编程题的难度没有逐渐增加都是不行的;这样都是不能真正学会编程的。
这就有些像学写作,如果只爱看语法书不愿看课本中的范文不行,只愿意学习课本中的范文不愿造句不行、只爱造句不爱由短到长大量写文章也不行。
兔宝宝:
老师讲的道理很简单明了,兔娃记住了。
但是,万一兔娃坚持不下来怎么办?
何老师:
兔娃娃,三个月的时间并不长啊,三个月就能让你实现儿时的理想,难道你都不能坚持吗?
!
如果偷懒不愿意每天编写两个程序,那就别跟我学,纯属浪费你我的时间。
兔宝宝:
好的,那兔娃一定按照老师的要求去做!
何老师:
我尽量给你选讲有趣一些的例题,尽量给你布置一些比较有趣的编程作业题。
但是有些内容比较枯燥和难懂也是在所难免的,尤其是在开始学习的前几天。
就是俗话所说的万事开头难。
如果见到一些枯燥或难懂的内容就马上逃避,一点苦都吃不了,那你也是不可能学会编写小游戏程序的!
兔宝宝:
为了实现本兔的理想,兔娃有不怕吃苦的决心,这个请老师绝对放心。
本兔的理想就是将来做一个程序猿。
不好意思,打错了,是做一个程序兔。
不吃苦中苦,难成兔上兔,这个道理本兔明白的。
何老师:
阿兔,你学过C语言吗?
兔宝宝:
呵呵,老师,我正好打算开始学C语言呢!
我是零基础的小白兔一个。
何老师:
零基础没关系,一张白纸更好画画。
我现给你介绍一位大师兄,名叫灰哥。
他就是跟我从零开始用了不到三个月就学会了编小游戏。
你有不懂的问题可以请教灰哥。
兔宝宝:
哇!
灰哥这么厉害?
!
灰哥在吗?
师妹拜见大师兄了。
灰哥:
嘛,兔宝宝,你是新来的?
兔宝宝:
大湿胸你好!
。
。
。
不好意思!
又打错字了,是大师兄你好!
大师兄,师妹我非常佩服你呀!
灰哥:
小师妹,谷的模您,我这点成就算个毛!
这一点师妹只要能够坚持下来,也完全能够做到的。
师妹,以后有问题随时可以问我。
(二)什么是编译程序和集成开发环境
何老师:
兔宝宝,那就开始今天的学习内容吧!
兔娃,你先在电脑上安装好DEV_C++5.0集成开发环境。
在这个环境中既可以让你编辑、编写C语言源程序,又可以运行编译程序帮你查找程序中的错误,还能够把你编写好的没有语法错误的源程序翻译成计算机能够直接运行的机器语言程序,最后,还可以让你直接运行这个翻译好了的机器语言程序。
灰哥:
也就是说,兔妹将来用C语言编写出来的程序称为源程序,这种源程序计算机的硬件是不能够运行的——因为程序只是一串你认识的字符而已。
计算机先要通过运行编译程序,将你编的C语言源程序翻译成机器语言程序,计算机才能够“懂得”并且执行它。
这个所谓的“懂得”就像汽车“懂得”你踩刹车、踩油门、左拐、右拐和换挡的行为是类似的。
计算机的硬件只能懂得指令,机器语言程序就是由一系列的二进制的指令(比如1011011011100111等)组成的。
这里的“机器”二字指的就是计算机。
兔宝宝:
噢,本兔知道了。
老师、灰哥,DEV_C++5.0编译程序在哪儿呢?
何老师:
在群共享中,你看到了吗?
(本书读者可以从网上下载,配套光盘中也有)
兔宝宝:
嗯,看到了。
……老师我现在已经下载安装好了,现在可以开始了吗?
(三)输入、编译和运行今天的程序
何老师:
好,今天的课程开始了。
我先把今天你要学的程序发上来:
/*1*/#include
/*2*/intmain(void)
/*3*/{
/*4*/printf("HelloWorld!
\n");
/*5*/getchar();
/*6*/return0;
/*7*/}
兔宝宝:
老师,这个程序是干嘛的?
何老师:
兔娃,现在别问干嘛,你先认真看看这个程序,然后把这个程序按照原样在DEV_C++5.0集成开发环境下编写出来。
如果不知道如何操作,请看附录中的DEV_C++5.0集成开发环境下编写调试C语言程序简介。
兔宝宝:
嘛,老师,别看不起本兔!
用DEV_C++5.0怎么输入程序我先自己看看说明,再摸索一下,想必还是很容易学会滴。
老师,您先忙别的,等兔娃弄好了再通知您!
。
。
。
。
。
。
(大约半小时之后)老师,兔娃已经把您发的程序输入进去了。
何老师:
兔娃还不错嘛!
现在,你在主菜单上选择“运行”——>“编译”(英文版是选择runcompile)。
对这个源程序进行编译。
兔宝宝:
老师,我按照您的要求做了,可是出问题了!
老师,我把屏幕截给您看:
何老师:
兔宝宝,你的程序第4行和我发给你的可是不一样的哦!
你用的双引号是中文输入法下输入的,而且printf被你错打成了print。
你改一下吧!
群友们注意了:
printf("HelloWorld\n");中,printf()这几个字母别打错了,都要用小写的。
后面的圆括号,双引号和最后结束时的分号都要在英文输入法下输入,不能在中文输入法来输入。
兔宝宝:
哦,原来如彼!
。
。
。
我改好了,老师。
。
。
又蹦出来了一个窗体,这是什么意思?
何老师:
恭喜阿兔!
你的第一个程序编译通过了。
你按以下方法操作就可以看到程序运行的结果:
你先点击关闭按钮,关闭这个CompileProgress(即编译进度)窗体,然后在主菜单上点选“运行”——>“运行”(英文版是点击runrun)。
兔宝宝:
哇!
老师,真的出来了!
verygood!
老师,我截屏给您看:
何老师:
阿兔,你别高兴太早了,你知道这个程序的意思吗?
兔宝宝:
真心不懂,老师您给我讲讲好吗?
(四)C程序的组成结构
何老师:
C语言源程序是由一个或多个函数构成的,其中通常都有一个main()函数。
本例中从程序的第2行开始到第7行为止,就是一个main()函数。
无论程序中有几个函数,程序都是从main()函数开始运行的。
兔宝宝:
哦,老师我记下了:
C语言源程序是由一个或多个函数构成的,其中有一个main()函数,程序都是从main()函数开始运行的。
何老师:
下面讲解函数的构成。
任何函数都是由函数头部和函数体构成。
本例程序中只有一个名为main()的函数。
第2行是函数头部,第3到第7行是函数体。
过几天兔娃会看到由两个函数构成的一个C语言程序。
兔宝宝:
函数还有头和体,这不有点像本兔了?
哦,函数没有脚,跟本兔还不太像,本兔要是没有脚那可就惨了。
何老师:
(函数头的构成:
)函数头部由函数的返回值类型函数名和用圆括号括住的参数表构成。
本例程序中的函数头部就是:
intmain(void)。
在本例中,main()后面的圆括号表明了main是一个函数名。
而int说明了main函数运行后的返回值是一个整数,void说明了这个main函数运行不需要参数。
兔娃还要注意:
函数名main这四个字母都只能用小写,决不能用大写。
兔宝宝:
(小声自言自语):
嘛?
本兔觉得好枯燥哦难懂!
好吧,为了实现理想,本兔一定要咬牙坚持住!
说不定听完后面讲的,就懂了老师现在所讲的呢。
(大声地):
老师,兔娃记住了。
灰哥:
函数体的构成:
函数体主要是由若干条语句构成的,每一条语句都要以分号作为结束符(复合语句除外)。
整个函数体必须用大括号{}括住。
语句主要又分为定义型语句和执行型语句这两大类。
兔宝宝:
师兄,这些语句到底是用来干嘛的?
灰哥:
定义型语句主要是用来向编译程序申请计算机中的一个或者若干个存储单元的,程序用这些申请到的存储单元来临时存放数据。
执行型语句主要是用来告诉计算机,如何对数据进行运算和处理。
(五)到底什么是计算机
兔宝宝:
大师兄,你的话我听起来感到好奇怪耶!
按照师兄的说法,好像用C语言编写出来程序只能够用来命令电脑加工数据了?
那我们学会用C语言编写程序难道会有什么多大的用处吗?
灰哥:
兔师妹,你知道什么是电脑吗?
电脑的正式名称就是计算机呀!
兔宝宝:
计算机不就是我们用来上网QQ聊天、玩游戏、看视频、听音乐,发邮件、偶尔用Word打字的那个电子设备吗?
难道它一直都是仅仅在做加工数据的工作吗?
兔娃真的不敢相信耶!
为什么要叫它为计算机呢,它多聪明啊,能做好多各种各样的事呢,所以我觉得还是叫它电脑更合适!
灰哥:
兔妹,你对计算机或者说电脑只是有一个很初级的感性认识,很不严谨深刻。
什么是计算机呢?
按照老师的说法,所谓计算机就是“通过运行程序,把数据加工成信息的二进制数字信号处理设备”。
这个定义关键指明了,计算机本质上只能够做一件有意义的事——把数据加工成信息。
计算机加工数据的手段就是通过运行程序。
兔师妹,你想要对计算机的基本工作原理有进一步的了解,就请看何老师写的《C语言程序设计问题与求解方法》这一本书的第零章和第一章,我个人觉得老师这两章的内容写得很好、很到位。
师妹,你有空可以看看这本书,群共享中有这本书的前半部。
兔宝宝:
问题好严重耶!
灰哥彻底打破了本兔对电脑的认识。
原来计算机本质上仅仅只能做“把数据加工成信息”这样一件事啊!
这个我还是头一次听说呢。
那到底什么是数据,什么又是信息呢?
何老师:
数据和信息这两个术语态基础了,两者都没有明确定义。
一般认为“数据”是对某个事物的真实记录(即对事物某个或某些方面的一种忠实抽象);而“信息”则是对数据进行某种处理(比如计算、排序、查找、分析、综合、解题、思考等)后得到的正确结果。
数据与信息之间的关系就有些类似于食物原料与加工好了的食物之间的关系。
计算机其实就很类似于一个厨房。
一个将没重量、没有体积、不会腐败变质的数据加工成为同样没重量、没有体积、不会腐败变质的信息的厨房。
数据和信息都是抽象的。
(六)计算机聪明吗?
兔宝宝:
老师,可以这么认为吗:
信息就是通过加工数据从中提取出来的更有用东西。
何老师:
是的,兔娃理解正确。
。
。
。
。
。
还有兔娃,别以为你所看到的几斤几两、几尺几寸、车速、成绩、气温等这些数值才是数据,这一大类数据称为数值数据;图像、声音、文字和视频等其实也是一大类数据,这一大类数据称为非数值数据。
这两大类数据目前都已经能够通过各种方式转变成二进制数据,输入到计算机内部,让计算机对它进行加工处理。
现代计算机由于性能的极大提高,已经能够轻松快速加工处理海量的非数值数据,这是人们感到计算机用处很广、聪明伶俐、无所不能的一个重要原因。
三十多年前的普通计算机大多用来加工处理数值数据