mariaDB
743
2022-05-29
华章程序员书库
C编程技巧:117个问题解决方案示例
C Recipes: A Problem-Solution Approach
希里什·查万(Shirish Chavan)
卢涛 译
Preface 前 言
本书包含了适合从初级到高级的各种读者的大量C语言技巧。本书按照“问题-解决方案”的体例编写,以便你可以快速找到所需问题的解决方案。本书每个解决方案都附带适当的代码和对该代码的简要讨论,力求在C的理论和实践之间取得完美的平衡。
C语言于1972年首次亮相。对于高级计算机语言而言,它现在处于退休年龄。但是,尽管C语言已有40多年的历史,它仍然很强大。C是十种最受欢迎的计算机语言之一,至少在接下来的20年内仍将如此。因此,你在C中获得的任何专业知识都不会很快过时,并且会使你在未来几年内继续保持高效。本书将帮助你解决C语言中的问题,并使你成为C语言的专家。
本书适用对象
本书主要面向在职专业人士。但是,它也适用于学生、教师、研究人员、代码测试人员和程序员。期望你具备C语言和编程的实际知识。
本书组织结构
本书由11章组成。第1章总览C语言。第2章涉及控制语句。第3~5章涉及函数、数组、指针和结构。在这些章节中,你将找到程序员在实际工作中面临的问题。
第6章处理数据文件,包含大量涉及保存文件到磁盘和从所保存的文件中获取数据的技巧。第7~9章涉及数据结构的广泛主题,这些章节涵盖了具有实用性的数据结构。第10章介绍了各种密码系统。C和密码学的组合是一个非常强大且有趣的组合。在本章中,你将体验到这种组合的强大功能。
第11章是本书的最后一章,讨论数值方法。计算机是作为数值计算机器被发明的,但随着时间的推移,它们已经成为了数据处理机器。然而,即使在今天,数值计算仍是计算机执行的最重要的工作之一。本章为你提供了许多用于数值计算实用程序的技巧。
我真诚地希望本书对广大读者有用。
致 谢 Acknowledgements
感谢Apress促成本书问世的每位工作人员。特别感谢编辑Celestin Suresh John先生和Prachi Mehta女士的耐心和指导。
很多技术朋友在本书的技术问题上帮助了我。其中包括:位于Nagpur的Cryptex Technologies公司(www.cryptextechnologies.com)的首席执行官Ajay Dhande先生;位于Satara的Harsh计算机研究所的Shivajirao Salunkhe教授和Manisha Salunkhe教授;位于Satara 的Arvind Gavali工程学院(www.agce.sets.edu.in)的校长Vilas Pharande博士;位于Satara Wai的Kalasagar Academy公司(www.kalasagaracademy.in)的Sachin Pratapure教授和Vishal Khade教授;位于Satara 的Yashoda工程学院的Anant Bodas教授和Vikas Dhane教授;位于Amravati的Shrikant计算机培训中心(https://www.sctcamravati.com)的Sanjay Adhau教授;位于Amravati的PRMIT&R(mitra.ac.in)的校长Mir Sadique Ali博士;位于Pune的Aphron Infotech公司(www.aphroninfotech.in)的首席执行官Nikhil Kumbhar先生。我还要感谢运营Coding Alpha网站(www.codingalpha.com)的Tushar Soni先生和Ajay Sawant先生,以及运营The Crazy Programmer网站(www.thecrazyprogrammer.com)的Neeraj Mishra先生。他们都为本书的创作提供了宝贵的帮助。
Vijay Bhatkar博士是著名的计算机科学家,也是印度超级计算机PARAM 10000之父,他一直是我的灵感源泉。很感谢他鼓舞我。
最后但同样重要的是,感谢Jarron先生和John Borges先生及其在Pune的技术图书服务团队。
谢谢你们一起让这本书成为可能。最后说明一下:Pune、Nagpur和Satara都是印度马哈拉施特拉邦的城市。
Contents 目 录
前言
致谢
第1章 欢迎学习C语言1
1.1 程序、软件和操作系统2
1.2 机器语言和汇编语言2
1.3 过程式语言3
1.4 面向对象的语言3
1.5 计算机术语4
1.6 编译和解释语言4
1.7 第一个C程序5
1.8 C的突出特点6
1.9 隐式类型转换7
1.10 显式类型转换9
第2章 控制语句10
2.1 求1到N的整数的总和10
2.2 计算数字的阶乘12
2.3 生成斐波那契数列14
2.4 确定给定数字是否为质数17
2.5 计算正弦函数20
2.6 计算余弦函数21
2.7 计算二次方程的根23
2.8 计算整数的反转数25
2.9 使用嵌套循环打印几何图案26
2.10 生成终值利息系数表28
第3章 函数和数组31
3.1 确定圆周率π的值32
3.2 从数字列表中选择质数34
3.3 使用递归进行数字求和37
3.4 使用递归计算斐波那契数列39
3.5 使用递归计算数字的阶乘40
3.6 搜索整数数组中的最大元素42
3.7 解决经典的汉诺塔问题43
3.8 解决八皇后问题46
3.9 计算给定对象集的排列和组合48
3.10 对两个矩阵求和50
3.11 计算矩阵的转置53
3.12 计算矩阵的乘积55
第4章 指针和数组59
4.1 从包含int类型数据的数组中获取数据59
4.2 使用数组名称从数组中获取数据61
4.3 从包含char和double类型数据的数组中获取数据62
4.4 访问越界数组元素64
4.5 存储字符串66
4.6 存储字符串而不进行初始化68
4.7 在交互式会话中存储字符串70
4.8 获取二维数组中元素的地址71
4.9 获取二维数组中行的基址73
4.10 从二维数组中获取数据74
4.11 使用数组名称从二维数组中获取 数据76
4.12 使用指针数组从数组中获取数据78
4.13 物理交换字符串80
4.14 逻辑交换字符串82
4.15 以交互方式存储字符串85
4.16 将命令行参数传递给程序87
4.17 使用指向指针的指针获取存储的字符串90
第5章 利用指针使用函数和结构94
5.1 通过引用传递函数参数94
5.2 显示嵌套结构中存储的数据96
5.3 使用函数构建结构102
5.4 通过将结构传递给函数来修改结构中的数据103
5.5 通过将指向结构的指针传递给函数来修改结构中的数据105
5.6 使用结构数组存储和获取数据107
5.7 在交互模式下使用结构数组存储和获取数据110
5.8 使用函数指针调用函数113
5.9 实现基于文本的菜单系统115
第6章 数据文件118
6.1 逐个字符地读取文本文件118
6.2 文件打开失败时处理错误122
6.3 以批处理模式写入文本文件125
6.4 以交互模式写入文本文件127
6.5 逐个字符串地读取文本文件130
6.6 逐个字符地写入文本文件132
6.7 将整数写入文本文件134
6.8 将结构写入文本文件136
6.9 读取存储在文本文件中的整数139
6.10 读取存储在文本文件中的结构141
6.11 将整数写入二进制文件143
6.12 将结构写入二进制文件145
6.13 读取写入二进制文件的整数147
6.14 读取写入二进制文件的结构149
6.15 重命名文件151
6.16 删除文件152
6.17 复制文本文件153
6.18 复制二进制文件155
6.19 写入文件并读取该文件157
6.20 将文本文件定位到所需字符159
6.21 从键盘设备文件中读取165
6.22 将文本写入显示器设备文件167
6.23 从键盘设备文件读取文本并将其写入显示器设备文件169
第7章 自引用结构171
7.1 以交互方式生成数字列表171
7.2 使用匿名变量创建链表173
7.3 从链表中删除组件177
7.4 将组件插入链表181
7.5 在交互式会话中创建链表187
7.6 处理线性链表191
7.7 创建具备前向和后向遍历功能的线性链表200
第8章 栈和队列203
8.1 将栈实现为数组204
8.2 将栈实现为链表207
8.3 将中缀表达式转换为后缀表达式212
8.4 将中缀表达式转换为前缀表达式215
8.5 将循环队列实现为数组218
第9章 搜索和排序223
9.1 使用线性搜索查找数据元素224
9.2 使用二分搜索查找数据元素226
9.3 使用冒泡排序对给定的数字列表进行排序228
9.4 使用插入排序对给定的数字列表进行排序231
9.5 使用选择排序对给定的数字列表进行排序233
9.6 使用归并排序对给定的数字列表进行排序235
9.7 使用希尔排序对给定的数字列表进行排序238
9.8 使用快速排序对给定的数字列表进行排序240
第10章 密码系统243
10.1 使用反向密码方法245
10.2 使用恺撒密码方法248
10.3 使用转置密码方法251
10.4 使用乘法密码方法255
10.5 使用仿射密码方法259
10.6 使用简单替换密码方法263
10.7 使用Vigenère密码方法268
10.8 使用一次性密钥密码方法273
10.9 使用RSA密码方法277
第11章 数值方法283
11.1 用对分法求方程的根284
11.2 用试位法求方程的根286
11.3 用穆勒法求方程的根289
11.4 用牛顿拉夫森迭代法求方程的根292
11.5 用牛顿前向插值法构造新的数据点294
11.6 用牛顿后向插值法构造新的数据点296
11.7 用高斯前向插值法构造新的数据点299
11.8 用高斯后向插值法构造新的数据点301
11.9 用斯特林插值法构造新的数据点304
11.10 用贝塞尔插值法构造新的数据点306
11.11 用拉普拉斯-埃弗***插值法构造新的数据点309
11.12 用拉格朗日插值法构造新的数据点312
11.13 用梯形数值积分法计算积分值314
11.14 用辛普森的3/8数值积分法计算积分值316
11.15 用辛普森的1/3数值积分法计算积分值318
11.16 用修正的欧拉方法求解微分方程320
11.17 用龙格-库塔方法求解微分方程322
附录A 参考表325
附录B 库函数334
附录C C习惯用法338
附录D 术语表347
c语言 C 语言
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。