怎样学习C语言.docx
- 文档编号:8004411
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:24
- 大小:43.45KB
怎样学习C语言.docx
《怎样学习C语言.docx》由会员分享,可在线阅读,更多相关《怎样学习C语言.docx(24页珍藏版)》请在冰豆网上搜索。
怎样学习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语言必备的东东:
一个开发环境,例如turboC2.0,这个曾经占据了DOS时代开发程序的大半个江山。
但是现在windows时代,用turboC有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。
建议使用VisualC++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。
一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编第二版清华大学出版社,此书编写的很适合初学者,并且内容也很精到。
除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。
我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的truboC,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。
还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。
2:
葵花宝典
学习计
没错,读程序是学习C语言入门最快,也是最好的方法。
如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。
当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。
3:
登峰造极
写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。
是不是写出底层程序就是程序设计高手呢?
非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。
这不过是熟悉一些io函数罢了。
那么怎样才算精通程序设计呢?
怎样才能精通程序设计呢?
举个例子:
你面前有10个人,找出一个叫“张三”的人,你该怎么办?
第一种方法:
直接对这10个人问:
“谁叫张三”。
第2种方法:
你挨个去问“你是不是张三?
”,直到问到的这个人就是张三。
第三种方法:
你去挨个问一个人“你认不认识张三,指给我看”。
不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。
刚才这个问题类似于数据结构和算法中的:
Map数据结构,穷举查找和折半查找。
所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。
最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高手的人研读此书。
二,语言学习方法
谈谈偶的学习方法,抛砖引玉!
学习不论讲不讲方法,最终都能学会。
但是别人1个月学会了,而你却100年才学会,这不就晚了么?
:
)所以说,学习还是要讲究方法的。
学习方法正确,事半功倍;学习方法不正确,事倍而功半。
什么才是学习C语言的捷径?
我的答案是看书。
书中所写,是前人数十年经验所写,看十本书序设计语言》(TheC++ProgrammingLanguage)一定要看,这本书里面对于C的一些基础概念的定义,比我见过的其他任何C语言书都要全,都要仔细;BjarneStroustrup的《C++语言的设计与演化》(TheDesignandEvolutionofC++)和DavidR.Hanson的《C语言接口与实现创建可重用软件的技术》(CInterfacesandImplaementationsTechniquesforCreatingReusableSoftware)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。
其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。
读书破万卷,coding如有神。
总而言之,就如《传》中云:
“生而知之者,上也;学而知之者,次也;困而学之又其次也。
”我们不能总是因困而学之,而要做到兵马未动,粮草先行。
看书是学习的导向,书中能一一介绍清楚概念,但书却不能把应用的细节一一介绍给你,因为应用总是招数繁复,变化多端。
因此我们要想熟悉招数,懂得书中所讲怎么使用,还要多读源码。
Linus给别人解答问题的时候,常说Readthe****ingsourcecode;候捷也在其文中提到“源码之前,了无秘密。
”这就是大师的箴言呀。
源码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。
可以说高手的经验大都是源自代码。
源码和书一样,也是要看好的,不要看差的。
在此,我推荐看Linuxkernelsourcecode和Linuxtcp/ipsourcecode。
这两套代码都是开源的,垂手可得。
此外,还可以配合着AndrewS.Tanenbaum的《操作系统的设计与实现》(OperatingSystems:
DesignandImplementation)、毛德操胡希明的《Linux内核源代码情景分析》、JonathanCorbet,AlessandroRubini,GregKroah-Hartman合著的《Linux设备驱程序》(LinuxDeviceDriver,3e)、W.RichardStevens《TCP/IP详解(3部)》(TCP/IPIllustracted)、W.RichardStevens《UNIX环
学习忌贪多、忌浮躁、忌急功近利、忌目中无人。
把学习计划放的长一些,培养一个好的学习方法,一步一步慢慢走,终能成为高手
下面是本人自己总结的方法。
本人感觉只要你肯花时间。
学好应该没问题。
《C程序设计》的内容很丰富,一般选谭浩强老师编写的教材,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。
在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。
当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?
回答又是没有,根本就没听过课,怎么说自己听不懂呢?
相应的根本就没学习,又谈何学的好?
不要说在家里自己学看着书这种方法.个人觉得完全是自欺欺人.而且你没有基础根本就学不到什么东西.不管你多用功!
这种东西必须先入门!
这才是最快的方法.起电脑学校培训去吧,他们教不到你什么东西,就是教你最快的入门跟编程基础,真真的你想靠IT致富的话,起码要有3年以上的工作经验再说!
出了学校门,找个IT公司进去当”苦力”.跟着老师傅做几年项目,培养点工作经验!
能独立完成业务了!
你就离有房有车的日子不远了!
前提是你必须好好在单位搞几年.
但是我没有银子,也没有关系怎么快速入门。
建议大家可以看着书加上详细的视频教程学习是目前最好的方法,主要省钱还高效。
可以从XX里面搜索“理想视频教程网”,自我感觉这个网的内容学习起来还可以,讲的比较系统。
最后,学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题《C程序设计》的内容很丰富,一般选谭浩强老师编写的教材,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。
在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。
当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?
回答又是没有,根本就没听过课,怎么说自己听不懂呢?
相应的根本就没学习,又谈何学的好?
不要说在家里自己学看着书这种方法.个人觉得完全是自欺欺人.而且你没有基础根本就学不到什么东西.不管你多用功!
这种东西必须先入门!
这才是最快的方法.起电脑学校培训去吧,他们教不到你什么东西,就是教你最快的入门跟编程基础,真真的你想靠IT致富的话,起码要有3年以上的工作经验再说!
出了学校门,找个IT公司进去当”苦力”.跟着老师傅做几年项目,培养点工作经验!
能独立完成业务了!
你就离有房有车的日子不远了!
前提是你必须好好在单位搞几年.
但是我没有银子,也没有关系怎么快速入门。
建议大家可以看着书加上详细的视频教程学习是目前最好的方法,主要省钱还高效。
可以从XX里面搜索“理想视频教程网”,自我感觉这个网的内容学习起来还可以,讲的比较系统。
最后,学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。
比如:
在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调最近,老有的网友提问如何学习C语言,因此从网上搜索了一些文章,希望对大家有所帮助
&g-e&h8G:
V;q&R#J;V)p,s4Q1M"lM
谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。
”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手!
”,而且以后若是再自学其他语言就显得轻而易举了。
忧虑的是,C语言犹如“少林武功”一般博大精深,太难学了。
其实就笔者认为C语言并非是“difficult(困难)”的,只要你能理清思路,掌握它的精髓,那么自学C语言是一件非常容易且又其乐无穷的事。
今天本人就与大家一起谈谈如何学习C语言或者说学习C语言应从哪几方面着手。
/E,r)N"~)[
z6e/d's-f*H4@7N!
F1Nc 了解一些基本知识&t.m8J6A:
w
.U5K;S.GG"G,` 一.C语言的背景
5I%\:
h0q;{#s%h
7^+L$[&]&T2X'a/} 就个人感触,无论学习哪门语言首先应该了解一下自己所学语言的背景,也可以说它的发展史。
/z#M"@)p.N6}8g&L/v8x-R/{;C9h+P
C语言属于高级程序语言的一种,它的前身是“ALGOL”。
其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。
C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。
然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。
1987年美国标准化协会制定了C语言的国际标准,简称“ANSIC”,从此以后它便成为一种广泛使用的程序语言。
C语言的优点很多,主要的有如下四点:
/x+Sx%E6S;J
$`.n3J!
^"}1|#N%I 1.兼备高级语言与低级语言的优点,属于一种中间语言。
u'W+D&_8O9^"|$D8a$k
5l*a;B:
p!
K0N)`/{ 2.它是一种结构化程序设计语言,非常适合结构化程序设计。
/]"n8k8J"Y2T)v!
I0n!
{,~
*w-t9M1W0a.r 3.有较丰富的数据类型、运算符以及函数供以选用。
+i3u1m(K:
n0i8L-b
(t7]0C6N$?
0j1e
4.直接与内存打交道,使修改、编辑其他程序与文档变得轻松,简单。
9V3R+K#w3t/I1[:
v$n
7x'|(s$L&T%F$w 二.二大语系二种不同的学习方法7~#MV$X"M3b2s/r:
A
.?
3c0q0])A#O 笔者学习过很多程序语言,例如:
C,C++(C语言的扩展),QBASIC,VB(BASIC的可视化),JAVASCRIPT,JSCRIPT,VBSCRIPT,JAVA,ASP,FOXPRO,PERL等等,就本人实践所得,其实高级程序语言分为两大语系。
一路是以C为主的程序!
j'P4y/E2L/Q,t%F.r6[-U9G1h&c
讲到这里,我想大家对C语言一定有了感性认识吧!
下面让我们再升华一下,全方位亲密接触它。
学习C语言必须从以下四点入手,也就是说,只要你能掌握这四点的内容,那么基本上就大功告成了。
-]9j%W:
l,J!
G5Q
-l*p0d&c8L2B"u
O9P#N*^)M"P2N)e
3p.j(f.Y"j'g:
t+i
亲密接触C语言7i%V#RQ"}7`
Q!
y7n:
Bp:
[-y
一.输入输出w3F"s/l%^)|5{
7x%C0E$~3v0u3W*Q C语言的输入输出是非常严格的,或许在其他程序语言中我们可以不关心这个问题,但在C语言中,我们必须要彻底了解它。
由于篇幅有限,因此笔者不能详谈,有兴趣的朋友可以参考由著名程序语言教授谭浩强先生主编,由清华大学出版社出版的《C程序设计第二版》。
不过这里笔者还是有几点要谈一下。
-j3c"h7a)i%{
1K-`+b%d:
WM7}&s 1.二维浮点数数组的输入0p!
w3y(G-T#x;V-}5@
"z6\;V!
_1Y3h0?
&W
二维浮点数数组的输入(即:
通过键盘给二维浮点数数组赋值)在很多专业书中都没有详细讲过这个问题。
在给二维浮点数数组赋值时一定要先声明一个变量,接着把数值赋予这个变量,最后把变量数值赋予二维浮点数数组赋值。
实例如下:
0Q*q(r8V0G)?
"t&a*Y
3C6N-`5R._;[(w5~%P#include"stdio.h"7S6U:
C'Tu0G!
g$V)v
main()#}%z3]7G'r2u7E#}5R8J
{
%D9H6@3}7l-d:
U#?
floata[2][3],x;0M)w0V0o:
|$f)^
inti,j;'a:
R7m/}%~9C
for(i=0;i<2;i++)*z0r%|:
|,j!
]
for(j=0;j<3;j++)4D!
f.|(C&I&M!
H
{scanf("%f",&x);
'}7O4e4_9j.U+d a[j]=x;}
X:
y.@7`#s"R7C }2`6K-m7C4R!
f3^4c1D
不能写成:
!
@4K*O*_/t'X%^
2s$u+bJ%X"I1h'W)x6o#include"stdio.h"
*\%c'Q#H7{4|"z%cmain()3n6w-d"C.x1u&y*q:
C&L4}
{1f.j2E4A*O
floata[2][3];*`!
q"t;R^1N+z,y7H
inti,j;'I"[(t${.I5F
for(i=0;i<2;i++)5m7I/I-B7O.c#Q
for(j=0;j<3;j++)4c3J7m5T#D*C
scanf("%f",&a[j]);._(e8{$|(o
}"H.`,})U%q/v:
k
9V8}5l&|)@*Eb
同样道理,在结构性浮点数组变量中也一定要按照这种格式输入。
实例如下:
/h(E'j0_.\+q&m2L'N)l&q:
N"w
#include"stdio.h"
5c.D2R-g"qq-_"Q structstudent9` {floatb[3];1N+w'a1b9G6y$S
intx;
'g;e6K7S/l-y%i6z }a[2];
2?
4V;}8A6E4h&G%g5z main()9P,B/x1d5[3G/U1[{
{
9~9r5c:
E#S9z$F floatx;$~n.I!
Z0N;o2`1t#z
inti,j;
0^*G5w7h)`;y.} for(i=0;i<2;i++)
$I)B:
K0|+T5r for(j=0;j<3;j++)'W:
o0]2d/y*~)i7c7M)i
{scanf("%f",&x);:
y7y+E)S#Jj"w4]$~+B
a.b[j]=x;}
5x+X;}R(f9v3p5j }4X.J3Q;c"_.|T:
s$p*I
&E*q:
Y3I/m-V,\!
x1K 2.注意输出格式中“%”后的字符
4Q;\1y9})L-x6x4}.Z5L-W1b-~5o(y2p2k
C语言的输出说复杂不复杂,因为常用的都很简单。
可说不复杂也未必,记得曾在一次等级考前辅导我们C语言的教授讲道:
“如果C语言要考得很难的话,根本不用考什么指针,只要专考输出格式,我想百分之九十九的学生都不及格。
”当时我们无不认同。
从这则事例中可以看出C语言的输出格式之复杂程度。
因此大家在学习它时千万要学会辨别输出格式中“%”后的字符,每个字符都有其意义,也都有其作用。
8P)DE%Z.L#J6`#o
:
k*_*V(v+`'H7G7Y"~ 二.优先级
8|%z4q1r:
|:
I)x4B*Z#Y
#E%L#e'f:
s;\ 说道优先级,有很多朋友都不是很了解或说很模糊。
为此笔者想先通过一个例子让各位有个概念。
什么叫优先级?
比方说,我们在公交车终点站排座队时总会遇到70岁以上的老人不需要排队就能上车的情景,这就是优先级的涵义。
C程序在运行时也象排队坐车一样,首先照顾那些优先级高的运算符,若是优先级相同,那么就象遇到两位(或两位以上)70岁以上的老人那样,让他们依次上车。
但是C语言中的优先级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。
例如条件表达式:
条件?
结果1:
结果2,这种表达式很多朋友都知道,它的作用与IF…ELSE…条件判断语句很雷同,它运算时的优先级就不是按照C语言的规则来完成的。
所以说对于优先级各位编程爱好者一定灵活掌握,不要死记硬背。
3b5f.q!
^2B:
C4E/K
.u*O#D1_9t 三.指针
/E;f4a'I%S6l!
l-@(h'U+A!
V(]7]
就个人认为,C语言中的指针是最有特色的,当然也是最难学的。
指针说穿了,其实是变量的一种表现形式,只不过这种变量记载的不是数值而是地址。
就象一个人可以用姓名来表示自己,也可以用身份证号码来表示自己一样。
笔者涉足编程已经有三年多了,在这期间曾经收到过很多网友的电子邮件询问学习指针的方法。
就本人感触,学习指针最好是先学些计算机硬件工作的原理,例如:
直接寻址,间接6|&t!
K-}7[}4a5a"p&A+Q(|*N
1.指针是地址变量:
它的值有两种:
其一是地址,其二是内容。
不同的表达方式可以取不同的值,这有点象一个家庭地址在不同的场合标识的人物也不同。
例如:
父母亲在他们的单位所登记的家庭地址就代表他们自己,而你在学校中登记的同样的家庭地址就代表你自己。
%U5J!
Z1_#TA;R:
s
8W%}2Uw1](r&w6A.o 2.指针是可以运算的,它的运算法则与变量是一致的。
.A5I'aw/R+p._.J&@4N.B
'_-U'A/h#s.d)f(^k:
v 另外,在编写一个程序时,除非万不得已,一般不要使用指针变量。
因为指针是比较复杂的,用不好就“当机”。
所以笔者建议各位对于指针只要能看懂就行,当然如果你是准备参加考试的就另当别论了。
:
N3L,B5}8b/]%[l9O:
B/f2q,K+n;x$~9d"Z
&a'N'Q#K)t0z#x+[!
M四.函数$m7L1a4l8_,i'k
!
[8A.s:
\;G1h 虽说很多程序语言都有函数这一内容,但笔者觉得C语言的函数是最有魅力的。
如果你能完全掌握C语言的函数,那么学习C++就不成问题了(C++是一门建立在C语言上,但又不同于C语言的高级程序语言,它增添了很多函数。
)。
学习函数的方法是比较简单的,只有两个字“牢记”,即:
牢记函数的功能,牢记函数的用途以及如何输入输出。
有些朋友认为,程序语言中的函数没有多大用处,其实这并不正确,函数从本质上讲是一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 怎样 学习 语言