C语言剖解(03)

终于开讲C语言课程了,我前面说过,我会以谭浩强的《C程序设计》为教材,进行基础课的讲解,但我坚决反对跟着上面的风格走,这里我会强调让大家选择一本书:《高质量C/C++编程指南》。作者是 林锐,这个西安电子科技大学的研究生,浙江大学的博士生,对我的编程风格有很大的影响,我对他这本书当然也是极为推崇。

因此,有时候我会信口就问学生:

“知道林锐不?”

“不知道!”

听到这个回答,我相当失望,有种直接拉出林锐的照片让大家起立膜拜的冲动,但还是忍住了,膜拜在我的理解中,似乎是对逝者的尊重,因此我通常改为让大家膜拜一下C语言之父丹尼斯.李奇,这个大胡子的家伙,正是他的仙逝让我有了讲课的念头,并最后走上讲课的道路。我推崇林锐的另一个原因,是甚为欣赏他的写作风格,不至于让人看书的时候,枯燥到睡着觉,他能让你在不知不觉中,接受一些知识。谈笑间就能让人学懂一些知识,多么了不起呀。因此,我也会刻意的模仿,我希望我也有值得称道的地方,也希望自己写的东西,除了让大家一笑之外,多多少少,能留下些有用的东西,哪怕是一丁点。平凡人有伟人的思想,不见得就是疯子或者白痴。所以大家不要对我嗤之以鼻,更不要喷饭哦。

开始C的讲课,我一般不讲前两章内容,不讲第一章是因为他不包含什么太多的知识点,也是因为他所描述的一些东西,诸如Turbo C,有过时的感觉。因此,我不讲。第二章:算法我也不讲,算法这个概念太过笼统,笼统到你随便写一个语句,都可以称为算法,因此不讲。但不讲这一章,并不等于这一章没有什么知识点,我会让大家下去看流程图的画法,有时候,也会即兴用Visio 2003或者 visio 2007来绘制一个简单的流程图。强调一下,流程图用什么图形作为开始,什么图形作为结束,什么图形作为判断,什么图形作为描述等,如果读者您看了我的文章,并且是抱着学习语言的心态来虔诚领教的,那不好意思,就流程图这部分,麻烦你就拿谭浩强的书把第二章看一下吧。

就这样,我说到了第三章。我上课也拿书,但我基本不怎么翻书,不翻书不代表我对书不了解,而是每堂课开始讲之前,我都会把书翻上好几遍,查阅并想法在适当的位置插入我自己的思想和问题,因此,我自认为已经对这本书达到了熟练的程度。我会告诉学生

“如果你拿的是谭浩强《C程序设计》的第三版,请翻到第37页。”学生很快就翻到了。

我接着发问:“看到了什么?”

“第三章”。

“我呸,这我当然知道,大家又不是瞎子,需要用手摸!”

“呵呵……”

“看到了什么?”

这下大家不知道如何回答了,回应之声是跌宕起伏,三三两两,还有人学着我的样子,说我呸!

“神人呀,你都能看到 ‘我呸!’”

“呵呵……”

“我们应该看到有一个图,什么图呢?关于数据类型的图,有木有?”

“有!”学生空前情绪高涨了。

“有就念一下,有几种数据类型?”

 “四种:基本数据类型、构造类型、指针类型、空类型”

 “基本类型又包括什么?”

 “整型、字符型、浮点型、枚举类型”,

 “浮点型又包括什么?”

 “单精度型、双精度型!”

照书念是学生的强项,但多半情况下,他们并不思考。所以,我会问。

“整型是什么?”

学生被问蒙了,瞪大眼睛,似乎怀疑书上少印了什么东西一样。

“别瞪眼睛了,眼珠子都快出来了,后面没东西了。”

“呵呵……”,学生以为我故意开完玩笑,不再提问了,结果我依然会问

“整型是什么”,学生彻底懵了。

“唉,笨呀,这都不知道,整型是数据类型中的基本类型嘛!”

“哦,哈哈……”。大多数学生被我逗乐了。我接着问

“指针是什么?”

“数据类型!”

“哎~~,聪明,都记住了没?”

“记住了!”

看官莫笑,不是我故意在这里刁难学生,确实是有些公司就拿这玩意儿作为笔试中的简答题,我无奈的哀叹之余,也发现这不失为学习基础知识的好方法,因为中国毕竟尚未脱离应试教育,理论依然重要。

“记住了就好,那我再问一下,C语言中为什么会引入数据类型呢?什么是数据类型呢?”

当然是一片寂然了。因为这思维太跳跃了,除了我和听我讲过课的人外,估计再没人能很快回答出来了。我说过,讲课是一门艺术,我的目的就是把知识灌输给学生,所以,让学生跟着我的思路走,总不会错。

“是这样的”,我说道:“在人类的日常生活中,会遇到各种问题及其解决方案,并且发明了许多东西,来帮助人们方便的处理问题,诸如 数学。而计算机语言的目的是为了帮助人类更好的解决生活中遇到的问题。更方便的解决人类生产生活中出现的各种复杂事情。现实生活中有没有数据类型?”

“有!”

“对,现实生活中就有整型、实型等这些必须的数据类型,所以,我们C语言中也引入了这些数据类型,并将其归类,即基本数据类型;有些数据类型,现实生活中不直接存在,但计算机语言为了更透彻的展现生活中的各种问题,也发明了一些数据类型,比如指针、数组、枚举、结构等”。

“讲这些,就是想让你们知道,计算机语言是怎么来的。”

“可我们就想知道,计算机语言是怎么没的。”,一些比较活泼的学生显然发现我这个老师是相当的容易接近并很具有亲和力,会说一下玩笑话,引起整个课堂的哄堂大笑,这很好,无形中活跃了气氛。保证不会有人睡着。有这样的人,我一般会点名他来负责这个班级作业进度的监督,并让协助处理一些日常杂事,因为这些学生一般都很外向,说句难听的话,就是“外骚”型的。他们团结同学很有一套,一般威望也不低。作为老师,我当然乐意给他们更好的机会。无论是学习还是生活还是交际还是管理。或许他们都能学得一些东西吧。

在谈笑中,我敲定了班长,甚至包括组长的人选后,继续讲后面的内容,首先就是常量和变量,本篇我讲常量和符号常量

我不会照书去念,这太没意思,也太浪费口水,既然教编程,教编程语言,我当然要通过动手来提高大家的动脑能力。照书念的老师不是好老师。那是不负责任的老师,说不定还有些胆怯,怕超出自己范围之外,自己不会,亦或是怕被学生问倒,我一直认为,课堂不是我一个人的课堂,是需要和学生互动的,没有互动的课堂,就不叫课堂。活生生的例子就是,我在学校就没学好,嘿嘿,这话说出来有点无耻,其实一点都不卑鄙。

好,言归正传,我飞快的写下如下程序。

#include<stdio.h>

int main(void)

{

int  i = 9;

printf(“%d\n”,i);

}

我会用鼠标指着9问大家,提问是最好的互动:

“这是不是常量?”

“是。”

我于是又随机写几个值如下:

‘1’, ‘a’, 1.65e2,并继续问大家“这些是不是常量”。

“是”。学生并非什么都不知道,因此,几乎没人回答错误。

“那,常量能不能改变?”

“不能!”。我不能不说,我这里是故意埋了一个坑,我埋坑的目的只有一个,往下看。

“不能么?那你看我改了没?”我说着,把 i = 9,后面的 9改为了 99;

学生无语,他们不认为他们的回答是错误的,只是摸不着头脑的看着我,知道我有后话。

“我这不是改了么?常量能不能改变?”

大部分学生不在说话了,但不乏有一些比较认真优秀的学生,他们提前做了预习,这部分学生很认真,并且很快从我挖的坑里跳了出来。

“运行期间不能改变。”

对!大家记住了,常量是在运行期间不能改变。”我敢保证,这样的记忆绝对比你照书本念,然后不停地重复几次以作强调要好的多。

理解了这个概念之后,我还会继续问

“i = 9 代表什么意思?”

这绝对没人回答的出来,我也回答不出来。这确实不代表什么意思,如果你比较聪明,或者有一定基础,或者看的东西比较多,你说这叫对i进行定义并初始化。没错,可,初始化为9有什么意义,你知道么?

是的,没人来回答这个问题,或者顶多是后面我写的,但我又引出的新问题,你会彻底无法回答。

“那 i = 9代表什么意思呢?”我边说边又写下了如下代码。

#defineMAX_APPLE_NUMBER  9

然后把 i = 9改为 i = MAX_APPLE_NUMBER;我再问大家,现在 i = 9代表什么意思?这下有人知道了。

“代表最大苹果数量。”

“对,很多时候,我们为了使我们的定义和初始化让大家看的懂,我们会写成如上那样,这个东西叫什么?”我指着#define MAX_APPLE_NUMBER  9这句话问。

回答“宏定义!”的有之,回答“预处理”的有之,回答“符号常量的有之”。

“对,你们的回答都很正确,我们在这里把它称之为:符号常量。”

我想这下大家对符号常量有一定的认识了。我继续讲

“那么,用符号常量有什么好处呢?”

循着上面对符号常量的引出,大家很快概括出来了。

“语义清晰。”

“对,符号常量具有如下几个优点:1、语义清晰,一改全改。”边说我会边更改后面的值。并告诉大家,这东西的使用优点,当然看官可能知道,他也有一定得缺点,至于优点和缺点,我都不在这里多数,往后放置。

至此,我讲了常量和符号常量。

程序开发剖解圣经(006)相关推荐

  1. 【Windows 应用程序开发详解】三.Windows开发工具配置与使用(一)

    [Windows 应用程序开发详解]三.Windows开发工具配置与使用 一.Visual C/C++ 我们都知道在应用程序开发的时候都是要依赖于开发工具的,Windows主机应用程序绝大多数都是使用 ...

  2. 《嵌入式Linux应用程序开发详解》PDF完整版及源代码

     <嵌入式Linux应用程序开发详解>PDF完整版及源代码 免费下载地址在 http://linux.linuxidc.com 用户名与密码都是www.linuxidc.com 具体目 ...

  3. 【Windows 应用程序开发详解】四.Windows开发基本概念和相关术语(一)

    [Windows 应用程序开发详解]四.Windows开发基本概念和相关术语 一.Windows API 二.服务.函数和例程 一.Windows API Windows API介绍: Windows ...

  4. android另类工具,[置顶] android应用程序开发另解及Android SDK工具集的另类用法

    转载请注明出处: LouisWang http://blog.csdn.net/louiswangbing/article/details/6606865 相信对于广大Android应用开发爱好者来说 ...

  5. 一、微信小程序开发详解

    目录 1.什么是小程序? 2.小程序可以干什么? 3.相关资料 第一个小程序 一.申请帐号 二.测试号申请 三.安装开发工具 四.你的第一个小程序 五.编译预览 六.目录结构 七.JSON 配置 八. ...

  6. linux应用程序开发数据,《嵌入式linux应用程序开发详解》核心笔记

    [linux快速入门] 自由软件(free software)中的 free 并不是指免费,而是指自由.它赋予使用者四种自由. · 自由之一:有使用软件的自由. · 自由之二:有研究该软件如何运作的自 ...

  7. 嵌入式linux应用程序开发详解_【精品套餐】嵌入式linux应用驱动开发完全学习路线...

    学习本课程,你将收获 本课程由<朱老师物联网大讲堂>推出,朱有鹏老师精心录制,提供从零开始.全面系统的学习体系,目的是让大家真正彻底的掌握嵌入式Linux应用和驱动程序开发知识和技能,真正 ...

  8. 嵌入式linux下应用程序,嵌入式Linux应用程序开发详解(完整下载)

    yoogogojojo 于 2013-04-02 17:20:28发表: LZ是好人,我下了好几个资料,还都不要积分 wyy214 于 2013-04-02 08:48:01发表: 多谢分享. lov ...

  9. 嵌入式Linux应用程序开发详解教程含源代码例子

    之前学习搜集的一些linux学习资料,整理电脑时觉得不错就往网上扔 http://download.csdn.net/detail/zhufeng88/9708721

  10. Android BLE 蓝牙开发指南(三)外围设备端开发详解

    Android BLE开发指南(一)入门基础 Android BLE开发指南(二)中心设备端程序开发详解 这篇文章将会详细讲解低功耗蓝牙外围设备端程序开发的主要流程.对于Android开发者而言,或许 ...

最新文章

  1. TCP的三次握手和四次分手
  2. 解决启动Oracle9i的OEM或OMS的常见问题(VTK-1000)
  3. PHP 从数组对象中取出数组提示:Undefined property: stdClass::$subject
  4. xp和win 2003远程桌面强制进入命令_远程登录t人命令
  5. iPhone X 穿越回 1957 年计算力相当的电脑,将会是什么样?
  6. 共享内存及其用mmap实现共享内存
  7. CSDN终端数据更新不同步?
  8. 在线教育开源 java_新款SpringBoot在线教育平台开源了
  9. 推荐几个不错的苹果电脑截图工具
  10. 飞桨2.0 PaddleDetection:瓶装酒瑕疵检测迁移学习教程
  11. 精美教师说课试讲教学通用PPT模板
  12. 电影《道士下山》主创亮相 董琦:转身遇贵人
  13. 2018-04-24-c-gluttonous-snake 财务同比环比、SSH和SSM
  14. 【Redis系列】缓存击穿、穿透、雪崩解决方案详解
  15. hp服务器pe系统安装win7系统安装系统教程,惠普战66Pro G1笔记本U盘重装win7系统教程...
  16. Linux中的pushd和popd
  17. 数据结构(五)图---最小生成树(普里姆算法)
  18. VBScript常用函数
  19. python可不可以用中文编写_震惊!!!python可以用中文来写代码
  20. js/jq 倒计时插件(一)

热门文章

  1. Objective-C 函数(方法)的定义和调用
  2. pbrt源码中用全主元消去法求矩阵逆的实现
  3. java大佬用什么编辑器_大佬们都在用的几款简单易用的文本编辑器
  4. 蓝牙厂商代码与公司对应列表
  5. C语言小知识——uthash使用
  6. 机械工程专业英语词汇
  7. JS下载地图离线数据,前端下载谷歌离线地图
  8. c#位图转换未矢量图_c# 图形图像 | 学步园
  9. 中国地质大学网络计算机考试试题,中国地质大学《计算机》考试题答案
  10. python双人贪吃蛇游戏