程序开发剖解圣经(010)

C语言剖解(07)

是的,我的确讨厌对着书本念,我也尽量的避免念书,经常念书,必然会引起学生的反感,书都有在自己手里,你念一遍和我念一遍,哪个更好?肯定是学生自己念书本的效果更好了,否则也不至于有:风声雨声读书声,生生入耳之说了。因此,一个经常按书本念的老师,不是个好老师。

      但,从不按书本讲的老师,那也不是好老师。试想一下,你漫天的讲,学生听得就算口水都流出来了,可最后会突然发现,除了侃大山,其实什么也没讲。

  矫枉过正,我不能这么做,所以,尽管我喜欢聊天,尽管我喜欢吹牛,但吹牛也是有限度的。

      第三章的课,我分为三个课时来讲每个课时一小时。这就要有所次重点了,即有所讲,有所不讲,有所延伸,有所不延伸。当然,我还需要有耐心。

      因此,讲数据间的混合运算的时候,我只说了四句话。

1、          C语言是强数据类型语言,不允许各类型数据之间进行转换。

2、          你如果非要进行数据的混合运算,必然会牵扯到隐式类型转换,当然,也会埋下隐式类型转换的隐患

3、          如果你想避免隐式转换的隐患,那你就明确数据类型间的转换,即强制类型转换。

4、          在不越界的情况下,我们注意同类优先级的数据书写方法,碰到乘除运算,我们一定要先乘后除。

第一点,我不消去多做解释;第二点,我会举一个很简单的例子,这个例子,就是书中的例子:10+ ‘a’ + i * f –d / e;

而对i 和 f  d e 的定义,我是如下定义的:

float i = 1.5

float f = 8.7654

double d = 3.14;

long e = 1234567890;

   我会逐步添加括号。来逐步阐述隐式类型转换的原则:小数据碰到大数据,就会隐式的转换为大数据,但同一种数据类型之间,不会进行转换。进而引出第三点,强制类型转换的必要性。我也举例说明,强制转换我们要遵循的原则:最好不要将大字节类型的数据,转换为小字节类型的数据

 至于第四点,其实目的也是为了消除第二点的隐患。比如;

 3 / 5 *5的结果是0;

 而 3 *5 / 5的结果是3;

但在正常的数学运算中,我们两种方法得出的答案都是3;

而对于算术运算符和算术表达式我是这么讲的。

“将书本翻到P365也附录C,这个需要记忆”,记什么?

“记运算符的目数,优先级和结合方向。”怎么记?

“多多练习。”

 除此之外,我会强调一下/ 和 %;这里需要注意什么呢?

我举如下例子,并分别让学生给出结果:

Int  I = 7 / -2; ------à -3

I = -7/2;            ------à -3

I = -7 / -2;         ------à3

I = -7 % 2;        ------à-1

I = 7 % -2;        ------à1

I = -7 % -2;       ------à-1

 

很显然,求商(即’/’)运算和取余(’%’)运算的情况很不一样。取余运算只和分子有关。

接下来我直接讲解自增(++)、自减运算(--)。我给一口气给出如下例子:

  int i = 2, j = 3;

  i = j++ + 2;                i=5,j=4;

  j = ++i + 3;                i=6,j=9;

  i = i++ + ++j;            i=17,j=10;

     

  j = ++i + ++i + ++i;   i=20,j=58;    

  i = ++i + i++ + i++;  i=65;

  当然,只给出结果,读者难以理解为什么,想要真正理解这些,最好跟一下汇编代码,通过上面给出的内容,无非是想告诉学生,千万不要像上面的方法去写代码,如果不幸遇到某个公司这样的考试题,那么我们根据如下两个原则进行求值:

1、         编译器是个贪心的家伙,每次编译的时候都是尽可能多的包含运算符号;

2、         操作数必须为左值,因为++表达式本身在C中不能做左值,单前++C++中可为左值。

当然,如果我们自己写,那么请你还是加一些必要的小括弧’()’吧。

而对于赋值运算符和赋值表达式,我通常只讲一两点:

1、         表达式本身是有值的,值为赋值后做操作数的值。

什么意思呢:即:printf(“%d\n”,b = 7);这句话会打印出7来。

说明 b = 7本身就是有值的。

2、         不同类型间的赋值,遵循如下原则:

短类型 = 长类型; //高位截断

长类型 = 有短类型;//符号位扩展

长类型 = 无短类型;//高位补零

这地方,我就不举例子了,给学生一个看书的机会,我所做的,就是简单的把一些谭浩强所讲的东西概括一下。

    我最怕一个问题,就是学生参加完笔试回来,我问他做的怎么样,他们说:“您讲过的我都做出来了,有些你没讲过,所以我没做出来。”这样的回答相当有才。所有责任瞬间归到老师那里了。遇到这样的事,我一般会这样回答:

“如果我只教你吃鱼肉,你是不是就不知道吃张嘴吃羊肉了?”

玩笑归玩笑,懒惰的心理可不能有,看官可否明白了?如果你是指望跟着我的文档学习的学生那么,你要动手做一下,并翻一下谭浩强的书,我说了,我这些文章,是以谭浩强的《C程序设计》为教材的。没有的话,那就想办法弄一本咯,但千万别偷偷捡走别人的哦。

      如此废话一堆之后,我们剩下第三章的最后一小姐了,错了,不是小姐,是小节。那就是逗号表达式。呵呵,也很简单哦,两句话。

1. 逗号表达式的值是最后一个逗号后的表达式的值

3+4,5+7   //这个表达式的值是12

   2.由于逗号运算符的优先级低于赋值,所以

a=3+4,5+7;

a的值不是12,是7。

怎么用程序模仿出来上面两个条件的内容呢?如下所示:

  int a;

  printf("%d\n", a = (3 +4, 5 + 7));  

  printf("%d\n", a = 3 +4, 5 + 7);    

 

好了,第三节课的内容讲完了,下节上课前,检查作业哦。什么?忘了,那我再重复一遍,开始看书并做第三章到第五章的作业哦。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值