新書推薦:
《
小原流花道技法教程
》
售價:HK$
109.8
《
少女映像室 唯美人像摄影从入门到实战
》
售價:HK$
110.9
《
詹姆斯·伍德系列:不负责任的自我:论笑与小说(“美国图书评论奖”入围作品 当代重要文学批评家詹姆斯·伍德对“文学中的笑与喜剧”的精湛研究)
》
售價:HK$
87.4
《
武当内家散手
》
售價:HK$
50.4
《
诛吕:“诸吕之乱”的真相与吕太后时期的权力结构
》
售價:HK$
99.7
《
炙野(全2册)
》
售價:HK$
78.2
《
女人的胜利
》
售價:HK$
55.9
《
数据有道:数据分析+图论与网络+微课+Python编程(鸢尾花数学大系:从加减乘除到机器学习)
》
售價:HK$
266.6
|
編輯推薦: |
《C语言程序设计》是谭浩强教授专门为应用型院校编写的C语言教材,自2000年1月出版以来,受到广泛好评。该书第2版于2008年被评为“普通高等教育‘十一五’国家级规划教材”;2009年被评为“普通高等教育精品教材”。该书前4版累计重印80多次,销售180多万册。此次针对C语言的发展变化对第4版进行了修订,同时还配套出版了《C语言程序设计(第5版)学习辅导》。
|
內容簡介: |
本书针对我国应用型大学的实际情况,由谭浩强教授在《C程序设计》一书的基础上编写出版。本书降低起点,精简内容,通俗易懂,突出重点,紧扣基本要求,使读者容易学习。本书自第1版出版后受到广泛欢迎,到目前已更新4版,累计重印80多次。本书是在《C语言程序设计》(第4版)(谭浩强,清华大学出版社)的基础上修订再版的。 在这次修订中,保持了原书概念清晰、通俗易懂的特点,同时根据C标准介绍程序设计,体现教材的先进性和规范性,并且更加容易学习与入门。本书定位准确,体系科学,内容适当、取舍合理、例题丰富,分析透彻。作者采用的“提出问题—解决问题—归纳分析”的“三部曲”,符合初学者的认知规律。 凡具有计算机初步知识的读者都能读懂本书。本书可作为应用型大学各专业学习C语言程序设计的教材,基础较好的高职高专学校也可选用,本书也是不可多得的用于自学的好教材。 本书还配套出版辅助教材《C语言程序设计(第5版)学习辅导》,内容包括本书的习题答案、常见错误分析、上机指南和上机实验。
|
目錄:
|
第1章程序设计与C语言1
11计算机与程序、程序设计语言1
12C语言的出现和发展过程2
13简单的C语言程序3
14C语言程序的结构和特点6
15运行C程序的步骤与方法7
16程序设计的任务9
本章小结10
习题10
第2章数据的存储与运算11
21数据在计算机中是怎样存储的11
2.1.1数据在计算机中是以二进制形式存储的11
2.1.2位、字节和地址12
2.1.3不同类型数据的存储方式13
22整型数据的运算与分析15
2.2.1整型数据运算程序举例和分析15
2.2.2整型常量与整型变量17
23实型数据的运算与分析20
2.3.1实型数据的运算举例20
2.3.2实型常量的表示形式22
2.3.3实型变量22
24字符型数据的运算24
2.4.1字符数据运算的简单例子24
2.4.2字符常量和字符变量25
2.4.3字符串常量29
25符号常量30
2.5.1为什么要用符号常量 31
2.5.2符号常量的性质和使用方法32
26算术运算符和算术表达式34
2.6.1算术运算符34
2.6.2算术表达式36
27C运算符和C表达式38
2.7.1C运算符38
2.7.2C表达式38
28提高部分39
2.8.1求补码的方法39
2.8.2整型常量的表示形式39
2.8.3整型变量的类型40
2.8.4整型常量的类型41
2.8.5C语言允许使用的数据类型42
2.8.6运算符的优先级与结合性42
本章小结43
习题44
第3章最简单的C程序设计——顺序程序设计46
31算法是程序的灵魂46
3.1.1什么是算法46
3.1.2怎样表示算法48
32程序的三种基本结构51
33C语句综述52
34赋值表达式和赋值语句55
3.4.1赋值表达式55
3.4.2赋值过程中的类型转换57
3.4.3赋值语句58
3.4.4为变量赋初值59
35数据输入输出的概念59
36字符数据的输入输出61
3.6.1用putchar函数输出一个字符61
3.6.2用getchar函数输入一个字符63
37简单的格式输入与输出65
3.7.1用简单的printf函数输出数据65
3.7.2用简单的scanf函数输入数据68
38顺序结构程序设计举例71
39提高部分75
3.9.1关于无符号数据与有符号数据之间的赋值75
3.9.2较复杂的输入输出格式控制77
3.9.3简单易用的C 的输入输出84
本章小结85
习题86
第4章选择结构程序设计88
41条件判断88
4.1.1条件判断的含义88
4.1.2关系运算符和关系表达式89
4.1.3逻辑运算符和逻辑表达式90
42用if语句实现选择结构94
4.2.1用if语句实现选择结构举例94
4.2.2if语句的一般形式96
4.2.3if语句使用的说明96
4.2.4使用嵌套的if语句实现多层条件判断98
43利用switch语句实现多分支选择结构102
44程序综合举例104
45提高部分107
4.5.1用条件表达式实现简单的选择结构107
4.5.2在程序中使用条件表达式109
本章小结110
习题111
第5章循环结构程序设计114
51程序中需要用循环结构114
52用while语句和do…while语句实现循环114
5.2.1用while语句实现循环114
5.2.2用do…while语句实现循环116
53用for 语句实现循环119
5.3.1for语句的一般形式和执行过程119
5.3.2for循环程序举例 120
54循环的嵌套123
55提前结束循环124
5.5.1用break语句提前退出循环 124
5.5.2用continue语句提前结束本次循环125
56几种循环的比较127
57循环程序综合举例128
58提高部分132
5.8.1while和do…while循环的比较132
5.8.2for语句的各种形式134
本章小结137
习题137
第6章用数组处理批量数据139
61为什么要用数组139
62怎样定义和引用一维数组139
6.2.1怎样定义一维数组140
6.2.2怎样引用一维数组的元素140
6.2.3一维数组的初始化141
6.2.4一维数组程序举例142
63怎样定义和引用二维数组145
6.3.1怎样定义二维数组 145
6.3.2怎样引用二维数组的元素146
6.3.3二维数组的初始化147
6.3.4二维数组程序举例148
64字符数组151
6.4.1怎样定义字符数组及对其初始化 151
6.4.2怎样引用字符数组153
6.4.3字符串和字符串结束标志153
6.4.4怎样进行字符数组的输入输出155
6.4.5字符串处理函数157
6.4.6字符数组应用举例158
65提高部分162
6.5.1为什么在定义二维数组时采用两对双括号的形式162
6.5.2对C的字符串函数的详细说明163
本章小结167
习题167
第7章用函数实现模块化程序设计169
71函数是什么169
72函数的定义和调用171
7.2.1为什么要定义函数171
7.2.2怎样定义函数172
7.2.3怎样调用函数173
7.2.4对被调用函数的声明和函数原型176
73函数的嵌套调用和递归调用178
7.3.1函数的嵌套调用178
7.3.2函数的递归调用180
74数组作为函数参数186
7.4.1用数组元素作为函数实参186
7.4.2用数组名作为函数参数187
75变量的作用域和生存期194
7.5.1变量的作用域——局部变量和全局变量194
7.5.2变量的存储方式和生存期197
7.5.3关于作用域和生存期的小结200
76内部函数和外部函数202
7.6.1什么是内部函数202
7.6.2什么是外部函数202
77提高部分204
7.7.1实参求值的顺序204
7.7.2递归的典型例子——Hanoi(汉诺)塔问题205
本章小结208
习题210
第8章善于使用指针212
81什么是指针212
82指针变量213
8.2.1使用指针变量访问变量的例子213
8.2.2怎样定义指针变量214
8.2.3怎样引用指针变量216
8.2.4指针变量作为函数参数218
83通过指针引用数组223
8.3.1数组元素的指针223
8.3.2通过指针引用数组元素224
8.3.3用数组名作函数参数228
84通过指针引用字符串233
8.4.1字符串的表示形式233
8.4.2字符指针作为函数参数236
8.4.3使用字符指针变量和字符数组的区别241
85提高部分243
8.5.1指针使用的技巧243
8.5.2多维数组的指针245
8.5.3指向函数的指针246
8.5.4返回指针值的函数246
8.5.5指针数组247
8.5.6多重指针——指向指针的指针247
本章小结249
习题252
第9章用结构体类型处理组合数据——用户自定义数据类型253
91定义和使用结构体变量253
9.1.1自己建立结构体类型253
9.1.2定义结构体类型变量255
9.1.3结构体变量的初始化和引用257
92结构体数组260
93结构体指针263
94用结构体变量和结构体变量的指针作为函数参数267
95用指针处理链表270
9.5.1什么是线性链表270
9.5.2建立简单的静态链表271
9.5.3建立动态链表272
96提高部分274
9.6.1共用体类型275
9.6.2枚举类型275
本章小结278
习题279
第10章用文件保存数据280
101C文件的有关概念280
10.1.1什么是文件280
10.1.2文件名281
10.1.3文件的分类281
10.1.4文件缓冲区282
10.1.5文件类型指针282
102文件的打开与关闭283
10.2.1用fopen函数打开数据文件284
10.2.2用fclose函数关闭文件285
103文件的顺序读写285
10.3.1向文件读写字符286
10.3.2向文件读写一个字符串289
10.3.3文件的格式化读写293
10.3.4用二进制方式读写文件293
104文件的随机读写297
10.4.1文件位置标记及其定位297
10.4.2随机读写文件300
105提高部分301
10.5.1系统定义的文件类型指针301
10.5.2回车换行符的转换302
10.5.3fread和fwrite函数用于二进制文件的输入输出302
10.5.4文件读写的出错检测303
本章小结303
习题305
附录A常用字符与ASCII码对照表306
附录BC语言中的关键字307
附录C运算符和结合性308
附录DC语言常用语法提要311
附录EC库函数316
参考文献323
第1章程序设计与C语言1
1.1计算机与程序、程序设计语言1
1.2C语言的出现和发展过程2
1.3简单的C语言程序3
1.4运行C程序的步骤与方法7
1.4.1运行C程序的步骤7
1.4.2上机运行C程序的方法8
本章小结16
习题17
第2章数据的存储与运算18
2.1数据在计算机中是怎样存储的18
2.1.1数据在计算机中是以二进制形式存储的18
2.1.2位、字节和地址19
2.1.3不同类型数据的存储方式20
2.2整型数据的运算与分析22
2.2.1整型数据运算程序举例和分析22
2.2.2整型常量与整型变量24
2.3实型数据的运算与分析27
2.3.1实型数据的运算举例27
2.3.2实型常量的表示形式29
2.3.3实型变量30
2.4字符型数据的运算32
2.4.1字符数据运算的简单例子32
2.4.2字符常量和字符变量33
2.4.3字符串常量38
2.5符号常量39
2.5.1为什么要用符号常量 39
2.5.2符号常量的性质和使用方法42
2.6算术运算符和算术表达式43
2.6.1算术运算符44
2.6.2算术表达式45
2.7C运算符和C表达式47
2.7.1C运算符47
2.7.2C表达式48
2.8提高部分48
2.8.1求补码的方法48
2.8.2整型常量的表示形式49
2.8.3整型变量的类型50
2.8.4整型常量的类型51
2.8.5C语言允许使用的数据类型52
2.8.6运算符的优先级与结合性52
本章小结53
习题54
第3章最简单的C程序设计——顺序程序设计56
3.1算法是程序的灵魂56
3.1.1什么是算法56
3.1.2怎样表示算法58
3.2程序的三种基本结构61
3.3C语句综述63
3.4赋值表达式和赋值语句65
3.4.1赋值表达式65
3.4.2赋值过程中的类型转换68
3.4.3赋值语句69
3.4.4变量赋初值70
3.5数据输入输出的概念71
3.6字符数据的输入输出72
3.6.1用putchar函数输出一个字符73
3.6.2用getchar函数输入一个字符74
3.7简单的格式输入与输出76
3.7.1用简单的printf函数输出数据77
3.7.2用简单的scanf函数输入数据81
3.8顺序结构程序设计举例84
3.9提高部分88
3.9.1关于无符号数据与有符号数据之间的赋值88
3.9.2较复杂的输入输出格式控制90
3.9.3简单易用的C 的输入输出98
本章小结99
习题100
第4章选择结构程序设计102
4.1条件判断102
4.1.1条件判断的含义102
4.1.2关系运算符和关系表达式103
4.1.3逻辑运算符和逻辑表达式105
4.2用if语句实现选择结构108
4.2.1用if语句实现选择结构举例108
4.2.2if语句的一般形式110
4.2.3if语句使用的说明111
4.2.4使用嵌套的if语句实现多层条件判断112
4.3利用switch语句实现多分支选择结构117
4.4程序综合举例119
4.5提高部分123
4.5.1用条件表达式实现简单的选择结构123
4.5.2在程序中使用条件表达式125
本章小结126
习题127
第5章循环结构程序设计130
5.1程序中需要用循环结构130
5.2用while语句和do…while语句实现循环130
5.2.1用while语句实现循环130
5.2.2用do…while语句实现循环133
5.3用for 语句实现循环135
5.3.1for语句的一般形式和执行过程135
5.3.2for循环程序举例 136
5.4循环的嵌套140
5.5提前结束循环141
5.5.1用break语句提前退出循环 141
5.5.2用continue语句提前结束本次循环143
5.6几种循环的比较145
5.7循环程序综合举例145
5.8提高部分150
5.8.1while和do…while循环的比较150
5.8.2for语句的各种形式152
本章小结155
习题156
第6章利用数组处理批量数据157
6.1为什么要用数组157
6.2怎样定义和引用一维数组157
6.2.1怎样定义一维数组158
6.2.2怎样引用一维数组的元素158
6.2.3一维数组的初始化160
6.2.4一维数组程序举例161
6.3怎样定义和引用二维数组164
6.3.1怎样定义二维数组 164
6.3.2怎样引用二维数组的元素165
6.3.3二维数组的初始化166
6.3.4二维数组程序举例167
6.4字符数组171
6.4.1怎样定义字符数组及对其初始化 171
6.4.2怎样引用字符数组172
6.4.3字符串和字符串结束标志173
6.4.4怎样进行字符数组的输入输出175
6.4.5字符串处理函数177
6.4.6字符数组应用举例178
6.5提高部分182
6.5.1为什么在定义二维数组时采用两对双括号的形式182
6.5.2对C的字符串函数的详细说明183
本章小结188
习题189
第7章用函数实现模块化程序设计190
7.1函数是什么190
7.2函数的定义和调用193
7.2.1为什么要定义函数193
7.2.2怎样定义函数193
7.2.3怎样调用函数194
7.2.4对被调用函数的声明和函数原型197
7.3函数的嵌套调用和递归调用200
7.3.1函数的嵌套调用200
7.3.2函数的递归调用202
7.4数组作为函数参数208
7.4.1用数组元素作函数实参208
7.4.2用数组名作函数参数210
7.5变量的作用域和生存期217
7.5.1变量的作用域——局部变量和全局变量217
7.5.2变量的存储方式和生存期220
7.5.3关于作用域和生存期的小结224
7.6内部函数和外部函数226
7.6.1什么是内部函数226
7.6.2什么是外部函数226
7.7提高部分229
7.7.1实参求值的顺序229
7.7.2递归的典型例子——Hanoi(汉诺)塔问题229
本章小结233
习题235
第8章善于使用指针237
8.1什么是指针237
8.2指针变量238
8.2.1使用指针变量访问变量的例子238
8.2.2怎样定义指针变量240
8.2.3怎样引用指针变量241
8.2.4指针变量作为函数参数243
8.3通过指针引用数组249
8.3.1数组元素的指针249
8.3.2通过指针引用数组元素250
8.3.3用数组名作函数参数255
8.4通过指针引用字符串260
8.4.1字符串的表示形式260
8.4.2字符指针作函数参数265
8.4.3使用字符指针变量和字符数组的区别269
8.5提高部分272
8.5.1指针使用的技巧272
8.5.2多维数组的指针274
8.5.3指向函数的指针275
8.5.4返回指针值的函数275
8.5.5指针数组276
8.5.6多重指针——指向指针的指针276
本章小结278
习题281
第9章使用结构体类型处理组合数据——用户自定义数据类型283
9.1定义和使用结构体变量283
9.1.1自己建立结构体类型283
9.1.2定义结构体类型变量285
9.1.3结构体变量的初始化和引用287
9.2结构体数组291
9.3结构体指针294
9.4用结构体变量和结构体变量的指针作函数参数298
9.5用指针处理链表302
9.5.1什么是线性链表302
9.5.2建立简单的静态链表303
9.5.3建立动态链表304
9.6提高部分307
9.6.1共用体类型307
9.6.2枚举类型308
本章小结310
习题311
第10章利用文件保存数据313
10.1C文件的有关概念313
10.1.1什么是文件313
10.1.2文件名314
10.1.3文件的分类314
10.1.4文件缓冲区315
10.1.5文件类型指针315
10.2文件的打开与关闭316
10.2.1用fopen函数打开数据文件317
10.2.2用fclose函数关闭文件318
10.3文件的顺序读写319
10.3.1向文件读写字符319
10.3.2向文件读写一个字符串323
10.3.3文件的格式化读写327
10.3.4用二进制方式读写文件328
10.4文件的随机读写332
10.4.1文件位置标记及其定位332
10.4.2随机读写文件335
10.5提高部分337
10.5.1系统定义的文件类型指针337
10.5.2回车换行符的转换337
10.5.3fread和fwrite函数用于二进制文件的输入输出338
10.5.4文件读写的出错检测338
本章小结339
习题340
附录A常用字符与ASCII代码对照表342
附录BC语言中的关键字343
附录C运算符和结合性344
附录DC语言常用语法提要347
附录EC库函数352
参考文献359
|
內容試閱:
|
《C语言程序设计》于2000年1月出版以来,受到广泛好评,是作者专门为应用型大学编写的C语言教材。2008年出版了本书的第2版,被评为“普通高等教育‘十一五’国家级规划教材”和“普通高等教育精品教材”。目前该教材已更新4版,累计重印80多次,销售180多万册。
程序设计是计算机工作者的一项基本功。C语言是在国内外被广泛学习和使用的一种计算机语言,受到广大计算机爱好者的喜爱。我国几乎所有的理工科大学都开设了C语言程序设计课程。
为了使C语言程序设计课程教学取得更好的效果,需要弄清楚几个问题。
1. 为什么要学习程序设计
计算机的本质是“运行程序的机器”,程序和指令的思想是计算机系统中最基本的概念。只有懂得程序设计,懂得计算机是怎样工作的,才能较深入地理解和应用计算机,才能较好地懂得怎样使计算机按照人们的意图进行工作。学习程序设计,能学到计算机处理问题的方法,培养计算思维,培养分析问题和解决问题的能力。
虽然非计算机专业的大学生,大多数将来并不一定会成为专业的软件开发人员,不一定有许多机会使用C语言编写实用程序,但是在大学期间仍然需要学习程序设计。通过开设程序设计课程,使大学生具有程序设计的初步知识,具有编写程序的初步能力,知道软件开发的过程和特点,有利于各专业人士在今后工作中与程序开发人员沟通合作,进行应用软件的开发工作。因此,大学生(尤其是理工类学生)学习程序设计是很有好处的。
具体地说,学习程序设计的目的有两个: 学习用计算机解决问题的思路和方法;学习怎样用计算机工具去实现算法,即实现用计算机解题。
2. C语言是基础而实用的语言
进行程序设计,必须用计算机语言作为工具,否则只是纸上谈兵。可供选择的语言很多,各有特点。C语言是基础而实用的语言。并不是每一种语言都具有此特点,有的语言实用,但不能作为基础语言(如FORTRAN);有的语言可以作为基础语言,但实际应用不多(如Pascal)。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好。C语言既具有高级语言的优点,又具有低级语言的许多特点;既适合于编写系统软件,又能方便地用来编写应用软件,是多年来在国内外使用最广泛的语言。国内外许多专家认为,C语言是最基本的通用语言,有了C语言的基础,以后过渡到任何一种语言(如C 、C#、Java)都不会困难。掌握C语言程序设计被认为是计算机专业人员的基本功。
3. 正确处理好算法和语法的关系
C程序设计课程既有基础的性质(了解计算机处理问题的方式,学习算法),又有应用和工具的性质(掌握语言工具,具有初步的编程能力,能具体应用)。因此,既要注意讲清概念,使学生建立正确的概念,又要培养学生处理实际问题的能力。
程序设计有4个要素: ①算法是程序的灵魂;②数据结构是加工的对象;③语言是编程工具(算法要通过语言来实现);④要采用合适的程序设计方法。程序设计教学是否成功取决于能否将以上4个要素(尤其是算法与语言二者)紧密结合。
本书自始至终把这4个要素自然有机地结合起来,全面兼顾。算法和语法二者都很重要,都要重视。本书不是孤立地介绍语法,也不是全面系统地介绍算法,更不是根据语言规则的分类和顺序作为教学和教材的章节和顺序,而是从应用的角度, 以编程为目的和主线,由浅入深地介绍怎样用C语言处理问题,把算法和语法紧密结合,同步展开,步步深入。作者精心安排顺序,算法的选择由易而难并细心选择例子,使读者容易学习。在此基础上,构造了新的教学和教材体系。
具体的做法: 在每章中,首先举几个简单的例子,引入新的问题;接着介绍怎样利用C语言去解决简单的问题;然后再循序渐进地介绍较深入的算法和程序。使学生在富有创意、引人入胜的编程过程中,学会算法,掌握语法,领悟程序设计的思想和方法。把枯燥无味的语法规则变成生动活泼的编程应用。多年的实践表明,这种做法是成功的。
既然要学习编写程序,就离不开计算机语言。如果不掌握语法规则的运用,可能连最简单的程序也编写不出来,或者错误百出。问题不是要不要掌握语言工具,而是通过什么方法学习和掌握语言工具的使用方法——是枯燥地死记语法规则,还是通过实例掌握语言的使用方法。初学时可以学习最基本的语法现象而淡化语法的细节,有些细节不必一一讲授,可以让学生自查自学。
建议教师在讲授时,以程序为中心展开,着重讲清解题思路以及怎样用程序去实现它,不要孤立介绍语法规则,教材中叙述的语法规则,可以在介绍编写程序的过程中加以说明,或在做简单介绍后请学生自己阅读,并通过上机实践掌握它。
4. 在学习和应用计算机过程中培养计算思维
计算机基础教育应该面向计算机应用,着眼于提高大学生的计算机应用能力,培养各个领域的计算机应用人才,同时在教学过程中要注意培养学生的科学思维和信息素养。计算思维是科学思维的一部分。有专家认为: 计算思维是运用计算机科学的基础概念进行问题求解、系统设计和理解人类行为的思维活动。计算思维的本质是抽象和自动化。程序设计中的算法思维就是典型的计算思维。学习程序设计能够有效地培养计算思维。
作者认为: 计算思维是在学习和应用计算机的过程中自然而然地培养的,计算思维并不神秘,它是自然而然的结果,而不是生硬进行的过程;是本身存在的内在关联,而不是外界强加的概念。我们要善于在教学过程中有意识地引导学生善于思考,掌握规律,举一反三,掌握科学思维(包括计算思维)方法。
培养计算思维不是最终目的。培养计算思维是为了更好地应用计算机,培养更多更好的计算机应用人才。
5. 要从实际出发,准确定位
在学习C语言程序设计的人群中,有不同的情况和要求。有的是计算机专业的,有的是非计算机专业的;有的是本科生,有的是高职生;有的来自研究型大学,有的来自应用技术型大学;有的以后成为计算机专业人员,有的是计算机应用人员;有的要求精通,有的要求粗通,有的则只求一般了解。必须准确定位,从具体实际出发,对不同对象提出不同的要求。不可能要求一个没有计算机基础的人,通过三四十学时的课程就能精通程序设计,掌握复杂的算法,编写出复杂的程序。要求必须恰当,内容要有所取舍。在有限的学时内,只能学习基本的内容,为今后进一步的学习和使用打下必要的基础。如果有少数人将来需要熟练地编程,甚至成为专业的软件开发人员,则应当在学习本课程的基础上继续进行更深入的学习,例如至少应当完成一个综合作业,开发一个具有一定规模的应用软件的实践项目。
本书的对象是应用型大学本科学生,程度较高的高职(大专)学生也可以用本书作为教材。
本书在《C语言程序设计》(第4版)的基础上进行了修订。修订中遵循以下原则。
(1) 保持原有特点和风格。由于作者所著的《C程序设计》和《C语言程序设计》内容全面,叙述清晰,通俗易懂,在教学实践中取得了很好的效果,因此在修订时尽量保持原有的优点,基本上保留原书的体系,注意概念准确,讲解透彻,使读者对C语言和程序设计有全面、完整的理解。
(2) 按照C99标准进行介绍,以适应C语言的发展,使编写程序更加规范。目前国内许多介绍C语言的教材是按照C89标准介绍的,而国外的同类教材已改为以C99标准为蓝本。本书按照C99标准的规定介绍程序设计,例如:
① 数据类型中,C99增加了双长整型(long long int)、复数浮点型(float_complex,double_complex,long long _complex)、布尔型(bool)等。
② 根据C99的建议,main函数的类型一律指定为int类型,并在函数的末尾加返回语句“return 0;”。
③ C99增加了注释行的新形式——以双斜线“//”开始的内容作为注释行,这本来是C 的注释行形式,现在C99把它扩充进来了,使编程更加方便。同时保留了原来的“/* ……*/”形式,以使原来按C89标准编写的程序可以不加修改仍可使用。本书采用C99的注释新形式,读者使用更方便,而且符合发展需要。因此,本书的程序基本上采用下面的形式: #include // 以”//”作为注释行的开始
int main() // 指定main函数为int类型
{
return 0; // 如函数正常执行,返回整数0
}
由于C99是在C89的基础上增加或扩充一些功能而成的,因此C89和C99基本上是兼容的。过去用C89编写的程序在C99环境下仍然可以运行。C99所增加的许多新的功能和规则,是在编制比较复杂的程序时为方便使用和提高效率而用的,在初学时可以不涉及,因此本书对目前暂时用不到的内容不做介绍,以免读者分心,增加学习难度。在将来进行深入编程时再逐步了解和学习。
(3) 加强算法,强化解题思路。在介绍例题时,先进行问题分析,探讨解题思路,构造算法,然后才是根据算法编写程序,而不是先列出程序再解释程序。在各章中由浅入深地结合例题介绍各种典型的算法。对穷举、递推、迭代、递归、排序(包括比较交换法、选择法、起泡法)、矩阵运算、字符处理应用等算法做了详细的介绍,对难度较大的链表操作的算法做了清晰的思路说明。引导读者在拿到题目后,先考虑算法再编程,而不是坐下来就写程序,以培养好的习惯,培养算法思维。
(4) 更详尽明确地说明了指针。指针是学习C语言的重点,也是难点。作者在书中明确指出“指针就是地址”,让很多读者豁然开朗。作者根据各校教学中遇到的情况和一些师生提出的问题,在本次修订时对指针的性质做了进一步说明: 我们所说的指针就是地址,这个地址不仅是指内存中的位置信息(即纯地址),而且还包括在该存储单元中的数据类型的信息,请读者阅读本书时加以注意。
(5) 更加通俗易懂,容易学习。作者充分考虑广大初学者的情况,精心设计体系,适当降低门槛,便于读者入门。尽量少用深奥难懂的专业术语,用通俗易懂的方法和语言阐述清楚复杂的概念,使复杂的问题简单化。没有学过计算机原理和高等数学的读者完全可以掌握本书的内容。
本书采用作者提出的“提出问题—解决问题—归纳分析”的新的教学“三部曲”,先具体后抽象,先实际后理论,先个别后一般。而不是先抽象后具体,先理论后实际,先一般后个别。实践证明这样做符合读者的认知规律,读者很容易理解。
在介绍每个例题时,都采取以下的步骤: 给出问题→解题思路→编写程序→运行结果→程序分析→程序改进。对有关内容用说明、注意、提醒、思考等标注,并用楷体字以引起注意。这种方法符合读者认知规律,使读者思路更加清晰,更容易接受和理解。通过运行程序,读者看到结果,便于验证算法的正确性,学习过程不觉得抽象,而会觉得算法具体有趣,看得见,摸得着。
在每章的最后有本章小结,归纳本章的要点,提纲挈领,画龙点睛,以加深印象,增强条理性。
本书便于自学。具有高中以上文化水平的人,即使没有教师讲解,也能基本掌握本书的内容。这样,就有可能做到: 教师少讲,提倡自学,上机实践。
(6) 把教学内容分为基本要求和提高要求两部分。这是考虑到不同对象的要求的差别。在各章中把一部分较深入的内容作为“提高部分”,单独列出,放在各章的最后,供学生选学和参考。如果学时不够,可以只学基本部分。通过学习基本部分,能初步掌握C程序设计的基本内容,写出相对简单的程序,如果希望学习得更深入一些,掌握更多的编程思路和技巧,可以选学各章的“提高部分”。也可以教师讲授基本部分,学生自学提高部分,以培养学生的自学能力。
应当怎样学习C语言程序设计呢?作者给出以下建议。
(1) 在开始学习时不要死记语法细节。请记住: 重要的是学会编程序,而不是背语法。一开始就要学会看懂程序,编写简单的程序,然后逐步深入。有一些语法细节是需要通过较长时期的实践才能熟练掌握的。初学时,切忌过早地滥用C语言的某些容易引起错误的细节(如不适当地使用 和--的副作用)。
(2) 不能设想今后一辈子只使用在学校里学过的某一种语言。无论用哪一种语言进行程序设计,其基本思路和方法都是一样的。从这个意义上说,在大学里学哪一种语言,并不是很重要的原则问题。学会了一种计算机语言,可以很快地学会另一种语言。因此,在学习时一定要活学活用,举一反三,掌握规律,在以后需要时能很快地掌握其他语言进行工作。
(3) 在学校学习阶段,主要是学习程序设计的方法,进行程序设计的基本训练,打下将来进一步学习的基础。学习程序设计课程时,应该把精力放在最基本、最常用的内容上,学好基本功。如果对学生有较高的程序设计要求,应当在学习本课程后,安排一次集中的课程设计环节,完成有一定规模的程序设计。
(4) 程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行,希望读者一定要重视实践环节,包括编程和上机,达到既会编写程序,又会调试程序。衡量这门课程学习得好坏,不是“知不知道”,而是“会不会干”。 考核的方法不应当采用标准题(是非题或选择题),而应当把重点放在编制程序和调试程序上。
(5) 使用哪一种编译系统并不是原则问题。程序编好以后,用哪一种编译系统进行编译都可以。读者不应该只会用某一种编译环境,而应当了解、接触和使用不同的编译环境。不同的编译系统,其功能和使用方法有些不同,编译时给出的信息也不完全相同,要注意参阅使用说明书,特别要在使用中积累经验,举一反三。
为了帮助读者学习本书,作者还编写了本书的配套参考书《C语言程序设计(第5版)学习辅导》,提供本书中各章习题的参考答案以及上机实习指导。
南京大学金莹教授以及谭亦峰、薛淑斌高级工程师参加了本书的修订。许多高校老师多年来使用本教材,提出了许多宝贵的意见和建议,使本书得以日臻完善。在此谨向一切帮助和支持过作者的人士表示由衷的感谢。
本书肯定会有不少缺点和不足,热切期望得到专家和读者的批评指正。
谭浩强2023年11月1日于清华园
|
|