本书主要特色
本书围绕程序设计的思想和方法组织教学内容,把C语言作为讲解程序设计的工具,把教学的重点从C语言本身转移到程序设计的思路和方法以及使用C语言编程上来,把讲授语言的概念转变为讲授语言的运用,把对概念的讲授由抽象的分析和讲解转变为通过实例和经验的学习和运用。
本书作者根据学生对新知识学习、认知的规律,从C语言和C程序的基本要素以及程序设计的基本方法开始,循序渐进地引入对程序设计专业化的要求和相关的知识;从增强学生的感性认识入手,通过多角度的对例题的分析,示范对关键知识和技术的运用,通过对关键内容在不同层次上的适当重复,深化学生对概念的理解和掌握。本书精选的例题和练习题,在功能、知识和技术上覆盖了从语言入门到实用工具多个层面,有助于学生掌握专业化的编程技能,养成专业化的编程习惯。
本书作者专门设计和实现了基于Web的C程序练习/评测系统,为学生提供具有及时监控和反馈环节的实践环境,为本书的练习题提供联网的实时评测。
作者简介
尹宝林 1973年毕业于北京航空学院计算机专业,1984年获英国爱丁堡大学博士学位。现任北京航空航天大学计算机系教授、博士生导师。从事计算机专业教学和科研工作多年,曾主讲“C语言程序设计”、“高级语言程序设计”、“UNIX程序设计环境”、“计算机图形学”、“图像处理”等课程,其中“高级语言程序设计”被评为北京市精品课程。主编过《离散数学》等教材。参加全国信息学奥林匹克(NOI)活动的组织与指导工作,任全国信息学奥林匹克科学委员会副主席。
无
本书主要特色 本书围绕程序设计的思想和方法组织教学内容,把C语言作为讲解程序设计的工具,把教学的重点从C语言本身转移到程序设计的思路和方法以及使用C语言编程上来,把讲授语言的概念转变为讲授语言的运用,把对概念的讲授由抽象的分析和讲解转变为通过实例和经验的学习和运用。 本书作者根据学生对新知识学习、认知的规律,从C语言和C程序的基本要素以及程序设计的基本方法开始,循序渐进地引入对程序设计专业化的要求和相关的知识;从增强学生的感性认识入手,通过多角度的对例题的分析,示范对关键知识和技术的运用,通过对关键内容在不同层次上的适当重复,深化学生对概念的理解和掌握。本书精选的例题和练习题,在功能、知识和技术上覆盖了从语言入门到实用工具多个层面,有助于学生掌握专业化的编程技能,养成专业化的编程习惯。 本书作者专门设计和实现了基于Web的C程序练习/评测系统,为学生提供具有及时监控和反馈环节的实践环境,为本书的练习题提供联网的实时评测。 作者简介 尹宝林 1973年毕业于北京航空学院计算机专业,1984年获英国爱丁堡大学博士学位。现任北京航空航天大学计算机系教授、博士生导师。从事计算机专业教学和科研工作多年,曾主讲“C语言程序设计”、“高级语言程序设计”、“UNIX程序设计环境”、“计算机图形学”、“图像处理”等课程,其中“高级语言程序设计”被评为北京市精品课程。主编过《离散数学》等教材。参加全国信息学奥林匹克(NOI)活动的组织与指导工作,任全国信息学奥林匹克科学委员会副主席。
近20年里,计算机学科有了很大的发展,人们普遍认为,“计算机科学”这个名字已经难以涵盖该学科的内容,因此,改称其为计算学科(Computing Discipline)。在我国本科教育中,1996年以前曾经有计算机软件专业和计算机及应用专业,之后被合并为计算机科学与技术专业。2004年以来,教育部计算机科学与技术专业教学指导分委员会根据我国计算机专业教育和计算学科的现状,为更好地满足社会对计算机专业人才的需求,发布了《高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)》(以下简称《规范》),提出在计算机科学与技术专业名称之下,构建计算机科学、计算机工程、软件工程和信息技术四大专业方向。《规范》中四大专业方向的分类,在于鼓励办学单位根据自己的情况设定不同的培养方案,以培养更具针对性和特色的计算机专业人才。
为配合《规范》的实施,落实中央“提高高等教育质量”的精神,我们规划了“面向计算机科学与技术专业规范系列教材”。本系列教材面向全新的计算学科,针对我国高等院校逐步向新的计算机科学与技术专业课程体系过渡的趋势编写,在知识选择、内容组织和教学方法等方面满足《规范》的要求,并与国际接轨。本套教材具有以下几个特点:
(1) 体现《规范》的基本思想,满足其课程要求。为使教材符合我国高等院校的教学实际,编委会根据《规范》的要求规划本套教材,广泛征集在国内知名高校中从事一线教学和科研工作、经验丰富的优秀教师承担编写任务。
(2) 围绕“提高教育质量”的宗旨开发教材。为了确保“精品”,本系列教材的出版不走盲目扩大的路子,每本教材的选题都将由编委会集体论证,并由一名编委担任责任编委,最大程度地保证这套教材的编写水准和出版质量。
(3) 教材内容的组织科学、合理,体系得当。本套教材的编写注重研究学科的新发展和新成果,能够根据不同类型人才培养需求,合理地进行内容取舍、组织和叙述,还精心设计了配套的实验体系和练习体系。
(4) 教材风格鲜明。本套教材按4个专业方向统一规划,分批组织,陆续出版。教材的编写体现了现代教育理念,探讨先进的教学方法。
(5) 开展教材立体化建设。根据需要配合主教材的建设适时开发实验教材、教师参考书、学生参考书、电子参考资料等教辅资源,为教学实现多方位服务。
我们衷心希望本系列教材能够为我国高等院校计算机科学与技术等专业的教学作出贡献,欢迎广大读者广为选用。
“面向计算机科学与技术专业规范系列教材”编委会
尹宝林:暂无
出版者的话
序言
作者自序
教学建议
例题索引
第0章引言1
第1章C语言和C程序的基本
要素5
11C语言概述5
12C程序的开发过程6
13C程序的基本结构8
14调试初步——语法错误的定位10
15算术运算和表达式11
16常量和变量11
161数字常量12
162字符常量13
163字符串常量13
164符号常量14
165枚举常量15
166变量15
167变量的赋值和初始化17
168一维数组18
169字符数组和字符串19
1610二维数组20
17分支和条件语句20
171关系运算符和逻辑
运算符20
172运算符的优先级22
173从自然语言到逻辑
表达式23
174条件语句24
175条件表达式的类型25
176条件语句的嵌套和级联25
177使用条件语句时的注意
事项26
178多路选择和switch语句27
18循环和循环语句30
181while语句30
182for语句31
183do while语句33
184循环语句中的跳转34
19函数37
191函数的结构37
192函数的调用38
193函数的参数传递39
194代码的封装40
110输入和输出41
1101文件41
1102标准输入/输出文件41
1103常用的输入/输出函数42
111C语言的书写格式46
1111换行和空行47
1112缩进47
1113空格48
1114注释48
习题49
第2章程序设计的基本方法51
21程序设计的基本过程51
22问题分析53
221对程序功能的要求53
222对程序性能的要求53
223程序的使用方式和环境54
224程序的错误处理55
225程序的测试55
226问题分析的结果56
23方案设计60
231解题思路60
232计算模型62
233算法分类64
234算法和数据结构的选择66
235算法的检验72
24编码:从算法到代码72
241代码的结构73
242编码的质量75
243代码的可维护性77
244代码中的注释77
245代码的检查77
246代码中常见的错误78
25测试和调试80
251调试的基本方法80
252故障的检查、确认和
修改81
253常见的故障类型和调试
方法82
254调试数据的设计和
使用84
255调试数据和标准输入/
输出的重新定向84
256调试工具85
257测试和调试中常见的问题…86
26手册的使用87
习题88
第3章数值的表示和计算90
31整型数据类型90
311有符号数和无符号数91
312无符号数和标志位92
313整型的截断与扩展93
314整型计算的溢出和判断94
315整除所引起的误差95
316整型数据的字节序和
尾端97
32浮点数据类型100
321浮点数据的表示方法100
322有效数字和最低位当量101
323浮点数的比较104
324浮点数值计算中的上溢和
下溢105
33数值计算中的类型转换108
331基本类型转换和数据
宽度108
332强制类型转换110
333char的符号类型111
334变量符号类型的判断112
34按位操作112
341移位操作113
342标志位的设置、检测和
清除114
343常用的位操作模式115
344位操作应用举例117
35数值计算的速度118
习题120
第4章指针、数组、结构和类型122
41指针变量122
411指针变量的定义123
412指针的类型124
413指针运算125
414指针的强制类型转换126
415不合法的指针运算127
416指针与整数128
417指针的增量运算和减量
运算129
418作为函数参数的指针130
42指针和一维数组130
421指针和数组的互换130
422动态一维数组133
423数组复制与指针赋值135
424变量限制符const136
425数组的负数下标137
43二维数组和一维指针数组138
431作为参数的二维数组138
432二维数组和指针139
433二维数组和一维指针
数组141
434指针数组和命令行
参数143
435二维数组的动态分配144
44函数指针147
441函数指针变量的定义148
442函数指针变量的使用149
443函数指针数组的使用153
45结构154
451结构类型的定义154
452结构成员的访问155
453结构类型的嵌套定义157
454结构的自引用158
455结构类型与函数的参数和
返回值158
46复杂类型的解读159
461变量定义中的复杂类型
说明159
462强制类型转换中的复杂
类型162
463类型定义语句和
复杂类型的定义162
习题164
第5章程序中的递归166
51递归的定义166
52递归函数的执行171
53递归函数的设计172
54递归的优点和缺点176
55递归函数的效率179
56递归函数的使用181
561适宜使用递归的情况181
562不适宜使用递归的情况189
57递归函数效率的改进189
571尾递归函数的非递归化…189
572带存储机制的递归191
573一般递归函数的
非递归化191
习题194
第6章搜索196
61搜索的目标和基本过程196
62深度优先搜索198
621深度优先搜索的基本算法…198
622回溯搜索201
63广度优先搜索204
64重复节点的判断205
65带深度控制的广度优先搜索211
66节点的编码和搜索效率215
习题223
第7章常用函数和函数库225
71静态链接和动态链接225
711静态链接225
712动态链接226
72库函数的使用227
721标准库函数的头文件227
722标准函数库文件的使用228
723错误信息函数和变量228
73数据输入输出函数229
731文件描述字和字符流230
732文件的打开、创建和
关闭232
733文件数据的二进制格式
读写234
734读写操作中的定位236
735基础读写与字符流读写的
效率比较238
736字符流的冲刷239
737文件的属性240
74字符类型函数和字符串操作
函数243
741字符类型函数243
742字符串操作函数244
75时间函数245
751日历时间245
752程序运行时间246
76随机数函数247
761基本随机数函数247
762均匀分布随机数的生成…247
763非均匀连续分布随机数的
生成248
764离散分布随机数的生成249
习题251
第8章程序的优化253
81优化的作用和意义253
82优化的基本过程254
821运算时间和存储空间254
822优化可能性的判断255
823程序运行的整体计时255
824程序运行的分析计时和
程序运行剖面257
83运行效率的改进策略和方法259
831调整代码259
832改进算法263
833空间换时间267
834改进数据结构269
835了解和适应硬件的特性271
836编译优化选项274
84空间效率的改进策略和方法274
841内存使用状况的检测275
842空间效率的改进方法275
习题278
第9章程序的风格、结构和组织280
91程序风格的要素280
92程序的描述281
921代码描述的层次281
922代码的函数封装281
923数据描述控制代码的
执行282
924表达式的描述288
925预处理和变量初始化的
使用289
926程序可靠性的设计要点290
927错误信息和日志文件291
928关于可移植性的考虑292
929程序中的注释293
93变量使用中的规则和风格294
931变量的命名294
932变量的命名空间和
作用域295
933变量的生存周期和静态
局部变量297
934全局变量的使用300
935变量与常量的比较301
94函数的参数和变长参数表302
941基于指针数组的变长参数
处理机制302
942变长参数表303
943函数的参数传递303
944变长参数表的基本处理
机制和工具304
945变长参数表和程序描述
风格306
946vprintf()函数族310
95缓冲区溢出311
96常用编译预处理命令的使用312
961文件的包含313
962宏313
963条件编译316
97源文件的拆分318
971源文件拆分的基本原则…319
972源文件的类型和后缀319
973避免h文件被重复引用…320
974静态全局变量320
975可执行文件的生成和
更新321
习题323
附录A标准头文件及其中的函数
说明和符号常量325
附录Bcc/gcc的常用命令
选项328
附录Cvi的基本操作命令329
附录DASCII编码表330
附录E使用Visual C++IDE创建
程序的基本操作
过程331
附录F函数printf()的常用描述符
及其含义333
参考文献335