当前位置:首页 » 编程语言 » c语言开发手册

c语言开发手册

发布时间: 2024-01-31 07:52:43

㈠ 学习c语言 必看的书籍

给C++初学者的50个忠告
1.把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版》

学习程序语言要持之以恒,不浮躁,祝你成功!

㈡ C语言算法速查手册的目录

第1章绪论1
1.1程序设计语言概述1
1.1.1机器语言1
1.1.2汇编语言2
1.1.3高级语言2
1.1.4C语言3
1.2C语言的优点和缺点4
1.2.1C语言的优点4
1.2.2C语言的缺点6
1.3算法概述7
1.3.1算法的基本特征7
1.3.2算法的复杂度8
1.3.3算法的准确性10
1.3.4算法的稳定性14
第2章复数运算18
2.1复数的四则运算18
2.1.1[算法1]复数乘法18
2.1.2[算法2]复数除法20
2.1.3【实例5】 复数的四则运算22
2.2复数的常用函数运算23
2.2.1[算法3]复数的乘幂23
2.2.2[算法4]复数的n次方根25
2.2.3[算法5]复数指数27
2.2.4[算法6]复数对数29
2.2.5[算法7]复数正弦30
2.2.6[算法8]复数余弦32
2.2.7【实例6】 复数的函数运算34
第3章多项式计算37
3.1多项式的表示方法37
3.1.1系数表示法37
3.1.2点表示法38
3.1.3[算法9]系数表示转化为点表示38
3.1.4[算法10]点表示转化为系数表示42
3.1.5【实例7】系数表示法与点表示法的转化46
3.2多项式运算47
3.2.1[算法11]复系数多项式相乘47
3.2.2[算法12]实系数多项式相乘50
3.2.3[算法13]复系数多项式相除52
3.2.4[算法14]实系数多项式相除54
3.2.5【实例8】复系数多项式的乘除法56
3.2.6【实例9】实系数多项式的乘除法57
3.3多项式的求值59
3.3.1[算法15]一元多项式求值59
3.3.2[算法16]一元多项式多组求值60
3.3.3[算法17]二元多项式求值63
3.3.4【实例10】一元多项式求值65
3.3.5【实例11】二元多项式求值66
第4章矩阵计算68
4.1矩阵相乘68
4.1.1[算法18]实矩阵相乘68
4.1.2[算法19]复矩阵相乘70
4.1.3【实例12】 实矩阵与复矩阵的乘法72
4.2矩阵的秩与行列式值73
4.2.1[算法20]求矩阵的秩73
4.2.2[算法21]求一般矩阵的行列式值76
4.2.3[算法22]求对称正定矩阵的行列式值80
4.2.4【实例13】 求矩阵的秩和行列式值82
4.3矩阵求逆84
4.3.1[算法23]求一般复矩阵的逆84
4.3.2[算法24]求对称正定矩阵的逆90
4.3.3[算法25]求托伯利兹矩阵逆的Trench方法92
4.3.4【实例14】 验证矩阵求逆算法97
4.3.5【实例15】 验证T矩阵求逆算法99
4.4矩阵分解与相似变换102
4.4.1[算法26]实对称矩阵的LDL分解102
4.4.2[算法27]对称正定实矩阵的Cholesky分解104
4.4.3[算法28]一般实矩阵的全选主元LU分解107
4.4.4[算法29]一般实矩阵的QR分解112
4.4.5[算法30]对称实矩阵相似变换为对称三对角阵116
4.4.6[算法31]一般实矩阵相似变换为上Hessen-Burg矩阵121
4.4.7【实例16】 对一般实矩阵进行QR分解126
4.4.8【实例17】 对称矩阵的相似变换127
4.4.9【实例18】 一般实矩阵相似变换129
4.5矩阵特征值的计算130
4.5.1[算法32]求上Hessen-Burg矩阵全部特征值的QR方法130
4.5.2[算法33]求对称三对角阵的全部特征值137
4.5.3[算法34]求对称矩阵特征值的雅可比法143
4.5.4[算法35]求对称矩阵特征值的雅可比过关法147
4.5.5【实例19】 求上Hessen-Burg矩阵特征值151
4.5.6【实例20】 分别用两种雅克比法求对称矩阵特征值152
第5章线性代数方程组的求解154
5.1高斯消去法154
5.1.1[算法36]求解复系数方程组的全选主元高斯消去法155
5.1.2[算法37]求解实系数方程组的全选主元高斯消去法160
5.1.3[算法38]求解复系数方程组的全选主元高斯-约当消去法163
5.1.4[算法39]求解实系数方程组的全选主元高斯-约当消去法168
5.1.5[算法40]求解大型稀疏系数矩阵方程组的高斯-约当消去法171
5.1.6[算法41]求解三对角线方程组的追赶法174
5.1.7[算法42]求解带型方程组的方法176
5.1.8【实例21】 解线性实系数方程组179
5.1.9【实例22】 解线性复系数方程组180
5.1.10【实例23】 解三对角线方程组182
5.2矩阵分解法184
5.2.1[算法43]求解对称方程组的LDL分解法184
5.2.2[算法44]求解对称正定方程组的Cholesky分解法186
5.2.3[算法45]求解线性最小二乘问题的QR分解法188
5.2.4【实例24】 求解对称正定方程组191
5.2.5【实例25】 求解线性最小二乘问题192
5.3迭代方法193
5.3.1[算法46]病态方程组的求解193
5.3.2[算法47]雅克比迭代法197
5.3.3[算法48]高斯-塞德尔迭代法200
5.3.4[算法49]超松弛方法203
5.3.5[算法50]求解对称正定方程组的共轭梯度方法205
5.3.6[算法51]求解托伯利兹方程组的列文逊方法209
5.3.7【实例26】 解病态方程组214
5.3.8【实例27】 用迭代法解方程组215
5.3.9【实例28】 求解托伯利兹方程组217
第6章非线性方程与方程组的求解219
6.1非线性方程求根的基本过程219
6.1.1确定非线性方程实根的初始近似值或根的所在区间219
6.1.2求非线性方程根的精确解221
6.2求非线性方程一个实根的方法221
6.2.1[算法52]对分法221
6.2.2[算法53]牛顿法223
6.2.3[算法54]插值法226
6.2.4[算法55]埃特金迭代法229
6.2.5【实例29】 用对分法求非线性方程组的实根232
6.2.6【实例30】 用牛顿法求非线性方程组的实根233
6.2.7【实例31】 用插值法求非线性方程组的实根235
6.2.8【实例32】 用埃特金迭代法求非线性方程组的实根237
6.3求实系数多项式方程全部根的方法238
6.3.1[算法56]QR方法238
6.3.2【实例33】用QR方法求解多项式的全部根240
6.4求非线性方程组一组实根的方法241
6.4.1[算法57]梯度法241
6.4.2[算法58]拟牛顿法244
6.4.3【实例34】 用梯度法计算非线性方程组的一组实根250
6.4.4【实例35】 用拟牛顿法计算非线性方程组的一组实根252
第7章代数插值法254
7.1拉格朗日插值法254
7.1.1[算法59]线性插值255
7.1.2[算法60]二次抛物线插值256
7.1.3[算法61]全区间插值259
7.1.4【实例36】 拉格朗日插值262
7.2埃尔米特插值263
7.2.1[算法62]埃尔米特不等距插值263
7.2.2[算法63]埃尔米特等距插值267
7.2.3【实例37】 埃尔米特插值法270
7.3埃特金逐步插值271
7.3.1[算法64]埃特金不等距插值272
7.3.2[算法65]埃特金等距插值275
7.3.3【实例38】 埃特金插值278
7.4光滑插值279
7.4.1[算法66]光滑不等距插值279
7.4.2[算法67]光滑等距插值283
7.4.3【实例39】 光滑插值286
7.5三次样条插值287
7.5.1[算法68]第一类边界条件的三次样条函数插值287
7.5.2[算法69]第二类边界条件的三次样条函数插值292
7.5.3[算法70]第三类边界条件的三次样条函数插值296
7.5.4【实例40】 样条插值法301
7.6连分式插值303
7.6.1[算法71]连分式插值304
7.6.2【实例41】 验证连分式插值的函数308
第8章数值积分法309
8.1变步长求积法310
8.1.1[算法72]变步长梯形求积法310
8.1.2[算法73]自适应梯形求积法313
8.1.3[算法74]变步长辛卜生求积法316
8.1.4[算法75]变步长辛卜生二重积分方法318
8.1.5[算法76]龙贝格积分322
8.1.6【实例42】 变步长积分法进行一重积分325
8.1.7【实例43】 变步长辛卜生积分法进行二重积分326
8.2高斯求积法328
8.2.1[算法77]勒让德-高斯求积法328
8.2.2[算法78]切比雪夫求积法331
8.2.3[算法79]拉盖尔-高斯求积法334
8.2.4[算法80]埃尔米特-高斯求积法336
8.2.5[算法81]自适应高斯求积方法337
8.2.6【实例44】 有限区间高斯求积法342
8.2.7【实例45】 半无限区间内高斯求积法343
8.2.8【实例46】 无限区间内高斯求积法345
8.3连分式法346
8.3.1[算法82]计算一重积分的连分式方法346
8.3.2[算法83]计算二重积分的连分式方法350
8.3.3【实例47】 连分式法进行一重积分354
8.3.4【实例48】 连分式法进行二重积分355
8.4蒙特卡洛法356
8.4.1[算法84]蒙特卡洛法进行一重积分356
8.4.2[算法85]蒙特卡洛法进行二重积分358
8.4.3【实例49】 一重积分的蒙特卡洛法360
8.4.4【实例50】 二重积分的蒙特卡洛法361
第9章常微分方程(组)初值问题的求解363
9.1欧拉方法364
9.1.1[算法86]定步长欧拉方法364
9.1.2[算法87]变步长欧拉方法366
9.1.3[算法88]改进的欧拉方法370
9.1.4【实例51】 欧拉方法求常微分方程数值解372
9.2龙格-库塔方法376
9.2.1[算法89]定步长龙格-库塔方法376
9.2.2[算法90]变步长龙格-库塔方法379
9.2.3[算法91]变步长基尔方法383
9.2.4【实例52】 龙格-库塔方法求常微分方程的初值问题386
9.3线性多步法390
9.3.1[算法92]阿当姆斯预报校正法390
9.3.2[算法93]哈明方法394
9.3.3[算法94]全区间积分的双边法399
9.3.4【实例53】 线性多步法求常微分方程组初值问题401
第10章拟合与逼近405
10.1一元多项式拟合405
10.1.1[算法95]最小二乘拟合405
10.1.2[算法96]最佳一致逼近的里米兹方法412
10.1.3【实例54】 一元多项式拟合417
10.2矩形区域曲面拟合419
10.2.1[算法97]矩形区域最小二乘曲面拟合419
10.2.2【实例55】 二元多项式拟合428
第11章特殊函数430
11.1连分式级数和指数积分430
11.1.1[算法98]连分式级数求值430
11.1.2[算法99]指数积分433
11.1.3【实例56】 连分式级数求值436
11.1.4【实例57】 指数积分求值438
11.2伽马函数439
11.2.1[算法100]伽马函数439
11.2.2[算法101]贝塔函数441
11.2.3[算法102]阶乘442
11.2.4【实例58】伽马函数和贝塔函数求值443
11.2.5【实例59】阶乘求值444
11.3不完全伽马函数445
11.3.1[算法103]不完全伽马函数445
11.3.2[算法104]误差函数448
11.3.3[算法105]卡方分布函数450
11.3.4【实例60】不完全伽马函数求值451
11.3.5【实例61】误差函数求值452
11.3.6【实例62】卡方分布函数求值453
11.4不完全贝塔函数454
11.4.1[算法106]不完全贝塔函数454
11.4.2[算法107]学生分布函数457
11.4.3[算法108]累积二项式分布函数458
11.4.4【实例63】不完全贝塔函数求值459
11.5贝塞尔函数461
11.5.1[算法109]第一类整数阶贝塞尔函数461
11.5.2[算法110]第二类整数阶贝塞尔函数466
11.5.3[算法111]变型第一类整数阶贝塞尔函数469
11.5.4[算法112]变型第二类整数阶贝塞尔函数473
11.5.5【实例64】贝塞尔函数求值476
11.5.6【实例65】变型贝塞尔函数求值477
11.6Carlson椭圆积分479
11.6.1[算法113]第一类椭圆积分479
11.6.2[算法114]第一类椭圆积分的退化形式481
11.6.3[算法115]第二类椭圆积分483
11.6.4[算法116]第三类椭圆积分486
11.6.5【实例66】第一类勒让德椭圆函数积分求值490
11.6.6【实例67】第二类勒让德椭圆函数积分求值492
第12章极值问题494
12.1一维极值求解方法494
12.1.1[算法117]确定极小值点所在的区间494
12.1.2[算法118]一维黄金分割搜索499
12.1.3[算法119]一维Brent方法502
12.1.4[算法120]使用一阶导数的Brent方法506
12.1.5【实例68】使用黄金分割搜索法求极值511
12.1.6【实例69】使用Brent法求极值513
12.1.7【实例70】使用带导数的Brent法求极值515
12.2多元函数求极值517
12.2.1[算法121]不需要导数的一维搜索517
12.2.2[算法122]需要导数的一维搜索519
12.2.3[算法123]Powell方法522
12.2.4[算法124]共轭梯度法525
12.2.5[算法125]准牛顿法531
12.2.6【实例71】验证不使用导数的一维搜索536
12.2.7【实例72】用Powell算法求极值537
12.2.8【实例73】用共轭梯度法求极值539
12.2.9【实例74】用准牛顿法求极值540
12.3单纯形法542
12.3.1[算法126]求无约束条件下n维极值的单纯形法542
12.3.2[算法127]求有约束条件下n维极值的单纯形法548
12.3.3[算法128]解线性规划问题的单纯形法556
12.3.4【实例75】用单纯形法求无约束条件下N维的极值568
12.3.5【实例76】用单纯形法求有约束条件下N维的极值569
12.3.6【实例77】求解线性规划问题571
第13章随机数产生与统计描述574
13.1均匀分布随机序列574
13.1.1[算法129]产生0到1之间均匀分布的一个随机数574
13.1.2[算法130]产生0到1之间均匀分布的随机数序列576
13.1.3[算法131]产生任意区间内均匀分布的一个随机整数577
13.1.4[算法132]产生任意区间内均匀分布的随机整数序列578
13.1.5【实例78】产生0到1之间均匀分布的随机数序列580
13.1.6【实例79】产生任意区间内均匀分布的随机整数序列581
13.2正态分布随机序列582
13.2.1[算法133]产生任意均值与方差的正态分布的一个随机数582
13.2.2[算法134]产生任意均值与方差的正态分布的随机数序列585
13.2.3【实例80】产生任意均值与方差的正态分布的一个随机数587
13.2.4【实例81】产生任意均值与方差的正态分布的随机数序列588
13.3统计描述589
13.3.1[算法135]分布的矩589
13.3.2[算法136]方差相同时的t分布检验591
13.3.3[算法137]方差不同时的t分布检验594
13.3.4[算法138]方差的F检验596
13.3.5[算法139]卡方检验599
13.3.6【实例82】计算随机样本的矩601
13.3.7【实例83】t分布检验602
13.3.8【实例84】F分布检验605
13.3.9【实例85】检验卡方检验的算法607
第14章查找609
14.1基本查找609
14.1.1[算法140]有序数组的二分查找609
14.1.2[算法141]无序数组同时查找最大和最小的元素611
14.1.3[算法142]无序数组查找第M小的元素613
14.1.4【实例86】基本查找615
14.2结构体和磁盘文件的查找617
14.2.1[算法143]无序结构体数组的顺序查找617
14.2.2[算法144]磁盘文件中记录的顺序查找618
14.2.3【实例87】结构体数组和文件中的查找619
14.3哈希查找622
14.3.1[算法145]字符串哈希函数622
14.3.2[算法146]哈希函数626
14.3.3[算法147]向哈希表中插入元素628
14.3.4[算法148]在哈希表中查找元素629
14.3.5[算法149]在哈希表中删除元素631
14.3.6【实例88】构造哈希表并进行查找632
第15章排序636
15.1插入排序636
15.1.1[算法150]直接插入排序636
15.1.2[算法151]希尔排序637
15.1.3【实例89】插入排序639
15.2交换排序641
15.2.1[算法152]气泡排序641
15.2.2[算法153]快速排序642
15.2.3【实例90】交换排序644
15.3选择排序646
15.3.1[算法154]直接选择排序646
15.3.2[算法155]堆排序647
15.3.3【实例91】选择排序650
15.4线性时间排序651
15.4.1[算法156]计数排序651
15.4.2[算法157]基数排序653
15.4.3【实例92】线性时间排序656
15.5归并排序657
15.5.1[算法158]二路归并排序658
15.5.2【实例93】二路归并排序660
第16章数学变换与滤波662
16.1快速傅里叶变换662
16.1.1[算法159]复数据快速傅里叶变换662
16.1.2[算法160]复数据快速傅里叶逆变换666
16.1.3[算法161]实数据快速傅里叶变换669
16.1.4【实例94】验证傅里叶变换的函数671
16.2其他常用变换674
16.2.1[算法162]快速沃尔什变换674
16.2.2[算法163]快速哈达玛变换678
16.2.3[算法164]快速余弦变换682
16.2.4【实例95】验证沃尔什变换和哈达玛的函数684
16.2.5【实例96】验证离散余弦变换的函数687
16.3平滑和滤波688
16.3.1[算法165]五点三次平滑689
16.3.2[算法166]α-β-γ滤波690
16.3.3【实例97】验证五点三次平滑692
16.3.4【实例98】验证α-β-γ滤波算法693

㈢ 推荐几部学习C#的书籍

1、《C# 5.0 in a Nutshell》:权威的参考书

学习C#的最佳书籍之一。如果你想要获取最新的信息以增长有关C#语言编程的知识,这是最好的选择之一。该书深入浅出地探讨了有关C#语言的知识。不过要想能够充分吸收消化,你需要掌握一些关于C语言的基本知识。总之,这本书绝对能让你获益良多。

全书首先简单地介绍了一下C#语言开发的相关背景,之后马上跳转到数据类型的基本原理。然后用一种系统化的方法讲述编程方面的信息内容。你还可以练习上面写的代码示例,这些示例可以从互联网上免费下载至LINQPAD中。

(3)c语言开发手册扩展阅读:

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。

C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,因此绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。

参考资料:网络-C#

㈣ C语言学习手册的目 录

第1篇 基础篇
第1章 初识C语言 16
1.1 C语言介绍 17
1.1.1 简述编程语言 17
1.1.2 C语言的产生 18
1.1.3 C语言的特点 19
1.2 选择C语言的理由 21
1.2.1 C语言的发展趋势 21
1.2.2 C语言的成功案例 23
1.2.3 C语言的应用领域 25
1.3 如何学好C语言 25
1.3.1 确立学习态度 26
1.3.2 打好基础 26
1.3.3 多请教、多交流 26
1.3.4 养成良好的编程习惯 27
1.3.5 多动手、勤思考 27
1.3.6 掌握学习方法 27
1.4 本章小结 28
第2章 C语言编程准备 29
2.1 编写程序的格式 30
2.1.1 一个简单的C程序 31
2.1.2 标识符与关键字 34
2.2 开发环境 37
2.2.1 Turbo C 2.0 38
2.2.2 Visual C++ 6.0 42
2.3 一个完整的C程序 48
2.4 实战练习 52
2.4.1 编写一个简单的C程序 52
2.4.2 熟悉开发工具 53
2.5 本章小结 53
第3章 C语言的灵魂——算法 54
3.1 算法的基本概念 55
3.1.1 算法的特征 55
3.1.2 算法的优劣 57
3.2 描述算法 57
3.2.1 自然语言 58
3.2.2 描绘流程图 58
3.2.3 绘制N-S流程图 64
3.2.4 伪代码 68
3.3 本章小结 69
第4章 常量和变量 70
4.1 了解数据类型 71
4.2 解读常量 72
4.2.1 整型常量 72
4.2.2 实型常量 75
4.2.3 字符型常量 76
4.2.4 转义字符 80
4.2.5 符号常量 81
4.2.6 情景应用一:用putchar函数输出“I LOVE C” 82
4.2.7 情景应用二:printf函数结合转义字符 83
4.3 变量 83
4.3.1 整型变量 84
4.3.2 情景应用:求出买水果一共花的钱数 86
4.3.3 实型变量 87
4.3.4 字符型变量 89
4.4 掌握混合运算 91
4.5 实战练习 93
4.5.1 使用printf语句输出变量 93
4.5.2 使用字符型变量输出字符串 94
4.6 本章小结 94
第5章 表达式与运算符 95
5.1 解读表达式 96
5.2 赋值运算符与赋值表达式 98
5.2.1 变量赋初值 98
5.2.2 自动类型转换 100
5.2.3 强制类型转换 100
5.3 掌握算术运算符与表达式 102
5.3.1 算术运算符 102
5.3.2 算术表达式 102
5.3.3 优先级与结合性 104
5.3.4 自增自减运算符 105
5.3.5 情景应用:求运算后的4个变量的值 107
5.4 了解关系运算符与表达式 108
5.4.1 关系运算符 108
5.4.2 关系表达式 109
5.4.3 优先级与结合性 110
5.5 解读逻辑运算符与表达式 111
5.5.1 逻辑运算符 111
5.5.2 逻辑表达式 112
5.5.3 优先级与结合性 112
5.6 运用位逻辑运算符与表达式 113
5.6.1 位逻辑运算符 114
5.6.2 位逻辑表达式 114
5.7 介绍逗号运算符与表达式 114
5.8 使用复合赋值运算符 116
5.9 判断条件运算符 117
5.10 了解运算符的优先级和结合性 118
5.11 实战练习 119
5.11.1 使用复合赋值运算符求出计算结果 119
5.11.2 用自增、自减运算符求出计算结果 120
5.11.3 编写简单的计算加班工资程序 121
5.12 本章小结 122
第6章 输入、输出函数 123
6.1 解读语句 124
6.1.1 表达式语句 124
6.1.2 空语句 124
6.1.3 复合语句 124
6.2 输入、输出字符数据 125
6.2.1 输出字符数据 125
6.2.2 输入字符数据 126
6.2.3 情景应用:使用getchar函数取消获取Entet键 127
6.3 输入、输出字符串 128
6.3.1 使用字符串输出函数 128
6.3.2 掌握字符串输入函数 130
6.4 介绍格式输出函数 131
6.5 讲解格式输入函数 134
6.6 应用顺序程序设计 138
6.7 实战练习 141
6.7.1 将输入的小写字符转换为大写字符 141
6.7.2 模拟工资计算器 142
6.7.3 输入、输出古人名言 142
6.8 本章小结 143
第7章 选择结构程序设计 144
7.1 if选择语句 145
7.2 if语句的不同形式 145
7.2.1 单条件单分支的if语句 146
7.2.2 单条件双分支的if语句 149
7.2.3 多条件多分支的if语句 153
7.2.4 情景应用:输入数值检查字符类型 156
7.3 掌握if语句的嵌套形式 157
7.4 注意if语句的常见错误 160
7.4.1 使用分号的注意事项 161
7.4.2 条件放置注意事项 161
7.4.3 if和else的配对注意事项 162
7.4.4 大括号的重要性 162
7.5 判断分支选择switch语句 163
7.5.1 switch语句的基本形式 163
7.5.2 多路开关模式的switch语句 167
7.6 区分if…else语句和switch语句 169
7.7 应用选择结构程序 171
7.8 实战练习 173
7.8.1 计算函数,求出Y值 173
7.8.2 输出三个变量中最大的数 174
7.8.3 计算增加后的工资 175
7.9 本章小结 175
第8章 循环语句 176
8.1 编写循环语句 177
8.2 实现while型循环 177
8.2.1 while循环语句的一般形式 178
8.2.2 情景应用:求出数值内的所有正整数的和 180
8.2.3 避免while循环语句的死循环 182
8.2.4 了解while循环语句的空循环体 183
8.2.5 注意while循环语句常见错误 183
8.3 解读for型循环语句 185
8.3.1 for循环语句的一般形式 185
8.3.2 灵活多变的for循环语句 189
8.3.3 应用for语句中的逗号 192
8.4 介绍do-while语句 193
8.5 比较三种循环 195
8.6 运用循环嵌套 195
8.6.1 各种结构的循环嵌套 195
8.6.2 循环嵌套实例 197
8.7 转移语句 199
8.7.1 goto语句 200
8.7.2 break语句 202
8.7.3 continue语句 203
8.8 区别三种跳转语句 205
8.9 实践练习 205
8.9.1 打印出大写字母的ASCII码对照表 205
8.9.2 打印出小写字母的ASCII码对照表 206
8.9.3 输出0~100之间不能被3整除的数 207
8.10 本章小结 209
第2篇 核心篇
第9章 数组 212
9.1 介绍数组的概念 213
9.1.1 数组的分类 213
9.1.2 数组的维数 213
9.2 应用一维数组 214
9.2.1 一维数组的定义 214
9.2.2 一维数组的引用 215
9.2.3 一维数组的初始化 217
9.2.4 一维数组的应用 220
9.3 掌握二维数组 222
9.3.1 二维数组的定义 222
9.3.2 二维数组的引用 223
9.3.3 二维数组的初始化 223
9.3.4 二维数组的应用 227
9.4 解读多维数组 228
9.5 使用字符数组 229
9.5.1 字符数组的定义 229
9.5.2 字符数组的引用 229
9.5.3 字符数组的初始化 229
9.5.4 字符数组的结束标志 231
9.5.5 字符数组的输出 232
9.5.6 字符数组的输入 233
9.5.7 输出完整的带有空格的字符串 234
9.5.8 字符数组的应用 235
9.6 字符串处理函数 236
9.6.1 字符串的复制 237
9.6.2 字符串的连接 238
9.6.3 字符串的比较 240
9.6.4 字符串大小写转换 241
9.6.5 获得字符串长度 243
9.7 熟练应用数组 245
9.7.1 反转输出字符串 245
9.7.2 使用数组统计学生成绩 246
9.7.3 情景应用:字符串的加密和解密 248
9.8 实践练习 250
9.8.1 实现strcpy函数的功能 250
9.8.2 统计字符中各元素的个数 251
9.8.3 重新排列字符串 251
9.9 本章小结 252
第10章 函数 253
10.1 函数概述 254
10.2 定义函数 256
10.2.1 函数定义的形式 256
10.2.2 定义与声明 259
10.3 了解返回语句 262
10.3.1 从函数返回 262
10.3.2 返回值 266
10.4 传递函数参数 269
10.4.1 形式参数与实际参数 269
10.4.2 数组作为函数参数 271
10.4.3 了解main的参数 276
10.5 调用函数 276
10.5.1 函数调用方式 277
10.5.2 嵌套调用 280
10.5.3 递归调用 282
10.6 灵活应用函数 285
10.6.1 函数的应用 285
10.6.2 情景应用:使用字符函数判断输入字符 290
10.7 实践与练习 292
10.7.1 输出较大的整数 292
10.7.2 求出10个学生的平均成绩 292
10.7.3 验证6174 293
10.8 本章小结 294
第11章 指针 296
11.1 了解指针相关概念 297
11.1.1 介绍地址与指针 297
11.1.2 解读变量与指针 298
11.1.3 使用指针变量 299
11.1.4 指针自加自减运算 303
11.1.5 情景应用:输出整型变量地址 304
11.2 掌握数组与指针 305
11.2.1 一维数组与指针 306
11.2.2 情景应用一:输出数组元素 309
11.2.3 二维数组与指针 310
11.2.4 情景应用二:将一个3行5列的二维数组的
第二行元素输出 313
11.2.5 字符串与指针 314
11.2.6 字符串数组 316
11.3 指向指针的指针 318
11.3.1 应用介绍指向指针的指针 318
11.3.2 情景应用:输出偶数 320
11.4 作为函数参数的指针变量 321
11.5 返回指针值的函数 331
11.5.1 介绍返回指针值的函数 331
11.5.2 情景应用:求长方形的周长 332
11.6 指针数组作为main函数的参数 333
11.7 实战练习 335
11.7.1 将数组中的元素值按照相反顺序存放 335
11.7.2 将两个字符串连接后输出 336
11.7.3 使用指针实现字符串的复制 336
11.8 本章小结 337
第12章 结构体和共用体 338
12.1 应用结构体 339
12.1.1 结构体类型的概念 339
12.1.2 结构体变量的定义 340
12.1.3 结构体变量的引用 342
12.1.4 结构体类型的初始化 344
12.1.5 情景应用:输出学生的信息 345
12.2 掌握结构体数组 348
12.2.1 定义结构体数组 348
12.2.2 初始化结构体数组 349
12.2.3 情景应用:输出学生信息 351
12.3 解读结构体指针 353
12.3.1 指向结构体变量的指针 353
12.3.2 指向结构体数组的指针 356
12.3.3 结构体作为函数参数 358
12.4 介绍包含结构的结构 360
12.5 应用共用体 362
12.5.1 共用体的概念 362
12.5.2 共用体变量的引用 363
12.5.3 共用体变量的初始化 364
12.5.4 共用体类型的数据特点 365
12.6 解读枚举类型 365
12.7 实战练习 366
12.7.1 统计候选人的得票 366
12.7.2 师生信息存储系统 367
12.7.3 计算学生的综合成绩 368
12.8 本章小结 368
第13章 链表与算法 369
13.1 介绍链表 370
13.1.1 链表概述 370
13.1.2 创建动态链表 371
13.1.3 输出链表 374
13.2 进行链表的相关操作 376
13.2.1 链表的插入操作 377
13.2.2 链表的删除操作 380
13.3 运用数组排序算法 384
13.3.1 选择法排序 385
13.3.2 冒泡法排序 387
13.3.3 交换法排序 389
13.3.4 插入法排序 391
13.3.5 折半法排序 394
13.3.6 比较数组排序算法 396
13.4 实战练习 397
13.4.1 链表的删除操作 397
13.4.2 使用选择法排序 398
13.4.3 使用冒泡、交换、插入、折半等算法进行排序 399
13.5 本章小节 399
第3篇 高级篇
第14章 位运算 402
14.1 解读位与字节 403
14.2 掌握位运算操作符 403
14.2.1 “与”运算符 404
14.2.2 “或”运算符 405
14.2.3 “取反”运算符 407
14.2.4 “异或”运算符 409
14.2.5 “左移”运算符 412
14.2.6 “右移”运算符 413
14.2.7 位运算复合赋值运算符 415
14.2.8 长度不同的数据进行位运算 415
14.3 循环移位 416
14.4 什么是位域 418
14.4.1 位域的概念与定义 419
14.4.2 位域相关说明 420
14.5 实战练习 421
14.5.1 求两个数进行“与”和“或”运算后的结果 421
14.5.2 求出一个数“左移”和“右移”后的结果 422
14.5.3 求一个数“循环左移”和“循环右移”后的结果 422
14.6 本章小结 423
第15章 存储管理 424
15.1 内存组织方式 425
15.1.1 了解内存组织方式 425
15.1.2 解读堆与栈 425
15.2 动态管理 428
15.2.1 动态分配一段内存空间——malloc函数 428
15.2.2 动态分配连续内存空间数组——calloc函数 429
15.2.3 改变ptr指针指向空间大小——realloc函数 431
15.2.4 情景应用:使用realloc函数重新分配内存 432
15.2.5 释放分配整型变量内存空间——free函数 432
15.3 内存丢失 433
15.4 变量的存储类别 434
15.4.1 动态存储与静态存储 435
15.4.2 修饰一个局部变量为自动的auto变量 435
15.4.3 声明位置不同、意义不同的static变量 436
15.4.4 寄存器存储类的register变量 437
15.4.5 外部存储的extern变量 437
15.5 实战练习 438
15.5.1 为数组动态分配内存 438
15.5.2 为数组动态分配并释放内存 439
15.5.3 用静态局部整型变量计算3的平方和立方 440
15.6 本章小结 440
第16章 函数类型和预处理 441
16.1 内部函数和外部函数 442
16.1.1 介绍内部函数 442
16.1.2 解读外部函数 443
16.2 灵活使用宏定义 444
16.2.1 不带参数的宏定义 445
16.2.2 带参数的宏定义 446
16.3 编写#include指令 448
16.4 掌握条件编译 450
16.4.1 #if命令 450
16.4.2 #ifdef及#ifndef命令 453
16.4.3 #undef命令 455
16.4.4 #line命令 455
16.4.5 #pragma命令 456
16.5 实践练习 457
16.5.1 求两个数相乘的积 457
16.5.2 从3个数中找出最小数 457
16.5.3 从3个数中找出最大数 458
16.6 本章小结 459
第17章 读写文件 460
17.1 文件概述 461
17.2 掌握文件基本操作 462
17.3 运用文件指针 463
17.4 打开和关闭文件 464
17.4.1 文件的打开 464
17.4.2 文件的关闭 465
17.5 读 写 文 件 466
17.5.1 写字符函数——fputc函数 466
17.5.2 读字符函数——fgetc函数 468
17.5.3 写字符串函数——fputs函数 469
17.5.4 读字符串函数——fgets函数 470
17.5.5 格式化写入函数——fprintf函数 472
17.5.6 格式化读取函数——fscanf函数 474
17.5.7 数据块读写函数——fread函数和fwrite函数 475
17.6 定位文件 478
17.6.1 随机读写操作——fseek函数 479
17.6.2 返回位置指针——rewind函数 481
17.6.3 ftell函数 483
17.7 实践练习 485
17.7.1 复制文件内容 485
17.7.2 保存学生信息 486
17.8 本章小结 487
第4篇 实战篇
第18章 学生管理系统 490
18.1 分析需求 491
18.2 设计系统 491
18.3 功能模块设计 492
18.3.1 功能选择界面 492
18.3.2 录入学生成绩信息 494
18.3.3 查询学生成绩信息 496
18.3.4 删除学生成绩信息 497
18.3.5 修改学生成绩信息 499
18.3.6 插入学生成绩信息 501
18.3.7 统计学生人数 504
18.4 本章小结 505
附录A 专业术语表 506

㈤ C语言函数参考手册的前言

C语言作为当前程序开发中最流行的编程语言之一,以其简单、高效、快捷、方便的特性吸引了大批用户。根据笔者使用C语言的经验,相信对C语言程序开发人员来说,C语言函数参考手册是必需的。因此,笔者编写了本书,希望能真正帮助C语言程序开发人员在编程时实现易查、易学、易用,并使其成为程序开发必备的工具书。
本书内容
本书按照C语言库函数的头文件进行分类,每个头文件为一章内容,分别介绍了对应头文件中常用的C语言函数。对每个头文件中的函数按照字母进行排序,其中每个函数都按照功能、语法来介绍,在每个方法后都有相关的示例。
本书特点
* 即查、即学、即用
本书将查、学、用结合为一体,读者能够使用本书进行快速查询和快速应用,既是实用的工具书,也是学习的参考书。
* 字母排序,快捷搜索
本书在讲解C语言函数时按照头文件进行分类,用户在使用时可以根据头文件快速地缩小查找范围,并且每个头文件以字母顺序进行排序,以便读者更快、更准确地查找相关内容。
* 内容全面,示例丰富
本书内容涵盖了学习C语言应用的各方面技术。为了便于读者快速掌握每个知识点,每个知识点都给出对应的一个或多个示例,并提供了详尽的注释。
* 精彩栏目,贴心提醒
本书根据需要在各章使用了“注意”、“说明”和“技巧”等小栏目,让读者可以在学习过程中更轻松地理解相关知识点及概念,并轻松地掌握个别技术的应用技巧。
本书配套资源
本书提供了内容丰富的配套资源,包括源程序、素材,以及模块库、案例库、题库、素材库等多项辅助内容,读者朋友可以通过如下方式获取。
第1种方式:
(1)登录清华大学出版社的网站,在网页右上角的搜索文本框中输入本书书名(注意区分大小写和留出空格),或者输入本书关键字,或者输入本书ISBN号(注意去掉ISBN号间隔线“-”),单击“搜索”按钮。
(2)找到本书后单击超链接,在该书的网页下侧单击“网络资源”超链接,即可下载。
第2种方式:
访问本书的新浪微博:C语言图书,找到配套资源的链接地址进行下载。
读者对象
本书适合以下人群阅读。
? 初学编程的自学者 ? 编程爱好者
? 大中专院校的老师和学生 ? 相关培训机构的老师和学员
? 初、中级程序开发人员 ? 程序测试及维护人员
? 参加实习的程序员

㈥ C语言四书五经是哪4本书

C程序设计之四书五经

自从Dennis M.Ritchie于1973年设计并实现C语言以来,计算机程序设计领域已经发生了巨大的变化。以C语言为根基的C++、Java和C#等面向对象语言相继诞生,并在各自领域大获成功。今天,C及其后裔几乎统治了计算机程序设计世界。可以这么说,C语言的诞生是现代程序语言革命的起点,它改变了程序设计语言发展的轨迹,是程序设计语言发展史中的一个里程碑。

然而,C并不仅仅是其他语言的起点和基础,否则它早已成为程序设计语言发展过程中又一个被遗弃者。和当初发明时一样,C语言今天依然至关重要。它的表达力、效率、简练、紧凑、对机器的最终控制以及跨平台的高度移植性,使其在系统编程、嵌入式编程等领域一直占据着统治地位,而C99标准的制订则再一次使C语言焕发出新的活力。下文介绍C程序设计领域中的几本好书,其中一些堪称经典。

1. Brian W.Kernighan, Dennis M.Ritchie,《C程序设计语言》,机械工业出版社

这是迄今为止在所有程序设计语言书籍中最广受尊敬的一部经典,是任何一名C程序员的必读之作。因为出自C语言的设计者Dennis M.Ritchie和着名的计算机科学家Brian W.Kernighan之手,它被昵称为“K&R C”。是它首先引入了“Hello World!”程序,这个程序几乎成了后来任何一本入门性程序设计语言书籍中的第一个例子。

如同C语言本身简洁紧凑而极具威力一样,这本书轻薄短小而极富张力。通过简洁的描述和典型的示例,它全面、系统、准确地讲述了C语言的各个特性以及C程序设计的基本方法,内容涵盖基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口以及标准库等内容。

简洁清晰是这本书最大的特色。这本小书可以教给你许多比它厚几倍的“大部头”的知识。我认为那些动辄洋洋洒洒拼凑出好几百页乃至上千页的技术作者应该好好向K&R学一学。对于中、高级程序员而言,如果希望迅速获得C语言的严肃知识而又不愿意多花费哪怕一丁点时间,这本书就是首选。

顺便说一句,这本书的索引制作非常出色,极具实用价值,这可能首先要归功于正文部分的简明扼要。此外,尽管它看上去很像一本教程,但其实更是一本写给专业程序员的指南。如果你不具备任何其他语言程序设计背景或基本的C语言知识,这本书也许并不适合用作你的C语言启蒙读物。

2. Perter Van Der LinDen,《C专家编程》,人民邮电出版社

C语言是严肃的程序员语言,但这并不意味着C语言书籍必须板着面孔说教。在这本被C程序员昵称为“鱼书”(封面上有一条“丑陋的”腔棘鱼)的着作中,作为SUN公司编译器和操作系统核心开发组成员之一,Peter淋漓尽致地展示了其深厚的技术沉淀、丰富的项目经验、高超的写作技巧以及招牌式的幽默。在这部作品中,作者以流畅的文字、诙谐的笔法将逸闻典故、智慧和幽默自然地融入技术描述中,读来宛若一本小说,极富趣味。

本书讲述了C语言的历史、语言特性、声明、数组、指针、连接、运行时以及内存使用等知识,揭示了C语言中许多隐晦之处,尤其深入解析了声明、数组和指针、内存使用等方面的细节。要想成为一名专家级C程序员,这些内容都是必须掌握的。和其他满是抽象例子的C语言书籍不同,这本书充满了大量的来自真实世界的C程序设计实例,它们对C程序员具有很高的参照价值。另外,每一章都以极富趣味的“轻松一下”收尾,而附录A“程序员工作面试的秘密”则是任何语言的程序员在应聘工作前增强自信的好材料。

我怀疑真正的C专家可能用不着看这本书 — 从内容到组织方式到行文风格都决定了这是一本轻松愉快的“从菜鸟到高手”的进阶读本,所以,它理应拥有更广泛的读者群。初级程序员往往更需要热情的鼓励,在阅读这本书的过程中,你定会深深地被作者对编程的激情所感染。

世间并无完美。我认为这本书的缺陷在于,和大多数平庸的C语言书籍一样,它画蛇添足地加入了一章关于C++的描述。在今天看来,这个描述既不全面也有失公允。不过,鉴于作者是在1994年从一名C程序员的角度去观察C++,这一点也就不足为奇了。

3. Samuel P. Harbison, Guy L. Steele,《C语言参考手册(第五版)》(影印版),人民邮电出版社

在C语言参考手册类书籍里,Samuel P. Harbison 和Guy L. Steele合着的《C: A Reference Manual》是非常出色的一本。这本手册的第五版新增了对C99标准的介绍,以便满足新时期C语言学习的需要。全书共分为两大部分,第一部分专注于C语言特性,第二部分则全面讨论了C标准库。本书涵盖C99、C89、传统的C、所有版本的C运行库以及编写与C++兼容的C代码等一切知识。

这本手册只是中等厚度,但它比“比它更厚”的其他参考手册更清晰地描述了C语言的现在和过去的方方面面。整本手册技术细节描述精确,组织条理清楚,内容完备详尽而又简明扼要。可以这么说,它在广度、深度和精度方面都是出类拔萃的。对于中、高级C程序员而言,这本手册值得常备案头,它几乎肯定要比K&R的着作使用频率更高。

2004年2月1日补充:我手头有这本书的中文版:《C语言参考手册》(机械工业出版社出版)。它在很大程度上减轻了我的查阅负担,不过偶尔也增加了理解上的困难。

4. David Hanson,《C语言接口与实现:创建可重用软件的技术》,机械工业出版社

C语言能够历经三十多年而不衰,一个重要的原因在于它的适应能力。在这“复用”、“面向对象”、“组件”、“异常处理”等先进机制漫天飞舞的年代,C语言仍然能够凭借它小而优雅的语言特性,在相当程度上满足现代软件体系架构提出的要求。只不过,想要达到这个程度,必须要在C的应用功力上达到最高层次。在嵌入式、系统软件以及对性能要求极高的系统开发中,开发人员必须达到这样的层次,熟练掌握C语言的高级特性,才能够同时满足效率和灵活性、复用性的要求。可惜,虽然C语言技术图书汗牛充栋,但是关注这个峰顶之域的作品却是屈指可数。David Hanson的《C Interfaces and Implementations》就是个中翘楚。

David Hanson是业内大名鼎鼎的自由编译器lcc的合作者。在这个项目中,他负责提供高度可复用的基础架构。在不断的实践中,他完全使用ANSI C形成了一整套可复用组件库。这套组件库架构清晰,性能优异,而且提供了很多高级的特性,比如类Win32 SEH的异常处理机制,可移植的线程库,高性能的内存池,丰富的可复用数据结构组件。David Hanson把他在创作这些组件的过程中所积累的心得以及对其源码的精致剖析原原本本地写在了这本书里。这样的着作,当然堪称C语言领域里的铭心绝品。难怪已故着名技术作家Richard Stevens对此书赞不绝口,他说:“这本书中的技术,对于大部分C程序员来说,已经遗忘得太久了。”对于希望能在C语言应用上达到最高层次的核心程序员而言,这本书是难得的必读之作。

其他

除了以上四本书以外,我还乐意推荐Andrew Koenig的着作《C陷阱和缺陷》(人民邮电出版社)和Deitel父子合着的《C How to Program》两本书。

Andrew Koenig是世界上屈指可数的C++专家,他的这本书可能是最薄的一本C语言经典。它简明扼要地讲述了C程序设计中的陷阱和缺陷,包括词法陷阱、语法陷阱、语义陷阱、连接、库函数、预处理器以及可移植性缺陷等,最后一章还给出了关于如何减少程序错误的建议以及前面各章问题的参考答案。尽管这个小册子成书于C89标准制定之前,然而,即使到了C99早已颁布的今天,书中提到的大多数陷阱和缺陷一如十五年前那样使我们警醒。

Deitel父子合着的《C How to Program》一直是非常好的C语言入门教程,我手头的中译本名为《C程序设计教程》(机械工业出版社出版,原书第二版)。除了对技术的正规描述(辅以许多简明扼要的例子)外,每一章后面都带有小结、术语、常见的程序设计错误、良好的程序设计习惯、性能忠告、可移植性忠告、软件工程评述、自我测验练习及答案等。整书内容清晰,组织良好,易于阅读和理解。值得一提的是,有许多入门书读完一遍即可扔掉,而这一本是个例外。

结语

以上这几本书很大程度上局限于描述C语言及标准库本身,如果希望学习更专业的、领域相关的C程序设计技术,你可以在选择阅读这几本书的基础上继续查阅专门书籍。此外,在C语言书籍领域,水平不相上下的作品有很多,这几本只是根据我自身的阅读体验而做出的推荐。

我并不是一名C程序员,我的大多数时间都花在C的后裔语言尤其是C++身上了。然而,正如你知道的那样,C++并不全是类和模板,不全是面向对象和泛型编程,在较低的层面,C++的各个实现一如既往在很大程度上兼容C。C++和C的亲密关系决定了每一本C语言经典都应该是C++程序员的读物。

这世界变化得真是太快。各色新事物层出不穷,让人眼花缭乱、目不暇接。人们也很容易被那些五光十色的花哨玩意儿所吸引,常常会忘记构筑过去、现在和未来的坚实基础。C语言就是这样的基础之一。今天,世界上有许多我们看不见的重要软件是用C语言(以及C++等)编写而成的,正是它们在默默地支撑着这个信息世界的运转。

㈦ 初学者学习C语言,用什么书好,想用点比较经典的书。

学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何让编程初学者以最小的代价学习并精通C语言是本文的主题。请注意,即使是最小的代价”也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着各位编程初学者需要经历艰苦的过程。

一、要读就读好书,否则不如不读

所有初学者面临的第一个问题便是如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。
1. 《C程序设计语言》
Kernighan和 RitchiTheCProgramLanguag的《C程序设计语言》堪称经典中的经典,不过旧版的很多内容都已过时,和现在标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。
2. 《C语言参考手册》
即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》十分必要的C语言参考手册》就是CReferManualC语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的C程序设计语言》根据C89标准修订的而《C语言参考手册》描述的C99标准,二者可能会有些出入,建议按照C99标准学习。
3. 《C和指针》
这本《C和指针》写得也是相当地不错,英文名是PointeronC特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。相信,只要你理解了指针,C语言便不再神秘。
4.如果你已经看完一本C语言教材,并想要继续深入学习,那么我有两本书推荐给你
《C陷井与缺陷》
首先这本CTrapandPitfal的《C陷井与缺陷》,很薄的一本书,内容非常非常地有趣。不过注意的是,这本书是二十多年前写的,里面提到很多C语言的缺陷现在都已被改进,不过能够了解一些历史也不是什么坏事。
《C专家编程》
还有就是可以尝试挑战一下ExpertCProgram的《C专家编程》,书如其名,这本书颇具难度,不过一旦你仔细读完并能透彻理解,便可以放心大胆地在简历上写“精通C语言”

切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。如果你看不懂,那你一定是缺失了某些必需基础知识。此时,要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。

二、Unix/Linux还是Window这是个很大的问题

不同的编程环境会造就出不同思维的程序员。Window程序员大多依赖集成开发环境,比如VisualStudio而Unix程序员更加钟爱Makefil与控制台。显而易见,集成开发环境更容易上手,Window上学习C语言,只需要会按几个基本的VisutC++工具栏按钮就可以开始写Hello,World!而在Unix下,需要一些控制台操作的基本知识。有人也许认为Unix环境更简洁,但习惯的力量是很大的大家都很熟悉 Window基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。
对于一个只懂得Window基本操作、连 DOS什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的用C语言写一个小程序远比学习lscat等命令有趣,况且我要专注于C语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefil写法等等等等。
所以我建议初学者应该以VisualC++6.0不是VisualC++.NET或者DevC++作为主要的学习环境,而且千万不要在IDE使用技巧上过多纠缠,因为今后你一定要转向Unix环境的VisualC++6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而DevC++使用gcc编译器,对C99标准都支持良好。使用顺带提一下,很多大学的C语言课程还在使用TurboC2.0作为实验环境,这是相当不可取的原因其一是TC2.0对C标准几乎没有支持,其二是TC2.0编译得到程序是16位的这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC2.0编译出32位程序,不过那过于复杂了
等你学完一本C语言的教材,一定要转向Unix平台继续学习,几乎所有的C语言高级教程都是基于Unix平台的比如《C专家编程》转变的过程是痛苦的需要面对的各种纷繁复杂的命令,完全不同于Window平台的思考方式,但是这种痛苦是值得的Unix与C共生的Unix思考方式和习惯更加符合C语言的思考方式和习惯。Unix下,可以找到无数优秀的源代码供你尽情阅读,可以方便地查看某个库函数的联机手册,还可以看到最优秀的代码风格(说到代码风格,会专门写一篇文章详细叙述)
归结起来就是一句话:编程初学者初学C语言,建议使用Window系统和集成开发环境,准备向“高手”方向努力时,请先转向Unix平台。

热点内容
wow刷碎片脚本 发布:2024-11-29 15:58:24 浏览:590
明小子源码 发布:2024-11-29 15:15:30 浏览:143
苹果8plus什么配置 发布:2024-11-29 14:16:36 浏览:677
androidmvp结构 发布:2024-11-29 14:16:34 浏览:535
androidsqlite命令 发布:2024-11-29 14:04:38 浏览:156
信用卡分期算法 发布:2024-11-29 13:50:56 浏览:807
安卓手机dll文件为什么打不开 发布:2024-11-29 13:40:49 浏览:1002
百分之五十石碳酸怎么配置 发布:2024-11-29 13:38:56 浏览:972
我的世界服务器如何装资源包 发布:2024-11-29 13:25:48 浏览:22
mc服务器的ip是什么 发布:2024-11-29 13:23:33 浏览:568