2005-02
22

C语言之顺序及分支程序(6)

By xrspook @ 19:10:00 归类于:扮IT

终于越来越有趣了,没有了烦琐的定义,似乎什么都简单了起来,比前几天好理解了许多。看着一大堆的东西终于开始有点马上有反应的样子。

首先是输出输入格式。printf或者scanf("输入格式", 输入项表 ),挺好理解的。所谓格式就是%d, %f, %c, %x, %s, 然后外加说明它们所表示的字符。不过发现例题里面好像有一点问题。其中有一句“……printf("x=%d y=%d z=%d \n", x, y, z);……”然后它的解释居然是“x=10y= 15z=25” ,这不是应该表示为x=10, y=15, z=25的吗?我以为是我的错误,但看清楚,的确在%d和y,z之间是有很大的空格的,而且输出项表里面也说明了是x, y, z三个项的输出,为什么会解释为它们之间有产生了关系呢?这里明显和它前一页的解释有截然相反的效果。而看类似的scanf()的输入格式的解释之中就有明确的说明“如果有多个输入项,从键盘上输入的各个数据之间可以用空格、TAB键或者回车键作为分隔符。”那么由此看来无端上面的例题把x, y, z扯上关系是不对的。

然后就是输出函数putchar()和输入函数getchar()又是好像是一对的东西。但看来两个东西和进制格式和ASCII码是有紧密联系的,但为什么这本书从来就不提到底ASCII码到底是什么东西呢?只是在书后面的附录出现了常用的字符的ASCII码。

然后就是顺序程序设计,基本上是一帆风顺。其中的步骤都是显然易见的,但为什么把字母从小写变成大写的程序其中一步是“c2=c1-32”就是把c2(小写字母)的代码减去32就是大写字母呢?字母表显然是只有26个,但为什么要来个32个呢?原来一切又是可恶的ASCII码,的确在ASCII码当中,小写字母和大写字母相差刚好32个,因为其中存在“[ \ ] ^ _ ` ”这6个符号,这不是耍我吗?如果不是不久之后看到,看来又会成为我长时间的疑问了。

在顺序编程里面有个十分实在的秘诀“自顶向下,逐步求精”看来这也是设计方法的精髓吧。

分支结构就更好玩了。一堆的if-else, if, else, else if就似乎搞定了所有的情况。当然还有一个叫做开关分支的东西。switch-case,最后的分支开关就是
switch (e)
{
case c1:
S1;
break;

case cn:
Sn;
break;
default:
Sn+1
break;
}
很好玩嘛!符合这个就这个,要不就下一个,如果一个结束就用一个break跳出程序,和前面的if与else的神奇配合有异曲同工之妙。不过它到底和if和else的配合又有什么不同呢?好像两者在某种情况下是可以互用的。

在条件分支程序设计举例里面遇到了关于计算闰年的例题。闰年原来是“能被4整除而不能被100整除,或能被400整除。”就是如果即使2000年能被4和一百整除,但由于它也能被400整除,所以它也是闰年,怎么我好像以前就没有听说过闰年计算里面会有100和400的定义呢?看这本书无端端让我增长了这些知识。就是说1100,1300,1400,1500都不是闰年,神奇的400事件400年才发生一次,2000年就是一次,而概率有75%的正常不闰年我却没有遇到过,与我最近的2100年不闰年到现在也有95年,不知我有没有机会看到。快到那时的时候肯定世界会大型宣传闰年的真正定义,为什么那次8年才一个闰年。改变很多人心目中能被4整除的年就是闰年的错误定义。

说道闰年又让我想起了JEA,1968-02-29,可怜的闰年出生,到现在才过了9个真正的生日。于是fans们中的一员曾经说,“难怪我们心目中的JEA那么年轻,原来2005年他才9岁,不过岁月还是不会饶人的……”(以上为我的翻译) 的确,闰年出生的人在理论上岂不是很年轻,足足比普通人年轻3倍(数值上),哈哈,果然有趣。在这个层面上讲那些可怜的02-29出生的人,也不是太可怜:)

明天没有以外的话(但可能有以外,因为是元宵,可能要一天出外,没时间学习)就开始学习循环程序了,这个应该是个硬骨头,因为我到现在连它的N-S图表示的意思还不能很快地作出反应。

今天也特意去查C++和C的关系了,还是不清晰,一时说C++和C完全是分离不同的东西,但从

说明它们当中多少有一点联系。

同时也开始明白了一点关于计算机等级考试的东西。详情请看http://cpp.ysu.edu.cn/dengjikaoshi/djks.htm

看过一级考试的试题,除了一般的Windows和Office知识以外多少还是要有一点其他计算机的常识的,比如说进制之间的转换和最基本的ASCII码认识。

看来没有报考今年4月的等级考试还是正确的,老练一点的好。

2005-02
21

雨中漫步,沉思

By xrspook @ 20:24:00 归类于:烂日记
2005-02
21

C语言之算法(5)

By xrspook @ 19:58:00 归类于:扮IT

今天由于种种原因所以学习的量有所减少。

算法,真的是一种很神奇的东西,可以说它就是一种解题的思维,在数学里可以所是思路,如果在文章里应该可以说是段意。只有清楚了算法才能继续下去,没有思路一片空白,算法其实就是要首先有下手的地方。

算法基本概念的地方第一题就是解一个一元二次方程,令我惊讶的是除了有理部分的思维以外还要理会到无理虚数的思维。然后第二个例题是玩魔方的算法。其中的第二步,第三步是看完几次都不能理解为什么要这样子。 “……(2)向右上方斜对角线方向给出下一个自然数。在此过程中,若这个数跑到方阵以外,则把它移到它所在的列或排的另一端的格子里。(3)每写完三个数之后,要把第四个数写在第三个数下面的方格里。……”

其实我觉得算法的其中一个重难点应该是怎么用3个表示法来表示编程者心中的算法,用图把思维表示出来。

当然无论是图还是思维最终还是要靠符号语言来表示出来成为真正的C语言。不过如果连思路都不清晰,图都不能画好,又怎么可以谈得上能用符号表示好呢?

刚才又问了师兄,我的食工专业应该在大二上学习C语言,看来我的功夫应该不会白费。不过他是大四的师兄,会不会他当年的课程和我将要的课程有出入呢?

到现在还是不太明白C和C++的区别,因为昨天搜索的时候又发现其实C++和Visual C++是完全不同的,到底他们之间什么关系啊????

2005-02
20

可爱无敌——The Story of Quill

By xrspook @ 20:32:03 归类于:烂日记

很偶然的机会,开始看TVB PearlThe Story of Quill(小Q正传),然后一开始就停不了。每个星期天的晚上8:00到8:30,成为了我的必定节目。

小Q是一只拉布拉多导盲犬,故事就是说它从小狗狗成为导盲犬的过程。以下就是The Story of QuillTVB Pearl的主页:http://pearl.tvb.com/drama/quill/index.html

实在太感动了。一条狗的成长历程,一条狗改变了一个人……看着小时候的小Q,简直就是一个Bobby,我不能控制自己把两者分开。简直就是一模一样,但曾经在我身边的,现在已经到了天国。在天国之中我不知道它是否也像小Q那样,听话可爱……

本来就超喜欢狗狗,还要是那么听话有用的狗狗。小Q好像真的会听懂人的话,电视剧中它没一个表情都是那么的真诚,仿佛它真的懂了。

我本来从来不看日剧韩剧,但这次的日剧小Q确实使我着迷了。没有暴力,没有杀戮,没有男欢女爱,只有最真诚的爱,人与动物的爱,人用爱去感动教育动物,动物用它的实际行动来帮助,来感动人。看着主角渡边先生因为小Q而改变,看到狗和人要分离的地方,我也想哭了。

以下就看看一系列小Q的图片吧:
  
  



  
  

我们的小Q怎么看怎么可爱!!!!!!!!!!!!

2005-02
20

C语言之位运算符(4)

By xrspook @ 19:12:00 归类于:扮IT

在搞位运算符之前,首先要搞清楚几种进位制的互换。

真的开始的时候一头冒水,单是看,肯定不行,不计一下始终是纸上谈兵。可恶的C语言教科书,老是无端端就说到“按位取反运算符”其中马上就用“八进制数0217(即二进制10001111)”说得好像理所当然,而我则是??????思想之中老是觉得当年高中的时候电脑老师曾经好像讲过十进制数和二进制数之间的互换。于是就去找书,又忽然发现原来高二下学期的时候发的电脑教材原来就有说明。那本书我翻都没翻过,因为高二下开始就没有电脑课了。那本书里面居然是讲“第一章 程序设计基础; 第二章 程序设计实例; 第三章 进一步认识信息处理工具——计算机”气死人,怎么这么实际的东西就没有教呢?都是可恶的应试教育害的。

乱翻书之中终于发现为什么C语言在Windows系统中好像不怎么出现的原因。因为对于C语言来说,它不是可视化开发系统,也就是它不是早就搞好一块一块的东西和程序等待我们去拼凑,也许这样的说法并不真的能表达我的意思。我要说明的就是,C语言需要一步一步用字符去表达意思,这些操作基本上都是程序人员在键盘上输入,而我现在所接触的几乎所有系统都是可视化系统。从Windows到Photoshop,都是以窗口形式出现,而现在正十分流行的Visual C++也是可视化开发系统。这样子能给人更直观的感觉。如果Authoware不是可视化,Flash不是可视化,真的会令我这些傻B很难上手。我一直不知道C语言和C++的区别,区别就在于一个是可视化开发系统,一个不是。要不为什么C++前面要加Visual而C语言没有呢!(我猜)根据我仅有的一点经验,如果没有猜错的话在Visual C++之中,编辑的代码可以在我熟悉的窗口中输入,而且在简单的保存之后可以很容易按一个“预览”之类的键达到把刚才的编程很快地运行出来,马上能够看到效果。

以上的东西都是我根据在Authoware和Flash的一点逻辑思维而想出来的,不知道正确性如何。还是要看看Visual C++的书来证实一下。

书中说“目前,Windows下有很多可视化开发系统,如Visual C++, Visual Basic, Delphi等。”Visual Basic在那本书的后面介绍了一些简单的例子,在窗口的帮助之下,编程似乎简单了一点。

同时在书后面的附录之中发现了近几天不断出现在我眼前的一个词的中英文对照ASCII(American Standard Code for Information Interchange)就是美国信息交换用标准代码,原来如此,原来ASCII是这些东西的缩写。而char字符型的范围就是ASCII这又是怎么理解呢?

言归正传,还是回到几个进制的换算,于是就
http://www.d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.1,本来想剪切-粘贴,不过那么多的资料这样做好像不太好,搞个连接就算了。不过它还是没有直接说道八进制和二进制的直接转换。都是以十进制为中间桥梁的。不过这本可恶的C语言教材几乎所有地方都是用八进制和二进制来说明问题,即使是十进制的还要把它转成八进制,然后再说明问题,由此看来,应该八进制和二进制的转换应该不是很难的,甚至比十进制换二进制还要简单。不过为什么就是……

按位“与”、按位“或”、按位“异或”是明白它的操作是怎样的。但就是不明白为什么它说“例如,假设X是一般的unsigned类型的整数(2个字节),我们想获取其低字节的值时,只需要将X与0377相与即可。”这是什么意思啊!为什么不和别的八进制相与,偏偏只和0337相与呢?还有什么叫做低字节?同样出现相似问题的就是“例如要使X的各位翻转,只需执行X=X^0177777”就是X和0177777异或,这也许还好理解一点因为0177777(八进制数)的二进制数正好是16个1,正好使任何数都来个翻转。但在“与”的那里的0377(八进制数)的二进制数是0000000011111111,又为什么和任何数做到“与”的效果呢?

位运算符搞定之后第二章就好像已经结束了,不过好像留给我的更多是疑问。真的觉得一个技术blog——技术点滴的作者(linrun)的一句话说得很对“做软件开发的人应该尊重编码,就如同剑客尊重他手中的剑那样。尊重来源于了解,畏惧来源于陌生,轻蔑来源于无知。”

COPYRIGHT @ 我的天 | Theme by xrspook | Power by WordPress | Valid XHTML 1.1 and CSS 3 Go to top