C语言果然不是省油的灯,岂有此理,居然会有如此多的问题。首先是到现在我还搞不懂如果要在Windows系统下运行用来编程的话应该在哪里入手。难道一定要在DOS系统或者UNIX系统才能运行这种看起来比较过时的编程语言。但根据它的操作,应该这东西是很简单就能运行的,应该不用什么软件。是不是因为我看的书是2001年4月第3次印刷太旧了呢?但显然那时的Windows系统已经应该是主流了啦!而且是1999年6月第一版的,为什么我好像找不到有关在Windows系统运行C语言的方法呢?这本书是高等教育出版社出版的全国成人高等教育规划教材啊!但看了20多页,为什么我的感觉都是在纸上谈兵,说是说了,但根本好像没有操作的空间。甚至连在哪里可以操作都没有说。
跟一向接触的Windows系统下运行的软件不同,它根本没有说明到底该在哪里运行。然后唯一出现我熟悉的就是在P8说源文件的编辑的时候说“用于建立源文件的编辑器种类很多,如Unix的VI, ED; MS-DOS下的EDLIN, EDIT;Windows下的Word等。”然后后面举的例子就只是在MS-DOS系统和Unix系统下的。
书本第一章说的是C语言的基本概念。其中1.3.1 C程序实例就举出了C语言的一些编程例子。但我什么都不知道,连符号到底怎样表示什么都没有意识就开始基本的实例,这又是怎么搞呢?我知道它的意思应该是让读者有对C语言的初步认识,但却让我觉得只可以死记硬背。
最令我深刻的是“求最大值”,很简单,只是从三个数中挑出最大的,但对于编程则比求三个数的平均值的程序要复杂得多。说求平均值是一个主函数就搞定了,而最大值则需要一个主函数外加一个计算最大值的函数。由主函数引导到计算最大值函数,然后再会到主函数结束程序编写。思路是清晰的,但还是和学数学的感觉一样,看得懂想不到。而它的编写函数过程,我第一感觉就是在做一个证明最大值的数学证明题。这是第一个我觉得电脑和数学关系密切的地方。
然后是第二章数据类型。数据类型里面的分叉简直是不用大括号根本好像难以表达清楚。其中的数又分为了整数和实数。这不是数学是什么啊?但这也让我第一次认识到什么叫做八进制数、十六进制数、十进制数,和我们一般所说的进位又有区别。
第一个令我迷惑不清的地方是“对多数计算机系统而言,短整型数一般占用两个字节,一般整型数占用两个字节(既16位二进制位),其取值范围是:-32758~+32767(即-215~215-1)超过范围的整数用长整型数表示。长整型数占用4个字节,其取值范围为:-2147483648至+2147483647(即-231~231-1)长整型数的表示方法是在数的末尾加上一个字符l或L……”我的问题是既然都是2个字节,为什么还要区分一般整型数和短整型数,而它的取值范围又是怎么回事二进制位为什么要是16位?前面好像没有说明这个问题喔。然后取值的而占4个字节的长整数型有为什么是31位的二进制位,它的字节数是一般和短整型数的2倍,理论上应该是32位的二进制位啊!在这里突然发现我数学概率开始有点用了。
然后是2.2.2字符常量和2.2.3字符串常量,原来单引号和双引号是有如此大的区别,这是自语文高考标点符号以来我第一次觉得原来标点符号的用处原来这么庞大。字符常量的叙述之中出现了“(如ASCII)中的编码” ,突然有点很熟悉的感觉,刚才突然发现原来ASCII编码就是我用嗅探软件URL Snooper嗅到的流体文件地址以后又键可以选择复制的一个选项,除了以ASCII编码复制还有以16进制复制,而正确的地址应该是用ASCII编码复制,那个地址才能正确被下载,而为什么我就完全不知道。
终于有点明白为什么C语言里面和其他网页编辑语言里面那些奇怪的符号乱飞,特别是要对称出现,要不就根本执行不了。
然后就是2.3.2基本数据类型又是一个盲点。一堆的char, unsigned char, signed char, int unsigned int, singned int, short int, unsigned short int, signed short int, long int, singned long int, unsigned long int, float, double, void简直就是天书,然后这还不是最大的问题,问题是马上它好像知道你已经明白所有的东西,开始说2.4数据类型转换,什么float都要向double转换提高运算精度。谁知道谁低级谁高级啊!然后它有好像理所当然地说一堆。但这仅仅是隐式类型转换,还有显式类型转换就更加不可思议了,什么“在处理i=i+3.14159时,首先将i转换为double型,然后进行相加,结果为double型,再将double型转换为整型赋给i。”这是在说什么啊?就是看不懂基本数据类型,然后以后的类型转换就更是乱七八糟。
我应该以什么思维对付它呢?说死记硬背吧,又不是,但不背呢就好像一个白痴,什么都不知道。
开始没有想过计算机原来和数学的关系是如此密切。难怪在库切的《青春》里面的主角是一个有数学学位的能进入英国的IBM,现在看来,原来数学扩展是计算机,而且是初级的数学缜密思维正是在计算机里面可以很好地体现。原来如此。这样看来,学了那么多年的数学还不是白学的。
编写一个程序就如证明一个数学题,而且就要从最简单的地方开始,要当电脑是个白痴(情况有点像初中老师说的初等数学),当然如果知道某些东西是固定不变的,就可以像利用定理一样利用,而无须每次都写出来,只须复制,粘贴。所以说编写一个程序是一个很大的工程,需要很多人的努力,而很多人的努力又可以在一个程序中出现。
要写一个完美的程序就如要证明一个完美的证明题一样,而且还要比证明题难得多,稍有误差就会出现这样那样的bug,然后使使用者诸多不便,这在我们的软件就见得多了。要不Windows也不用更新,就是在把程序不断改进。
以上就是我第一次接触C语言的初体验。