2005-02
21

C语言之算法(5)

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

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

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

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

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

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

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

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

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)的一句话说得很对“做软件开发的人应该尊重编码,就如同剑客尊重他手中的剑那样。尊重来源于了解,畏惧来源于陌生,轻蔑来源于无知。”

2005-02
19

C语言之运算符号和表达式(3)

By xrspook @ 21:24:00 归类于: 扮IT

首先在学习新课之前要搞清楚以前的一些力所能及解决的疑问。

原来“C语言的基本数据类型”也不是那么难搞,基本上是十分有规律的,不过好像一定要记住。它那个列表之中的“范围”我好像到现在都不知道有什么用途。要明白的就是char表示字符型,int表示整型,unsigned表示无符号,signed(书中多处都写错了,写成了singned,我晕!)表示有符号,然后其他的一堆就是charint分别与unsignedsigned的几个配合。然后就是简单的几个float浮点, double双精度型, void空。

短的和字符型的长度是8,整形、短整型的长度是16,有时候是8,然后长整型的长度是32,而最大就是最高级的双精度型的长度是64。

明白了这些,然后后面的类型转换也就比较简单了。基本上就是遵循两条路:
float- double
char,short- int- unsigned- long- double
最终就是到达高级的double,其它的在相对情况下表示高级和低级。其实我觉得就是所谓高级低级就是长度要从短的变成长的。

今天学习的运算符和表达式要记住的东西就比较那个了。首先名称操作符就一定要记住,要不就连那个东西是什么都不知道了。但这还不足够,记住了这个东西只是知道了外表,接下来还要记住优先级,不记住优先级也是乱套,就像不会数学的先乘除后加减的基本法则一样,然后就是结合法,有分左到右和右到左,也是需要记忆。但通常这些要不这样要不那样的东西记一个就好了,免得搞乱。当然知道了以上以外也要知道一些内涵,比如说每个操作符的真正含义和运用的条件,都需要清楚。有了这些才叫装备了武器,有了武器就不等于战无不胜,清楚了武器的名称和使用方法和条件,最终证明你会不会武器的方法还是实操。

因为符号的优先级,就硬性规定了到底谁先谁后,因为结合性也规定了到底怎么算的方向。关系运算符的优先级分别是: <小于10,>大于10,<=小于或等于10,>=大于或等于,= =等于9,!=不等9,真够怪的等于的运算符是2个等号,然后不等就是一个叹号加一个等号。

最喜欢就是看到逻辑运算符号和逻辑表达式了。好有亲切感,与高一数学的真假命题完全是一模一样。 !表示否命题,&&表示且,||表示或,优先级是!> && > ||

三项条件运算符介绍了两个运算符,分别是。其实这两个东西的结合就是对要说明的东西进行分类讨论,就是提出分类的条件,而结果则是的左右两边的东西。如果之前的东西成立,则用左边的,反之则用右边的。这些东西如果手写在纸上肯定用大括号来表示,清晰明白。

逗号表达式其实就是一个给了明显条件的简单计算。不过我觉得有一个例题有些乱来“例如逗号表达式:x=5, x+10, x*10+3 其结果是53”,53其实就是5*10+3,直接用第一个个最后一个就能算出来,那么中间的x+10又有什么用途呢?

求字符数运算符其实也是只有2类,一个是sizeof(type_specifier)sizeof expr,其中type_specifier是类型标识符,expr是表达式(难道就是express表达的简写?),其中还是不太清楚type_specifier在实际中的真正用途。而什么强制类型运算符则是一头冒水。

以上就是我今天所知道的了。

2005-02
17

C之初体验(2)

By xrspook @ 20:20:00 归类于: 扮IT

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语言的初体验。

2005-02
16

C前言(1)

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

终于开始习惯在blogbus写日记的第一步是转到“切换到文本编辑模式”,然后写一个
,然后再复制一堆的<  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  ><  br  >
,然后再转回一般的编辑栏开始日记。虽然无奈,但这似乎已经成为了不是办法之中的办法。

之所以叫做“C前言”,“C”是指什么?很简单,既然分在“扮IT”肯定是与电脑有关的。“C”就是指C语言。为什么要学C语言。我也不知道,为什么不学C++或者Java之类的语言我也不知道。可能自己不想买书吧。为什么要学C语言?不知道是我自己弱智还是什么的,我觉得几乎所有的什么什么语言都是几乎一通百通。就如在Flash和在Authoware之中的代码设置几乎都差不了多少,而那些代码又和网页里面应用的html代码又差不了多少。那天看《电脑报2004合订本》之中的教Java的东西,很想学,因为对于Java, 我知道它的厉害,但在一段很长的时间里我把Javajavascript搞混了。对于javascript经常会在网页出现,没有了javascript的工具,很多网页都无法正常进入和浏览,最明显的是hotmail的收件箱,里面很多东西都是用了javascript,以前没有安装有关的软件结果很多应该可以用的功能都无法进入。第二次认识javascript就是在自己网页的很多特效功能,比如说双击滚屏还有时间的显示。在网页特效方面,javascript实在是太太太常见了。

对于一个经常接触电脑和网络的人好像一点都不懂,说不过去。于是我觉得应该学一种语言。当然开始的时候我是有私心的,因为电脑级是有学分和证书的。一级是基本的视窗操作而二级就是开始编程了,所以我必须搞定它。况且听说我自己的专业就必须学习C++ ,而且听说这也是一个难。我不要被牵着鼻子走,就像我小学学电脑那样,痛苦万分,电脑就只能拿所有学科的最低分,老是70或75。我不想C++成为我的痛苦。本来是想学C++的,但表哥只有C语言的,所以就将就一下了。

这就是我首先学C语言的目的和我自己所谓的前言。

为了不想把这些废话和以后的课混在一起就只能写这么一点了:)

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress