《2022年怎样学习C语言可用 .pdf》由会员分享,可在线阅读,更多相关《2022年怎样学习C语言可用 .pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、怎样学习C语言 .txt大人物的悲哀在于他们需要不停地做出选择;而小人物的悲哀在于他们从来没有选择的机会。男人因沧桑而成熟,女人因成熟而沧桑。男人有了烟,有了酒,也就有了故事;女人有了钱,有了资色,也就有了悲剧。一,怎样学习C语言很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是 C语言。 经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程庌輌这简直就是天方夜谭。为什么C语言如此重要呢
2、?第一 :C 语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。第二: C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的 windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C 语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。第三:很多新型的语言都是衍生自C语言,C+,Java,C#,J#,perl.哪个不是呢?掌握了 C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个
3、再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。那么究竟怎样学习C语言呢? 1:工欲善其事,必先利其器这里介绍几个学习C语言必备的东东:一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows 时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C+,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。一本学习教程, 现在 C 语言教材多如牛毛,但推荐大家使用C
4、语言程序设计谭浩强主编第二版清华大学出版社,此书编写的很适合初学者,并且内容也很精到。除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛, 不象我们当初学习, 只有读书做题这么老套。我向大家推荐一个 “集成学习环境(C 语言 ) ” ,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个 windows 下的 trubo C ,初学者甚至不用装其它的编译器,就可以练习编程了, 非常适合初学者。还有一个“C 语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。 2:葵花宝典学习计算机语言最好的方法是什么
5、?答曰:读程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 22 页 - - - - - - - - - 没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试
6、图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。 3:登峰造极写程序的最高境界其实就是掌握各种解决问题的手段( 数据结构 ) 和解决问题的方法( 算法) 。是不是写出底层程序就是程序设计高手呢?非也,写底层程序, 无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合, 然后写值读值,仅此而已。 这不过是熟悉一些io 函数罢了。 那
7、么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有 10 个人,找出一个叫 “张三”的人,你该怎么办?第一种方法:直接对这10 个人问:“谁叫张三” 。第 2 种方法:你挨个去问“你是不是张三?” ,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三, 指给我看”。 不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map 数据结构,穷举查找和折半查找。所以掌握好数据结构
8、和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的数据结构清华大学出版社,希望每一个想成为程序设计高手的人研读此书。二,语言学习方法谈谈偶的学习方法,抛砖引玉!学习不论讲不讲方法,最终都能学会。但是别人1 个月学会了,而你却100 年才学会,这不就晚了么?: )所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。什么才是学习C语言的捷径?我的答案是看书。书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1 甲子。 : )书当然要看好书,只有好书才营养丰富。假如你花了1 天时间看了一本破书,而该书介绍的知识虽
9、然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如C语言之四书五经中介绍的4 本。 (虽然这些书很多已经绝版了,但我相信电子版也是很有益处。况且,如果你真的想看,我相信你一定有办法搞的到。)这些书你会在很短的时间内看完(比如一两个月) ,这取决于你的基础和悟性。之后要看那些名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 22 页 - -
10、 - - - - - - - 书呢?我不妨再列几本。Bjarne Stroustrup的 C+程序设计语言 (The C+ Programming Language)一定要看,这本书里面对于C的一些基础概念的定义,比我见过的其他任何C语言书都要全,都要仔细;Bjarne Stroustrup的 C+ 语言的设计与演化 (The Design and Evolution of C+)和 David R.Hanson 的 C语言接口与实现创建可重用软件的技术(C Interfaces and Implaementations Techniques for Creating Reusable Sof
11、tware)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。读书破万卷,coding如有神。总而言之,就如传中云:“生而知之者,上也;学而知之者,次也;困而学之又其次也。”我们不能总是因困而学之,而要做到兵马未动,粮草先行。看书是学习的导向, 书中能一一介绍清楚概念,但书却不能把应用的细节一一介绍给你,因为应用总是招数繁复,变化多端。因此我们要想熟悉招数,懂得书中所讲怎么使用,还要多读源码。 Linus 给别人解答问题的时候,常说Read the *ing source
12、code;候捷也在其文中提到 “源码之前, 了无秘密。”这就是大师的箴言呀。源码就像是动画、 就像是幻灯片,把书中的招式一一演练给你看。可以说高手的经验大都是源自代码。源码和书一样,也是要看好的,不要看差的。在此,我推荐看Linux kernel source code 和 Linux tcp/ip source code。这两套代码都是开源的,垂手可得。此外,还可以配合着Andrew S.Tanenbaum 的操作系统的设计与实现(Operating Systems:Design and Implementation)、毛德操胡希明的 Linux 内核源代码情景分析 、 Jonathan C
13、orbet,Alessandro Rubini,Greg Kroah-Hartman合著的 Linux设备驱动程序 (Linux Device Driver,3e) 、W.Richard StevensTCP/IP详解(3 部) (TCP/IP Illustracted ) 、W.Richard StevensUNIX 环境高级编程(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的内容)等书来看,方便的很当然程序不是看出来的,是写出来的。 我高中的时候每天坚持写6 个小时程序,数据结构和排列组合、图论方面的习题反复做
14、了N遍。到现在虽然已经时隔五六年,很多内容早已淡忘掉,但却培养了我很强的编码能力和调试能力,直到现在还对我的工作有很大的帮助。学习忌贪多、忌浮躁、忌急功近利、忌目中无人。把学习计划放的长一些,培养一个好的学习方法,一步一步慢慢走,终能成为高手下面是本人自己总结的方法。本人感觉只要你肯花时间。学好应该没问题。C程序设计的内容很丰富,一般选谭浩强老师编写的教材,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者
15、表达方式与以往数学学习中不同(如运算符等) ,这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、 不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?不要说在家里自己学看着书这种方法个人觉得完全是自欺欺人而且你没有基础根本就学不到什么东西不管你多用功!这种东西必须先入门!这才是最快的方法起电脑学校培训名师资料总结 - - -精品资料欢迎下载 -
16、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - 去吧,他们教不到你什么东西,就是教你最快的入门跟编程基础,真真的你想靠IT 致富的话,起码要有3 年以上的工作经验再说!出了学校门,找个IT 公司进去当”苦力” 跟着老师傅做几年项目,培养点工作经验!能独立完成业务了!你就离有房有车的日子不远了!前提是你必须好好在单位搞几年但是我没有银子,也没有关系怎么快速入门。建议大家可以看着书加上详细的视频教程学习是目前最好的方法,主要省钱还高效。可以从百度里面搜索“理想视频教程网” ,
17、自我感觉这个网的内容学习起来还可以,讲的比较系统。最后,学习C语言始终要记住“曙光在前头”和“千金难买回头看”, “千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习 C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。下面是本人自己总结的方法。本人感觉只要你肯花时间。学好应该没问题。C程序设计的内
18、容很丰富,一般选谭浩强老师编写的教材,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等) ,这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、 不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答
19、又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?不要说在家里自己学看着书这种方法个人觉得完全是自欺欺人而且你没有基础根本就学不到什么东西不管你多用功!这种东西必须先入门!这才是最快的方法起电脑学校培训去吧,他们教不到你什么东西,就是教你最快的入门跟编程基础,真真的你想靠IT 致富的话,起码要有3 年以上的工作经验再说!出了学校门,找个IT 公司进去当”苦力” 跟着老师傅做几年项目,培养点工作经验!能独立完成业务了!你就离有房有车的日子不远了!前提是你必须好好在单位搞几年但是我没有银子,也没有关系怎么快速入门。建议大家可以看着书加上详细的视频教程学习是目前最好的方
20、法,主要省钱还高效。可以从百度里面搜索“理想视频教程网” ,自我感觉这个网的内容学习起来还可以,讲的比较系统。最后,学习C语言始终要记住“曙光在前头”和“千金难买回头看”, “千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习 C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。最近,老有的网友提问
21、如何学习C语言,因此从网上搜索了一些文章,希望对大家有所帮助& g- e& h8 G: V; q& R# J; V) p, s4 Q1 M l M 谈及 C语言, 我想凡是学过它的朋友都有这样一种感觉,那就是 “让我欢喜让我忧。 ”欢喜的是, C语言功能非常强大、应用广泛, 一旦掌握了后, 你就可以理直气壮地对他人说“我是电脑高手! ” ,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是, C语言犹如 “少名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 22 页 -
22、- - - - - - - - 林武功”一般博大精深,太难学了。其实就笔者认为C语言并非是“ difficult(困难)”的,只要你能理清思路,掌握它的精髓,那么自学C语言是一件非常容易且又其乐无穷的事。今天本人就与大家一起谈谈如何学习C语言或者说学习C语言应从哪几方面着手。/ E, r) N ) z6 e/ d s- f* H4 7 N! F1 N c 了解一些基本知识& t. m8 J6 A: w . U5 K; S. G G G, 一 C语言的背景5 I% : h0 q; # s% h 7 + L$ & & T2 X a/ 就个人感触,无论学习哪门语言首先应该了解一下自己所学语言的背景,
23、也可以说它的发展史。/ z# M ) p. N6 8 g& L/ v8 x- R/ ; C9 h+ P C语言属于高级程序语言的一种,它的前身是“ALGOL ” 。其创始人是布朗W 卡尼汉和丹尼斯 M 利奇。 C 语言问世时是带有很大的局限性,因为它只能用于UNIX 系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987 年美国标准化协会制定了 C语言的国际标准,简称“ANSI C” ,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:/ x+ S x% E6 S; J $ . n3 J! 1 |# N% I 1兼备高级语言与低级语言的优点
24、,属于一种中间语言。, u W+ D& _8 O9 |$ D8 a$ k 5 l* a; B: p! K0 N) / 2它是一种结构化程序设计语言,非常适合结构化程序设计。/ n8 k8 J Y2 T) v! I0 n! , * w- t9 M1 W0 a. r 3有较丰富的数据类型、运算符以及函数供以选用。+ i3 u1 m( K: n0 i8 L- b ( t7 0 C6 N$ ?0 j1 e 4直接与内存打交道,使修改、编辑其他程序与文档变得轻松,简单。9 V3 R+ K# w3 t/ I1 : v$ n 7 x |( s$ L& T% F$ w 二二大语系二种不同的学习方法7 # M
25、V$ X M3 b2 s/ r: A . ?3 c0 q0 ) A# O 笔者学习过很多程序语言,例如:C,C( C语言的扩展) ,QBASIC ,VB (BASIC的可视化),JAVASCRIPT ,JSCRIPT ,VBSCRIPT ,JAVA ,ASP ,FOXPRO,PERL等等,就本人实践所得,其实高级程序语言分为两大语系。一路是以C 为主的程序语言,例如:JAVASCRIPT ,JAVA等,这类语言在函数的调用,程序语句的书写,循环的控制都极为相似。另一路是以BASIC为首的程序语言,例如:FOXPRO,VBSCRIPT 等,此类语言同样具有相似的函数调用,程序语句书写以及循环控制
26、,但与C语系是不同的。因此若是您以前是从QBASIC起家的,那么在学习C语言前最好是先洗洗脑,千万不要把学习BASIC的方法以及思路用在C身上。! j P4 y/ E2 L/ Q, t% F. r6 - U9 G1 h& c 讲到这里,我想大家对C语言一定有了感性认识吧!下面让我们再升华一下,全方位亲密接触它。学习C语言必须从以下四点入手,也就是说,只要你能掌握这四点的内容,那么基本上就大功告成了。- 9 j% W: l, J! G5 Q - l* p0 d& c8 L2 B u 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
27、名师精心整理 - - - - - - - 第 5 页,共 22 页 - - - - - - - - - O9 P# N* ) M P2 N) e 3 p. j( f. Y j g: t+ i 亲密接触C语言 7 i% V# R Q 7 , Q! y7 n: B p: - y 一输入输出 w3 F s/ l% ) |5 7 x% C0 E$ 3 v0 u3 W* Q C 语言的输入输出是非常严格的,或许在其他程序语言中我们可以不关心这个问题,但在C语言中,我们必须要彻底了解它。由于篇幅有限,因此笔者不能详谈,有兴趣的朋友可以参考由著名程序语言教授谭浩强先生主编,由清华大学出版社出版的 C程序设计
28、第二版 。不过这里笔者还是有几点要谈一下。- j3 c h7 a) i% 1 K- + b% d: W M7 & s 1二维浮点数数组的输入0 p! w3 y( G- T# x; V- 5 z6 ; V! _1 Y3 h0 ?& W 二维浮点数数组的输入(即:通过键盘给二维浮点数数组赋值)在很多专业书中都没有详细讲过这个问题。在给二维浮点数数组赋值时一定要先声明一个变量,接着把数值赋予这个变量,最后把变量数值赋予二维浮点数数组赋值。实例如下:0 Q* q( r8 V0 G) ? t& a* Y 3 C6 N- 5 R. _; ( w5 % P# include stdio.h7 S6 U: C
29、 T u0 G! g$ V) v main()# % z3 7 G r2 u7 E# 5 R8 J % D9 H6 3 7 l- d: U# ? float a23,x ;0 M) w0 V0 o: |$ f) int i,j; a: R7 m/ % 9 C for(i=0;i2;i+)* z0 r% |: |, j! for(j=0;j3;j+)4 D! f. |( C& I& M! H scanf(%f,&x); 7 O4 e4 _9 j. U+ d aj=x; X: y. 7 # s R7 C 2 6 K- m7 C4 R! f3 4 c1 D 不能写成: ! 4 K* O* _/ t
30、X% 2 s$ u+ b J% X I1 h W) x6 o# include stdio.h * % c Q# H7 4 | z% cmain()3 n6 w- d C. x1 u& y* q: C& L4 1 f. j2 E4 A* O float a23 ;* ! q t; R 1 N+ z, y7 H int i,j; I ( t$ . I5 F for(i=0;i2;i+)5 m7 I/ I- B7 O. c# Q for(j=0;j3;j+)4 c3 J7 m5 T# D* C scanf(%f,&aj);. _( e8 $ |( o H. , ) U% q/ v: k 9 V8
31、5 l& |) * E b 同样道理,在结构性浮点数组变量中也一定要按照这种格式输入。实例如下:/ h( E j0 _. + q& m2 L N) l& q: N w # include stdio.h 5 c. D2 R- g q q- _ Q struct student9 + Y/ R% G* G float b3;1 N+ w a1 b9 G6 y$ S 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 22 页 - - - - - - - - - int x; g
32、; e6 K7 S/ l- y% i6 z a2; 2 ?4 V; 8 A6 E4 h& G% g5 z main()9 P, B/ x1 d5 3 G/ U1 9 9 r5 c: E# S9 z$ F float x ;$ n. I! Z0 N; o2 1 t# z int i,j; 0 * G5 w7 h) ; y. for(i=0;i2;i+) $ I) B: K0 |+ T5 r for(j=0;j3;j+) W: o0 2 d/ y* ) i7 c7 M) i scanf(%f,&x);: y7 y+ E) S# J j w4 $ + B a.bj=x; 5 x+ X; R( f9
33、v3 p5 j 4 X. J3 Q; c _. | T: s$ p* I & E* q: Y3 I/ m- V, ! x1 K 2注意输出格式中“”后的字符4 Q; 1 y9 ) L- x6 x4 . Z5 L- W1 b- 5 o( y2 p2 k C 语言的输出说复杂不复杂,因为常用的都很简单。可说不复杂也未必,记得曾在一次等级考前辅导我们C语言的教授讲道: “如果 C语言要考得很难的话,根本不用考什么指针,只要专考输出格式,我想百分之九十九的学生都不及格。”当时我们无不认同。从这则事例中可以看出C 语言的输出格式之复杂程度。因此大家在学习它时千万要学会辨别输出格式中“”后的字符,每个字符
34、都有其意义,也都有其作用。8 P) D E% Z. L# J6 # o : k* _* V( v+ H7 G7 Y 二优先级8 |% z4 q1 r: |: I) x4 B* Z# Y # E% L# e f: s; 说道优先级,有很多朋友都不是很了解或说很模糊。为此笔者想先通过一个例子让各位有个概念。什么叫优先级?比方说,我们在公交车终点站排座队时总会遇到 70 岁以上的老人不需要排队就能上车的情景,这就是优先级的涵义。C程序在运行时也象排队坐车一样, 首先照顾那些优先级高的运算符,若是优先级相同, 那么就象遇到两位 (或两位以上) 70 岁以上的老人那样,让他们依次上车。但是C语言中的优先
35、级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。例如条件表达式:条件?结果1:结果 2,这种表达式很多朋友都知道,它的作用与IF ,ELSE , 条件判断语句很雷同,它运算时的优先级就不是按照C语言的规则来完成的。所以说对于优先级各位编程爱好者一定灵活掌握,不要死记硬背。3 b5 f. q! 2 B: C4 E/ K . u* O# D1 _9 t 三指针/ E; f4 a I% S6 l! l- ( h U+ A! V( 7 就个人认为, C 语言中的指针是最有特色的,当然也是最难学的。指针说穿了,其实是变量的一种表现形式,只不过这种变
36、量记载的不是数值而是地址。就象一个人可以用姓名来表示自己,也可以用身份证号码来表示自己一样。笔者涉足编程已经有三年多了,在这期间曾经收到过很多网友的电子邮件询问学习指针的方法。就本人感触,学习指针最好是先学些计算机硬件工作的原理,例如:直接寻址,间接寻址等,只有了解了这些内容以后,你再学指针就比较容易理会,毕竟C语言是一门介于机器语言与高级语言中间的语言,没有一些硬件工作知识是很难领悟它的真谛的。然而事事并非绝对,如果你没有这些知识也不要紧,只要清楚知道以下笔者总结的二点再加上多练习便可:6 |& t! K- 7 4 a5 a p& A+ Q( |* N 1指针是地址变量:它的值有两种:其一是
37、地址,其二是内容。不同的表达方式可以取名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 22 页 - - - - - - - - - 不同的值,这有点象一个家庭地址在不同的场合标识的人物也不同。例如:父母亲在他们的单位所登记的家庭地址就代表他们自己,而你在学校中登记的同样的家庭地址就代表你自己。 % U5 J! Z1 _# T A; R: s 8 W% 2 U w1 ( r& w6 A. o 2指针是可以运算的,它的运算法则与变量是一致的。. A5 I a w/ R+ p.
38、 _. J& 4 N. B _- U A/ h# s. d) f( k: v 另外,在编写一个程序时,除非万不得已,一般不要使用指针变量。 因为指针是比较复杂的,用不好就 “当机”。所以笔者建议各位对于指针只要能看懂就行,当然如果你是准备参加考试的就另当别论了。: N3 L, B5 8 b/ % l9 O: B/ f2 q, K+ n; x$ 9 d Z & a N Q# K) t0 z# x+ ! M四函数 $ m7 L1 a4 l8 _, i k ! 8 A. s: ; G1 h 虽说很多程序语言都有函数这一内容,但笔者觉得C语言的函数是最有魅力的。如果你能完全掌握C语言的函数,那么学习C
39、就不成问题了(C是一门建立在 C语言上,但又不同于C语言的高级程序语言,它增添了很多函数。) 。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。有些朋友认为,程序语言中的函数没有多大用处,其实这并不正确,函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。笔者曾经作过一个比较字符串的实验,用C 语言中的strcmp()函数只要一句话,而自己编写的话30 句话都摆不平,可想而知函数是多么实用呀!, e O7 d, C1 E5 6 y! G 3 0
40、 l9 g 2 n1 B( V 写到这里笔者该告一段落了,下面送一个本人自己用C 语言编写的注册表比较程序给诸位。此段程序的注释请看“/* ,*/ ”后的文字, 程序运行时 (在 DOS模式下)输入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,注意字段与字段之间是有空格的。(compare 是程序名), c/ z3 N/ n0 S5 2 H: g; R! l! w, s2 L0 Q6 J 程序代码: s: : C, N. X2 + ? . l! 5 u% , 8 r( 0 C5 o # include stdio.h /*定义头文件或说包含文件*/ - o3
41、B0 G5 w h# e* m $ # 8 d& x! K3 y5 A main(argc,argv) /*定义带参数的主函数*/ $ z1 O& j6 D! ?* + _, J/ W 0 Q0 E0 u, t4 I; int argc; /*定义参数类型 */2 F9 F. $ # U% d; / k char *argv; /*定义第二参数类型*/ , 0 f+ x5 N9 | FILE *fp1,*fp2,*fp3; /*定义文件指针 */ / $ 9 w, U5 i/ Q; H6 a char a,b; /*定义字符变量 */2 n 0 d4 D1 h* t: S if(fp1=fop
42、en(argv1,r)=NULL) 4 i1 E. l0 E) o& Y% - z /* 打开第一的注册表备份文件,如果不存在则跳出程序并显示“ The file dont open!”*/ - W; - u$ C * n3 # g printf(The file dont open!);! A; f! k - S exit(0); C8 V: Y* j! m. A( M$ 9 c 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 22 页 - - - - - - - -
43、- if(fp2=fopen(argv2,r)=NULL) /* 打开第二的注册表备份文件,如果不存在则跳出程序并显示“The file dont open!”*/ 3 Z0 m, G1 p* u7 E( m f printf(The file dont open!); ! g N1 M ? i6 A+ J exit(0); 5 w1 b- s& W5 L E if(fp3=fopen(argv3,w)=NULL) /*建立新的文本文件,用于存放比较结果。*/ # A% N) a2 K8 h& A8 S printf(The file dont open!); c6 b R! ; v2 f3
44、e- B exit(0);9 Z# Z5 C( T7 T! B6 G rewind(fp1); /* 规定文件指针fp1 指向第一个注册表文件头部*/ r* % M8 f: z/ E2 v rewind(fp2); /*规定文件指针fp2指向第二个注册表文件头部*/ d _1 N4 E$ J8 t ?8 a while(!feof(fp1)|!feof(fp2) /*开始比较 */ 3 t J5 E/ 0 X |- c* d a=fgetc(fp1); /*读取第一个注册表文件内容并赋予给字符变量a*/ 4 V* b! W0 3 ( t+ W. J5 Q b=fgetc(fp2); /*读取第
45、二个注册表文件内容并赋予给字符变量b*/ 6 B9 B5 w5 ; w8 n if(a!=b) fputc(b,fp3); % l: F. N3 4 c /* 字符变量a 与 b 不相同的话,那么把不同之处写入新建的文本文件中 */8 t2 d3 K: . ?: A+ V5 O if(feof(fp1) fputc(b,fp3); 2 h4 T, J1 p1 _5 x 0 b /* 如果第一个注册表文件已经读完,第二个文件还有未读取部分,那么把第二个文件的剩余部分全部写入新建文件中*/& o3 D$ S$ k ?6 K if(feof(fp2) fputc(a,fp3); /* 如果第二个注册
46、表文件已经读完,第一个文件还有未读取部分,那么把第一个文件的剩余部分全部写入新建文件中*/ 8 y8 Z; c$ h* Y+ ) m fclose(fp1); /*关闭第一个注册表文件*/ 4 z& z* * o0 g2 d* q. Y1 fclose(fp2); /*关闭第二个注册表文件*/6 F$ p v6 g. o% W- j# | fclose(fp3); /*关闭新建文件 */ ) w6 s; F0 E/ a6 B2 K& O4 K% - W3 k, Q- t/ Y4 Q8 z, . + J- P9 b! j5 G Y 对于高深莫测的C语言来说,寥寥3 千字并不能说清楚的什么问题。但
47、只要您看了此文后,我想对于您学习此语言一定有很大的帮助,同时也能了知晓如何用最短的时间学会C语言以及掌握C语言的精髓所在。另外,此文中所涉及的知识点都是笔者通过实践得出的,因此若是其他专业书籍没有讲到过的问题可以参考本文。最后祝大家学习C语言顺利!今天,我能够自称是一个混IT 的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德 . 香农和约翰 .冯 . 诺依曼, 是他们发现了所有的数字化信息,不论是一段程序,一封 email ,一部电影都是用一连串的1 和 0 进行编码的;是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作。建议大家在心里默念三遍他
48、们的名字,以示仰慕。当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了。C 语言程序设计是我们的专业基础课,但是C 语言本身却是一个非常强大的工具,它是到目前为止最为广泛使用的工具,并且在可以预见的将来,它仍然是皈依为程序员的人们心中的神器。这个工具作什么的呢?它在人和机器之间建立了一个交流的平台。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 22 页 - - - - - - - - - 某天,你需要完成一个求100 的阶乘的作业,于是你搬来一个最
49、新的电脑,为它安装了最新的 windows vista操作系统,然后坐在它的身前,喊“喂电脑,给我计算100 的阶乘”,电脑说“ ok, wait a moment” ; 过了一会,一盘香菇小白菜端了上来!呵呵,电脑不是waiter, 你喂它它是不会有反应的,如果你真的wait a moment, 恐怕你就需要wait one more moment了!一万年后,人们就把你命名成“望夫崖”。既然电脑不是伺应生,听不懂我们的话, 那么我们要怎么控制它呢?如果你们给我装聋作哑,我会告诉你期末挂了你,哦,你立马老实了!对于电脑,我要怎么才能使唤它,让它为我工作呢?不错,我们有个强力工具,C语言!好,
50、我们把上面的场景复习一下:你要我算100 的阶乘,于是我去机房上机,编写了一个程序:( 参加 ppt.) 运行程序,哦,结果出来了!有人认为,现在是java 和.net的时代,有谁还需要C以及汇编呢?孰不知,java 和.net是建立在软件之上的,是为了垄断市场而建立起来的体系,犹如挖好一个金壁辉煌的坑,请你往下跳,还自以为站在巨人的肩膀上,事实上成了坑底之蛙。要成为一个真正的程序员,并期望成为一个程序员高手,必须从机器出发,从cpu 到操作系统,再到软件体系,高手的境界就是悟道后的明镜灵台,软件设计出神入化,我就是程序,程序就是我。听完我讲高手的境界,于是乎你很受感动,说:我要努力学习,向高