第一篇:怎样学习C语言
一,怎样学习C语言
很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程庌輌这简直就是天方夜谭。为什么C语言如此重要呢?
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。
第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。
第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。
那么究竟怎样学习C语言呢?
1:工欲善其事,必先利其器
这里介绍几个学习C语言必备的东东:
一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。
一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。
除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。
2:葵花宝典
学习计算机语言最好的方法是什么?答曰:读程序。
没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。
3:登峰造极
写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。
是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的人研读此书。
二,语言学习方法
谈谈偶的学习方法,抛砖引玉!
学习不论讲不讲方法,最终都能学会。但是别人1个月学会了,而你却100年才学会,这不就晚了么?:)所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。
什么才是学习C语言的捷径?我的答案是看书。书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书当然要看好书,只有好书才营养丰富。假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如《C语言之四书五经》中介绍的4本。(虽然这些书很多已经绝版了,但我相信电子版也是很有益处。况且,如果你真的想看,我相信你一定有办法搞的到。)这些书你会在很短的时间内看完(比如一两个月),这取决于你的基础和悟性。之后要看那些书呢?我不妨再列几本。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 Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。读书破万卷,coding如有神。总而言之,就如《传》中云:“生而知之者,上也;学而知之者,次也;困而学之又其次也。”我们不能总是因困而学之,而要做到兵马未动,粮草先行。
看书是学习的导向,书中能一一介绍清楚概念,但书却不能把应用的细节一一介绍给你,因为应用总是招数繁复,变化多端。因此我们要想熟悉招数,懂得书中所讲怎么使用,还要多读源码。Linus给别人解答问题的时候,常说Read the ****ing source code;候捷也在其文中提到“源码之前,了无秘密。”这就是大师的箴言呀。源码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。可以说高手的经验大都是源自代码。源码和书一样,也是要看好的,不要看差的。在此,我推荐看Linux kernel source code 和 Linux tcp/ip source code。这两套代码都是开源的,垂手可得。此外,还可以配合着Andrew S.Tanenbaum的《操作系统的设计与实现》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux内核 源代码情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux设备驱动程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP详解(3部)》(TCP/IP Illustracted)、W.Richard Stevens《UNIX环境高级编程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的内容)等书来看,方便的很当然程序不是看出来的,是写出来的。我高中的时候每天坚持写6个小时程序,《数据结构》和排列组合、图论方面的习题反复做了N遍。到现在虽然已经时隔五六年,很多内容早已淡忘掉,但却培养了我很强的编码能力和调试能力,直到现在还对我的工作有很大的帮助。
学习忌贪多、忌浮躁、忌急功近利、忌目中无人。把学习计划放的长一些,培养一个好的学习方法,一步一步慢慢走,终能成为高手
下面是本人自己总结的方法。本人感觉只要你肯花时间。学好应该没问题。
《C程序设计》的内容很丰富,一般选谭浩强老师编写的教材,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?
不要说在家里自己学看着书这种方法.个人觉得完全是自欺欺人.而且你没有基础根本就学不到什么东西.不管你多用功!这种东西必须先入门!这才是最快的方法.起电脑学校培训去吧,他们教不到你什么东西,就是教你最快的入门跟编程基础,真真的你想靠IT致富的话,起码要有3年以上的工作经验再说!出了学校门,找个IT公司进去当”苦力”.跟着老师傅做几年项目,培养点工作经验!能独立完成业务了!你就离有房有车的日子不远了!前提是你必须好好在单位搞几年.
但是我没有银子,也没有关系怎么快速入门。建议大家可以看着书加上详细的视频教程学习是目前最好的方法,主要省钱还高效。可以从百度里面搜索“理想视频教程网”,自我感觉这个网的内容学习起来还可以,讲的比较系统。
最后,学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。下面是本人自己总结的方法。本人感觉只要你肯花时间。学好应该没问题。
《C程序设计》的内容很丰富,一般选谭浩强老师编写的教材,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?
不要说在家里自己学看着书这种方法.个人觉得完全是自欺欺人.而且你没有基础根本就学不到什么东西.不管你多用功!这种东西必须先入门!这才是最快的方法.起电脑学校培训去吧,他们教不到你什么东西,就是教你最快的入门跟编程基础,真真的你想靠IT致富的话,起码要有3年以上的工作经验再说!出了学校门,找个IT公司进去当”苦力”.跟着老师傅做几年项目,培养点工作经验!能独立完成业务了!你就离有房有车的日子不远了!前提是你必须好好在单位搞几年.
但是我没有银子,也没有关系怎么快速入门。建议大家可以看着书加上详细的视频教程学习是目前最好的方法,主要省钱还高效。可以从百度里面搜索“理想视频教程网”,自我感觉这个网的内容学习起来还可以,讲的比较系统。
最后,学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
最近,老有的网友提问如何学习C语言,因此从网上搜索了一些文章,希望对大家有所帮助 & g-e& h8 G: V;q& R# J;V)p, s4 Q1 M“ l M
谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手!”,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是,C语言犹如“少林武功”一般博大精深,太难学了。其实就笔者认为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/ } 就个人感触,无论学习哪门语言首先应该了解一下自己所学语言的背景,也可以说它的发展史。
/ 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.兼备高级语言与低级语言的优点,属于一种中间语言。, 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 x' |(s$ L& T% F$ w 二.二大语系二种不同的学习方法7 ~# M 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等,此类语言同样具有相似的函数调用,程序语句书写以及循环控制,但与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 Qj3 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.h”7 S6 U: C' T u0 G!g$ V)v main()# }% z3 ]7 G' r2 u7 E# }5 R8 J { % D9 H6 @3 }7 l-d: U# ? float a[2][3],x;0 M)w0 V0 o: |$ f)^ int i,j;' a: R7 m/ }% ~9 C for(i=0;i<2;i++)* z0 r% |: |, j!]
for(j=0;j<3;j++)4 D!f.|(C& I& M!H
{scanf(“%f”,&x);' }7 O4 e4 _9 j.U+ d
a[j]=x;} X: y.@7 `# s“ R7 C
}2 `6 K-m7 C4 R!f3 ^4 c1 D 不能写成:!@4 K* O* _/ t' X% ^ 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 a[2][3];* `!q“ t;R ^1 N+ z, y7 H int i,j;' I” [(t$ {.I5 F for(i=0;i<2;i++)5 m7 I/ I-B7 O.c# Q
for(j=0;j<3;j++)4 c3 J7 m5 T# D* C
scanf(“%f”,&a[j]);._(e8 {$ |(o } “ H.`, })U% q/ v: k 9 V8 }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 b[3];1 N+ w' a1 b9 G6 y$ S
int x;' g;e6 K7 S/ l-y% i6 z }a[2];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;i<2;i++)$ I)B: K0 |+ T5 r
for(j=0;j<3;j++)' W: o0 ]2 d/ y* ~)i7 c7 M)i
{scanf(“%f”,&x);: y7 y+ E)S# J j“ w4 ]$ ~+ B
a.b[j]=x;} 5 x+ X;} R(f9 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语言的输出格式之复杂程度。因此大家在学习它时千万要学会辨别输出格式中“%”后的字符,每个字符都有其意义,也都有其作用。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语言中的优先级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。例如条件表达式:条件?结果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语言中的指针是最有特色的,当然也是最难学的。指针说穿了,其实是变量的一种表现形式,只不过这种变量记载的不是数值而是地址。就象一个人可以用姓名来表示自己,也可以用身份证号码来表示自己一样。笔者涉足编程已经有三年多了,在这期间曾经收到过很多网友的电子邮件询问学习指针的方法。就本人感触,学习指针最好是先学些计算机硬件工作的原理,例如:直接寻址,间接寻址等,只有了解了这些内容以后,你再学指针就比较容易理会,毕竟C语言是一门介于机器语言与高级语言中间的语言,没有一些硬件工作知识是很难领悟它的真谛的。然而事事并非绝对,如果你没有这些知识也不要紧,只要清楚知道以下笔者总结的二点再加上多练习便可: 6 |& t!K-}7 [ }4 a5 a” p& A+ Q(|* N
1.指针是地址变量:它的值有两种:其一是地址,其二是内容。不同的表达方式可以取不同的值,这有点象一个家庭地址在不同的场合标识的人物也不同。例如:父母亲在他们的单位所登记的家庭地址就代表他们自己,而你在学校中登记的同样的家庭地址就代表你自己。% U5 J!Z1 _# T A;R: s W% }2 U w1 ](r& w6 A.o 2.指针是可以运算的,它的运算法则与变量是一致的。.A5 I' a w/ R+ p._.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++就不成问题了(C++是一门建立在C语言上,但又不同于C语言的高级程序语言,它增添了很多函数。)。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。有些朋友认为,程序语言中的函数没有多大用处,其实这并不正确,函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。笔者曾经作过一个比较字符串的实验,用C语言中的strcmp()函数只要一句话,而自己编写的话30句话都摆不平,可想而知函数是多么实用呀!, e' O7 d, C1 E5 ^6 y!G 3 ]0 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( C5 o # include “stdio.h” /*定义头文件或说包含文件*/W;`-u$ C' `* n3 @# g
{ printf(“The file don`t open!”);!A;f!k' [-S
exit(0);}“ C8 V: Y* j!m.A(M$ [9 c
if((fp2=fopen(argv[2],”r“))==NULL)/*打开第二的注册表备份文件,如果不存在则跳出程序并显示
“The file don`t open!”*/ 3 Z0 m, G1 [' p* u7 E(m f
{ printf(”The file don`t open!“);!g N1 M” ?“ i6 A+ J
exit(0);} 5 w1 b-s& W5 L E
if((fp3=fopen(argv[3],”w“))==NULL)/*建立新的文本文件,用于存放比较结果。*/ # A% N)a2 K8 h& A8 S
{printf(”The file don`t open!“);c6 b R!~;v2 f3 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);/*读取第二个注册表文件内容并赋予给字符变量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);} /*如果第二个注册表文件已经读完,第一个文件还有未读取部分,那么把第一个文件的剩余部分全部写入新建文件中*/ 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% @}-什么得有多
令你不
耐烦恼了..(不好意思,这是我个人认为的)所以我今天晚上就会写这篇文章的,希望能
给初学
者们一个我学了c语言之后的心得体会,也别象我朋友那样要放弃,买了那本书,无论多
厚.都要
啃下去,我是一个曾经被别人说过我是不该学c语言的那块料的,当然..我不是因为这
句话去生 气,把怒火化为当是自己的鼓励,时时刻刻记住你为什么要学习它?你为什么不学习其它 的?这
样,你就会知道一个程序员的生活是多么的无聊了.那你看到这里,你还想什么呢?想学
就去该学 的,在这里我推荐你们买书的时候记得买老潭(潭浩强------清华大学教授牛淫)的书,买本学习本,花不了多少钱,我记得是30多块,不过我第一次买的时候买错了,买了一本入门后 的高级程
序员学习的,所以我在这里推荐一下,希望大家别象我这么傻..5555,还有,买多少书,一定要看完 ,别只买了就不看.还有一些天天黑站的人,他们以为这样是在提高自己的技术证明是没
有差,觉得
很神气,其实不是的,你学到这些入侵网站的,学习ddos,学习远程控制,盗QQ,刷四钻,对你将来有
什么好处的呢?假如你认为你可以把这些传授给自己的儿子学的话,那你可以学吧,世界
第一黑客
——凯文.米特尼克被公认为世界第一黑客,你们想一下,年仅15岁的米特尼克闯入了
“北美空中
防务指挥系统”的主机内,和另外一些朋友翻遍了美国指向前苏联及其盟国的所有核
弹头的数据
资料,然后又悄无声息地溜了出来,Kevin的黑客生涯到其后来入狱时差不多就有15
年之久。他 的作案时间之长、作案次数之多、破坏力之大,他的技术之精、经历之传奇,都让全
世界为之震
惊,也使电脑警察们汗颜„„有什么用么?你说一下他的头脑如果不入狱的话这15年里
可以赚到
多少钱?可以学到什么东西?还是你根本就想进去看看里面是什么样的?还是你也想学一
下”越狱"?
我觉得,有机会去了解一下什么是windows的核心技术,什么是linux的核心技术才好,不学的话你
永远不知道它是什么来的,学了的话你起码会成熟很多,只要你知道你曾经是会玩嗅探,是会入侵,知
道有这么一回事就可以了,不需要去证明什么技术.总结.选定一门你想学的语言就啃定它,别放弃,永远也不要觉得自己懂一点就算是程序员了,你写出的程序就可以知道你是不是程序员了...
第二篇:应该怎样学习C语言?
应该怎样学习C语言?
很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序,这简直就是天方夜谭。为什么C语言如此重要呢?
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。
第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。
第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。那么究竟怎样学习C语言呢?
1:工欲善其事,必先利其器
这里介绍几个学习C语言必备的东东:
一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。
一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。
除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,考试#大提示就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。
2:葵花宝典
学习计算机语言最好的方法是什么?答曰:读程序。
没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。
3:登峰造极
写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算
法)。
是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的人研读此书。
第三篇:究竟怎样学习C语言?心得。。
究竟怎样学习C语言?心得。
来源:异度空间
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。
第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。
那么究竟怎样学习C语言呢?
1:工欲善其事,必先利其器
这里介绍几个学习C语言必备的东东:
一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。
除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。
2:葵花宝典
学习计算机语言最好的方法是什么?答曰:读程序。
没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。
3:登峰造极
写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。
是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的人研读此书。
===============================(二)
关于C语言的学习方法
本人偶然发现了这篇文章拿来和大家分享!
初学C语言的同学应该首先了解C语言关键的核心概念(结构化、三个执行流程、优先级、指针、文件、共用体、函数、作用域、重载等),只有弄明白了这些才能在今后的学习中游刃有余的把握C语言的精髓。这几个概念就像逻辑线一样,把整个C语言的体系贯穿起来,给人一种“结构化”的思想体系。下面我简要谈一下这几个核心概念。
1、从宏观角度来看,结构化是C语言的编程思想基础,就是说C语言每一个功能模块就是一个结构,每一个结构实现一个运算或一个算法,这个结构就用大括号表示“{ }”,大括号里面的就是算法。尤其注意的是大括号的“}”括在那里,就决定在哪里结束算法功能。这些是初学者经常犯的错误,往往会把算法功能的结束点弄错。
2、三个执行流程就是顺序流程、条件流程、循环流程。三个流程都是计算机通用的执行流程,是必须了解的流程,每一个算法都基于这三个流程执行顺序。
3、优先级是对多个函数并列时候优先算法的特权,没有注意优先级的顺序就会把算法出错,这些优先级是必须记住的。
4、指针是C语言的重要特点,是对运算速度加快运算的重要精髓。它是对数据地址的操作,而不是对数据的操作。
5、文件和共用体是很简单的概念,不用多说了。文件顾名思义和日常概念一样,学过数据软件的都对共用体了解不是太难。
6、从微观角度来看,函数是C语言的驱动机制,所有的语句都由函数驱动来实现的。记住函数命令和相关的配置参数,就能好好的利用C的优势。注意的是,函数不能记错,不然你将得出错的结果。如果能学会调试,那就会更深一层了解函数功能的作用。
7、作用域就像使用期限一样,说明从那里到那里所起的作用,在这之外的就不起作用了(过期的东西就不值钱一样)。把握好作用域的使用方式,就能明确函数的关系,不会在巨大的函数名里面迷失方向。
8、重载就是为了方便用户,使用类似于调用的机制给用户减少写入时间的功能。就像查字典一样,你不懂一个字,就要去查字典(相当于调用别的工具来实现你要做的事),而查字典是你已经学会的东西,就可以做这件事了。
学习C语言从大体上了解还不够,要把各种原理在脑海里模拟一遍,实现把计算机C的功能在人脑里运作,就能从宏观上把握C的步骤。
**************************************************************************
(三)好的文章大家共同分享
引言:
最近看见一些朋友问如何才能学好C/C++,有的也发邮件来询问我.我现在也不能算个牛人,但我觉得自己学的还是比较对路.做为斑竹,也有义务与大家探讨这些问题,一是为了我们这个版,二更是为了大家能够少走弯路.我就结合自己的经历,来谈谈我对学习C/C++的看法.我的历史:
1.大一下,C语言必修,开始接触C,以后2年多都是用DOS下的TC.书嘛,课本:(潭浩强)
2.大3,忘了哪个学期,C++选修课,没怎么听,就学了些基本的语法.还是继续用C.3.大概是大学最后一年的样子,做一些课程的上机作业,用到一些数据结构,开始用C++的模板类.也可能觉得C++比较时髦,那个时候不管什么东西都故意写成类,所以就渐渐熟了.4.做毕业设计,才开始使用VC,主要是发现它的调试环境比TC好.5.毕业了,这个时候只会纯C/C++语言,连lib,dll,ocx,以及MFC,API,SDK什么的听都没听说过.我唯一的优点大概就是代码写的比一般人多,那是因为他们都不是自己写的缘故.整个大学4年,就2本C和C++的教材,学校发的.也没有找什么东西来做,除了帮一个读夜大的完成过一次作业,都是学校里各课程布置的作业.有的人说学校里教的没用.我不同意,至少我觉得自己学的都很有用,都是学校里开的课.我这个人比较懒,不喜欢找东西去学,但我保证做好自己分内的事,老师教什么,我就学什么,完成作业算数.我的导师说过一句话:如果人人都做好自己的事,那么这个社会就不需要雷锋.6.然后我就工作了,工资也不高,一般的软件公司.找工作的时候,我就把成绩单一贴,再把自己以前写的比较好的作业来个截图,就OK了.什么自荐信,我后来发现别人更本就不看!我没得过什么奖励,就参加过一次竞赛,来最低等奖学金都没有.有些课不感兴趣,也混个及格,但有些学的的确是不错,和软件相关的这些课分数都比较好.找工作主要还是看成绩的.也没考过什么认证,现在也没有.刚开始的时候,我连lib都不会写的,就会写代码,因为我是数学专业的,软件开发这方面没什么接触,以前都是做些算法,写个老长老长的main完事的那种.什么东西都要新学.7.但我学的很快,认为是因为我的基础比较好,现在什么MFC,API,SDK,ADO之类的都懂一些了,而且觉得是掌握了OO,是公司里的一个牛人教我的.我从和他半年多的交流中,逐渐领悟了OO的奥义,C++真是博大精深啊!可惜那个人后来走了.8.这么多废话,其实很简单:
2年C
一年C++,3年只懂语言
1年工作,学会其它的东东
瞧我水吧,和我比你是不是要优越多了呢?
到今天我对自己的总体评价还是满意的.我知道,可能我还不如一些在校的学生,但我和自己比,在我从事的事业上,还是对路的.有一句话,要送给大家:勤以致学,学以致用.我认为自己有一个最突出的优点,就是:认真!这是现在很多人都缺少的,我做什么事都认真,包括打游戏,要么就干脆不做,要做就要做到最好.或许你的技术和知识都很有限,但只要你把你所掌握的东西发挥到极限,那也不能算比别人差.因为你和别人的差距,只是别人比你多知道一些而已,而这些你迟早都会知道的.有的人问,应该学写什么,有的人答,看你做些什么.我想不是,你没有选择任
务的权利,除非你自己是老板.我对自己的评价是:劳动力,合格的劳动力,可以完成任何事的劳动力.我遇到的很多事都是自己不懂的,但我知道通过什么途径可以学习,在多长的时间内就可以完成,所以遇到新问题,我一点也不恐惧.而且,在学生的时候,我就把自己当作一名程序员,而且是一名真正的程序员!什么才是真正的程序员?我就是,我拥有一个程序员的骄傲,我认为自己写的程序是最完美的,如果不是,那至少是尽我所知的所有手段的最佳结果.知识的匮乏可以用时间类弥补,但一个人的品格却要贯穿始终.因为知道的少而水平烂,那你总有一天可以知道的多而水平高,如果是因为不用心而水平烂,那你一辈子烂到底!另外,基础知识很重要,语言知识工具而已.在工作中,我发现学校里的许多课程都是很有用的:数据结构,操作系统,算法,代数,运筹学,信息论,软件工程.我是学数学的,数学课程学的比较多,我也是赚了这个的便宜,我的研究方向是数字图象处理,所以我的专业知识都比一般人好.有的人开发工具用的挺麻溜的,但是算法几乎不懂,那永远掌握不了核心的技术,一辈子打字员.就象降龙十八掌,洪七公说打出去十分,体内就要留二十分.我认为开发工具就是掌法,基础知识就是内功啊!
有的人总在问,学什么好,学什么有用,先学什么,后学什么.我想说:好不好,有没有用,你用用就知道.不会因为你学会了一样东西而死掉了的.最后是我总结的一些经验:
1.自己编程
2.看书可以通过考试,但成不了程序员.3.基础知识比语言重要.4.少抱怨教育体制,多学些本事.5.不要为了钱和工作学习.6.不要因为感时髦而学习编程.7.认真,负责,自信,谨慎:
认真:学习和写代码的过程要认真,编程是要全身心投入的.负责:要对自己写的代码负责,要终身维护自己的代码,因为那是你的孩子.自信:相信自己的能够写出好的代码,相信自己的代码是最好的.谨慎:思考问题和编码要谨慎,不要想当然,每一行都要细细揣摩.
第四篇:怎样学好c语言
C语言
C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年 由 肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。后来于1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。1980年代至今的有关程式开发工具,一般都支持符合ANSI C的语言
那怎样才能学好C语言呢?
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。
第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的indows, Unix, Linux, Mac, os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。
第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。
那么究竟怎样学习C语言呢?
1:工欲善其事,必先利其器
这里介绍几个学习C语言必备的东东:
一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。
一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。
2:葵花宝典
学习计算机语言最好的方法是什么?答曰:读程序。
没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。
3:登峰造极
写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。
是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的人研读此书。
这里有简单的C程序介绍
为了说明C语言源程序结构的特点,先看以下几个程序。这几个程序由简到难,表现了C语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个C源程序的基本部分和书写格式。
【例1.1】
main(){
printf(“世界,您好!n”);}
l
main是主函数的函数名,表示这是一个主函数。
l
每一个C源程序都必须有,且只能有一个主函数(main函数)。
l
函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。
l printf函数是一个由系统定义的标准函数,可在程序中直接调用。C语言常用指令 1.I/O函数
(1)scan f函数:
int scanf(const char *format…..);
从标准输入流stdin中按格式format将数据写到参数表中;若操作成功,返回写到参数表中的参数个数,否则返回EOF;
(2)printf 函数:
int printf(const char *format,...);printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.2.数学函数(1)求绝对值
double fabs(double);int abs(int);
(2)floor函数:返回不大于参数的整数
float floor(float);
(3)ceil函数:返回不小于参数的整数
float ceil(float);
(4)pow:返回X^Y;
double pow(double x,double y);
(5)sqrt:返回x的开方 double sqrt(double x);
(6)log2,log10:返回底数的自然对数值
double log2(double x);double log10(double x);
3.字符串处理函数
(1)char *strchr(const char *str,int ch);
返回str中第一次出现字符ch的位置指针,否则返回NULL;
(2)char *strstr(const char *str1,const char *str2);
返回str1中第一次出现str2的位置指针,否则返回NULL;
(3)int stricmp(const char *str1,const char *str2);
忽略字符的大小写进行比较
(4)int strncmp(const char *str1,const char *str2,int count);
将str1前n个字符与str2的前n个字符进行比较
(5)char *strncpy(char *str1,const char *str2,int count);
将str2的前n个字符复制到str1中
(6)char *strrev(char *str);
将字符串str逆序,并返回逆置后的结果
4.常用使用函数
(1)double atof(const char *str);
将字符串str表示的数转换成浮点数
(2)int atoi(const char *str);将字符串str表示的数转换成整数
请理解以下知识: #include 包含头文件
#if 条件
#else 否则
#elif 否则如果
#endif 结束条件
#ifdef 或 #if defined 如果定义了一个符号, 就执行操作
#ifndef 或 #if!defined 如果没有定义一个符号, 就指执行操作
#define 定义一个符号
#undef 删除一个符号
#line 重新定义当前行号和文件名
#error 输出编译错误 消息, 停止编译
#pragma 提供 机器专用的特性,同时保证与C++的完全兼容
这些是预处理的命令,只能你理解的不是很全,有时别的文件已经编译过了,我们不需要再编译一次,因为那是很痛苦的,所以为了效率,我们就可以用预处理的方法来搞定,处理过的不处理,没处理过的搞定它 | 评论
第五篇:c语言学习
一门新的语言学习(和C没啥关系!真的。);
2.看《Thinking In C++》,不要看《C++变成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;
4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
6.会用Visual C++,并不说明你会C++;
7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;
8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;
9.看Visual C++的书,是学不了C++语言的;
10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
17.C++不仅仅是支持面向对象的程序设计语言;
18.学习编程最好的方法之一就是阅读源代码;
19.在任何时刻都不要认为自己手中的书已经足够了;
20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;
21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
26.请看《程序设计实践》,并严格的按照其要求去做;
27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
31.学习编程的秘诀是:编程,编程,再编程;
32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;
33.记住:面向对象技术不只是C++专有的;
34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
35.把在书中看到的有意义的例子扩充;
36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
39.C++语言和C++的集成开发环境要同时学习和掌握;
40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
46.记录下在和别人交流时发现的自己忽视或不理解的知识点;
47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
48.保存好你写过的所有的程序——那是你最好的积累之一;
49.请不要做浮躁的人;
50.请热爱C++!
建议你买本书,书比网上的电子版教程好的多,如计算机届超级权威教授 谭浩强 老先生写的《C语言程序设计(第三版)》,全国发行了700万册,可以说是学C语言的人必看的书,我们大学就用这本书,很适合自学,通俗易懂
建议你学习其它计算机知识时也看他的书,他出的书很多,涵盖面广,每一本都很经典
这里有他的教程word版下载
另外,机械工业出版社的 计算机丛书系列也相当经典,全是翻译国外经典教材,国外计算机发展早,水平比国内高很多,看这些教材事半功倍,推荐(美)Al Kelley Ira Pohl的《C语言教程第4版》
学习程序语言要持之以恒,不浮躁,祝你成功