
本书针对教学研究型和教学应用型大学的学生综合素质特点,结合新工科改革的需要,基于CDIO的工程教育理念,结合需要掌握的程序设计知识点,从国内外C/C++语言程序设计的最新教材和经典应用实例,选取了智能ATM自动取款机综合应用实例贯穿全书,并比较分析计算机程序语言与自然语言的相互对应关系,形象化解释程序语言的相关概念,更深层次理解程序语言的特性,进一步增强了计算机相关领域的应用知识点和程序设计语言间的对应关系。
“C/C++语言程序设计”是计算机科学与技术、软件工程等相关专业要开设的基本计算机语言课程,是后续课程(如数据结构、操作系统等)的重要先修课程,是学习其他高级语言和应用软件的核心基础。能否学好这门课程直接影响学生对计算机语言的理解、对后续课程的学习兴趣,也影响大学生能否顺利培养出良好的自主学习方法和学习习惯。
因材施教是教学工作者一直传承的理念,促进计算机、软件学院人才培养质量的提升,必须针对所培养人才的特点,更新教学内容和方法。本书针对教学研究型和教学应用型大学的软件工程专业学生的素质特点,基于CDIO的工程教育理念,结合软件工程专业未来需要掌握的专业知识点,利用建构主义教学理论挑选和设计综合应用范例,从与计算机交流的角度,首先掌握C语言再扩展到C++,分析应用C/C++语言解决问题的思路和特点,帮助读者深层次多角度理解C/C++语言基本语法、基本概念,降低C/C++语言的学习和应用的抽象性难度,提高学习的兴趣。
本书共有13章。
第1章概述C语言、C语言程序结构、Visual C++6.0编译系统的使用及学习C语言的方法。
第2章详细介绍C语言的数据类型、运算符与表达式。
第3章介绍算法的概念、顺序结构程序设计及C语言的基本输入输出函数。
第4章主要介绍选择结构的特点、语法及选择结构程序设计的应用。
第5章详细地介绍循环语句的语法结构、功能特点及循环程序设计的应用。
第6章主要介绍一维数组、多维数组以及字符数组的定义和使用。
第7章介绍函数的定义、调用、变量的作用域及存储类别等。
第8章介绍指针的定义和运算、指针在数组和函数中的应用及指向指针的含义与应用。
第9章主要介绍结构体和共用体的定义及其应用。
第10章介绍C文件及其基本操作。
第11章介绍C语言的三种预处理命令与应用。
第12章从C语言到C++语言角度,分析C++语言的功能和特点。
第13章通过两个实训范例贯穿C语言重要知识点。
本书编者多年从事“C语言程序设计”或“C++程序设计”的教学工作,具有丰富的教学经验,编程实例多选自实训教学讲义。
(1) 内容编写既考虑经典范例,又吸收了最新应用内容。由浅入深,循序渐进,层次分明;语言讲解通俗易懂、突出重点。
(2) 每章节都配有精心设计的应用例题,帮助读者更好地理解和掌握该章节知识点,例题的代码已做了详细的注释。每章都配有精选习题,用以强化C语言程序设计知识和技能的训练。
(3) 结合每章的内容,编写了综合应用实例,既可作为各章教学的参考,也可作为该章知识点应用的综合实训项目。
(4) 本书强调案例教学,例题和习题都可在Visual C++6.0中控制台项目下调试与运行。选用该编译系统,为后续学习Visual C++程序设计语言奠定了基础。
(5) 五子棋人机对战案例加入了简单的人工智能搜索算法,让读者能尽早揭开智能的神秘面纱,适应新工科教学改革的需要。
本书由邱晓红、李渤担任主编。第1章、第12章、附录A和附录B由邱晓红编写,第2~6章、第13章由樊中奎组织编写,第7~9章由李渤组织编写,第11章由杨舒晴编写,第10章由彭莹琼编写。书中部分例题由研究生参与调试与校验,全书由邱晓红统稿并定稿。
在本书的编写过程中,得到了许多老师和同学的大力支持和热情帮助,清华大学出版社对本书的出版给予了大力的支持,在此表示衷心的感谢!同时,编者参阅了大量的“C/C++语言程序设计”方面的书籍和网上资源,在此,对它们的作者和提供者一并表示衷心的感谢。
由于编者水平有限,书中难免疏漏或陈述不妥之处,恳请读者批评指正,以便再版时修改完善。
编者2020年3月
第1章C语言及程序设计概述1
1.1C语言简介1
1.1.1C语言的发展过程1
1.1.2C语言的主要特点1
1.2C语言程序的结构3
1.2.1C语言程序的结构及其主要特点3
1.2.2标识符与关键字5
1.3C语言编译工具简介7
1.3.1C语言程序实现的步骤7
1.3.2Turbo C 2.0编译工具简介7
1.3.3Visual C++ 6.0编译工具简介11
1.4如何学习C语言15
1.4.1学习C语言的理由15
1.4.2学好C语言的步骤17
1.5编程实践18
任务1: 输出金字塔图案18
任务2: 打印输出华氏和摄氏的温度对照表19
习题20第2章数据类型、运算符与表达式22
2.1常量和变量22
2.1.1常量22
2.1.2变量25
2.2基本数据类型27
2.2.1整数类型27
2.2.2字符型28
2.2.3实数类型29
2.3数据类型的转换30
2.3.1自动类型转换31
2.3.2强制类型转换33
2.4运算符和表达式34
2.4.1算术运算符和算术表达式34
2.4.2关系运算符和关系表达式39
2.4.3逻辑运算符和逻辑表达式42
2.4.4赋值运算符和赋值表达式43
2.4.5位运算符与位运算45
2.4.6条件运算符与条件表达式49
2.4.7逗号运算符与逗号表达式50
2.4.8求字节数运算符51
2.4.9特殊运算符52
2.5运算符的优先级和结合性52
2.5.1运算符的优先级52
2.5.2运算符的结合性53
2.6编程实践55
任务: 分析MD5散列算法的基本运算55
习题56第3章算法概念与顺序结构程序设计64
3.1算法简介64
3.1.1算法的概念64
3.1.2算法的常用描述方法65
3.2C语句概述67
3.3C语言的基本输入与输出69
3.3.1字符输入输出函数69
3.3.2格式输入输出函数71
3.4顺序结构程序设计80
3.4.1顺序结构程序设计思想80
3.4.2顺序结构程序设计举例80
3.5编程实践82
任务: 计算正弦函数的面积82
习题83第4章选择结构程序设计87
4.1if语句87
4.1.1单分支if语句87
4.1.2双分支if语句88
4.1.3多分支if语句89
4.1.4if 语句的嵌套91
4.1.5条件运算符和条件表达式93
4.2switch语句93
4.2.1switch语句93
4.2.2switch语句的嵌套96
4.3选择结构程序设计举例97
4.4编程实践99
任务: 计算个人所得税99
习题100第5章循环结构程序设计113
5.1while和dowhile循环结构113
5.1.1while语句的一般形式113
5.1.2while语句使用说明114
5.1.3dowhile语句的一般形式115
5.1.4dowhile语句使用说明 116
5.2for循环结构和循环的嵌套116
5.2.1for循环语句的一般形式117
5.2.2for循环语句使用说明118
5.2.3循环嵌套的形式119
5.2.4嵌套循环的说明119
5.3流程转向语句120
5.3.1goto语句120
5.3.2break语句121
5.3.3continue语句122
5.4循环结构程序设计举例123
5.4.1确定循环次数与不确定循环次数123
5.4.2选择循环语句125
5.4.3提前结束循环127
5.4.4其他应用举例127
5.5编程实践128
任务: 验证哥德巴赫猜想128
习题129第6章数组136
6.1一维数组136
6.1.1一维数组的定义136
6.1.2一维数组元素的引用136
6.1.3一维数组的初始化137
6.1.4一维数组应用举例 138
6.2多维数组140
6.2.1二维数组的定义140
6.2.2二维数组元素的引用141
6.2.3二维数组的初始化142
6.2.4二维数组使用举例142
6.3字符数组145
6.3.1字符数组的定义145
6.3.2字符数组的初始化146
6.3.3字符串与字符串结束标志147
6.3.4字符数组的引用与输入输出147
6.3.5字符串处理函数148
6.3.6字符数组使用举例153
6.4数组应用举例155
6.5编程实践158
任务: 多规格打印万年历158
习题160第7章函数165
7.1函数的定义165
7.1.1函数概述165
7.1.2函数类型165
7.1.3函数定义168
7.2函数参数和返回值170
7.2.1形式参数和实际参数170
7.2.2函数的返回值174
7.3函数的调用175
7.3.1函数调用175
7.3.2函数声明175
7.4函数的嵌套调用和递归调用176
7.4.1函数的嵌套调用176
7.4.2函数的递归调用178
7.5变量的作用域181
7.6变量的存储类别184
7.7编程实践186
任务1: 正(余)弦曲线演示器186
任务2: 杨辉三角形188
习题190第8章指针196
8.1指针和地址196
8.2指针变量197
8.2.1指针变量的定义197
8.2.2指针变量赋值198
8.2.3指针运算符与指针表达式200
8.2.4指针变量的引用 202
8.2.5指针变量作为函数的参数202
8.3指针和数组206
8.3.1指向数组的指针206
8.3.2通过指针引用数组元素207
8.3.3数组名作为函数参数209
8.3.4指向多维数组的指针和指针变量212
8.4指针和字符串216
8.4.1字符串的表示216
8.4.2字符串指针作为函数参数218
8.4.3字符数组与字符串指针的区别219
8.5指针和函数221
8.5.1函数的指针221
8.5.2用指向函数的指针作为函数参数222
8.5.3返回指针值的函数224
8.6指向指针的指针225
8.6.1指向指针的指针简介225
8.6.2指针数组226
8.6.3指针数组作为main函数的参数228
8.7编程实践229
任务1: 黑白棋子交换229
任务2: 班干部值日安排231
习题234第9章结构体和共用体239
9.1结构体239
9.1.1结构体类型的定义239
9.1.2结构体变量的定义241
9.1.3结构体变量的引用243
9.1.4结构体变量的赋值244
9.2结构体数组与结构体指针246
9.2.1结构体数组246
9.2.2指向结构体的指针249
9.2.3结构体作为函数的参数252
9.2.4结构体举例256
9.3链表258
9.3.1链表概述258
9.3.2处理动态链表所需的函数259
9.3.3链表的基本操作262
9.4共用体266
9.4.1共用体类型的定义267
9.4.2共用体类型变量的定义267
9.4.3共用体变量的引用268
9.4.4共用体变量的初始化268
9.5枚举类型和自定义类型270
9.5.1枚举类型的定义271
9.5.2枚举变量的定义和初始化271
9.5.3枚举数据的运算272
9.5.4枚举数据的输入输出273
9.5.5枚举变量举例274
9.5.6用typedef定义类型276
9.6编程实践279
任务1: 三天打鱼两天晒网279
任务2: 航班订票系统280
习题289第10章文件294
10.1文件概述294
10.1.1文件的分类294
10.1.2文件的编码形式294
10.1.3文件的读写方式295
10.2文件的基本操作296
10.2.1文件的打开与关闭296
10.2.2文件的读和写298
10.3文件操作举例303
10.4编程实践310
任务: 精挑细选310
习题312第11章预处理命令314
11.1宏定义314
11.1.1无参宏定义314
11.1.2带参数的宏定义318
11.2“文件包含”处理322
11.3条件编译323
11.4编程实践325
任务: 串化运算325
习题326第12章C++语言的特性331
12.1从C到C++331
12.2C++程序基本结构332
12.3面向对象编程(OOP)思想334
12.4C++对C的扩充335
12.4.1C++的输入输出335
12.4.2用const定义常变量337
12.4.3函数原型声明337
12.4.4函数的重载338
12.4.5函数模板340
12.4.6变量的定义341
12.4.7有默认参数的函数341
12.4.8内置函数342
12.4.9作用域运算符342
12.4.10变量的引用342
12.4.11运算符new和delete343
12.4.12命名空间namespace344
12.4.13using声明和using编译指令344
12.4.14C++增强的特性345
12.5面向对象编程特性347
12.5.1封装性347
12.5.2继承和派生351
12.5.3多态和虚函数357
12.6编程实践360
任务: 学生成绩管理程序360
习题369第13章综合案例实训373
13.1五子棋游戏项目实训373
13.1.1功能模块设计373
13.1.2数据结构设计374
13.1.3函数功能描述374
13.1.4系统数据流程图376
13.1.5程序实现377
13.1.6程序运行398
13.2ATM(自动取款机)案例实训398
13.2.1功能模块399
13.2.2数据结构分析399
13.2.3函数功能描述399
13.2.4系统数据流程图400
13.2.5代码实现400
13.2.6运行结果416附录A常用字符与ASCII对照表417附录BC语言常用语法提要418
B.1标识符418
B.2常量418
B.3表达式418
B.4数据定义419
B.5函数定义420
B.6变量的初始化420
B.7语句420
B.8预处理命令421附录CC语言的常用库函数422
C.1输入输出函数422
C.2数学函数423
C.3字符函数和字符串函数424
C.4动态存储分配函数425参考文献426
基于CDIO的工程教育理念,结合需要掌握的程序设计知识点,从掌握C语言到C++的角度,分析国内外C/C++语言程序设计的最新教材和经典应用实例
邱晓红,江西理工大学 软件工程学院 教授 江西理工大学中韩虚拟现实研究院院长,江西省中青年学科带头人,江西省软件工程学科教学指导委员会成员。近5年出版大学本科教材3部。