本书通过案例教学的方式,由浅入深,让学生在模仿训练应用的过程中,快速掌握程序设计的基本思想和基本方法。 本书共10章,主要内容包括C语言概述、C简单编程、选择结构、循环结构、数组、函数、指针、结构体、文件及应用实例。各章均给出了内容丰富又有代表性的例题,全部程序都在Dev C 中调试通过,同时也对Dev C 环境进行了介绍。书后配有各章习题解析及习题答案。其中,大部分例题和习题配有微视频讲解。同时,作者团队在中国大学慕课平台上开设了C语言学习辅导与习题课的慕课课程。 本书可作为高等学校各专业C程序设计课程的教材,也可以作为各类计算机培训班的教材和成人教育同类课程教材及自学教材。
在当前MOOC学习、线上线下混合教学、翻转课堂等新技术、新术语、新形式层出不穷、方兴未艾的历史时期,本教材立足于C语言程序设计基础本身,又结合新的形式、新的方法,试图将经典的知识以全新的视角诠释出来,方便教师与学生的教与学。主要特色如下:与MOOC线上课程相配套,同时可通过扫描二维码的方式链接小视频对重点知识、例题习题进行视频讲解,方便学生学习;通过贯穿全书的案例教学将理论与实践有机结合,并在重点章节习题中增加面向专业的案例,让学生能够学以致用;文件部分的学习提前至数组部分,方便学生在后续章节中的学习使用。
C程序设计教程与实训(第3版)程序设计能力是计算机基础教育的重要组成部分,是高等学校学生应具备的基本技能之一。程序设计知识的学习有助于学生真正理解计算机工作原理,了解计算机解决问题的方法,有效训练学生的逻辑思维和抽象思维,同时开阔学生的视野,培养丰富的想象力和创造力,终帮助学生更好地使用计算机解决本专业科研、工作和生活中的相关问题。
学习程序设计是既有挑战性,又颇有成就感的过程。有经验的程序员在重新审视C语言的学习时,常常会感觉这门课程其实很简单。然而,在实际面对初学者的教学过程中,却面临着比想象中多得多的困难。常见的问题是,开课之初学生有很大的热情,但随着学习的深入,到了循环、数组部分,有些学生仍然迟迟不能入门,慢慢地失去了学习的兴趣,造成恶性循环,终甚至放弃了该课程的学习。学生普遍反映对于抽象的C程序设计课程难于找到入门的捷径。这些情况的出现,原因是多方面的。其中很重要的原因就是长期以来,程序设计课程过多强调语言本身及其表达细节,忽视了程序设计的本质,造成很多学生过多地陷入具体细节的旋涡里,无法站在一定的高度欣赏程序设计的美。同时,C程序设计又是一门实践性很强的课程,学生必须通过较多的编程训练才能掌握。因此,如果能让学生一开始就很清楚自己要做的事情,循序渐进地领会程序设计的精妙,在实践中形成良好的程序设计风格,并自始至终兴趣浓厚,相信C语言的教学工作将会收到事半功倍的效果。
鉴于此,我们决定从教材入手,转换思路。在教材的编写过程中,本着从始至终简化语法,培养学生动手编程能力的初衷,力争独辟蹊径,写出特色,让学生了解C程序的编写其实远没有传说中那样困难。
本书共分为10章,涵盖了C程序设计教程应包含的基本内容,并将文件的基本使用方法提前至数组一章,让学生提前了解文件的应用,并在后续知识的学习中反复使用,加深理解。
同时,前8章均由引例开始,引出该章将要引入的新知识,采用提出问题分析问题引入新知识解决问题模仿编程总结提高这样一个循序渐进、螺旋式上升的教学模式。将一个个典型的、针对性强的、贴近现实或贴近专业的案例程序设计作为贯穿始终的主线,将课程内容抽丝剥茧般解析开来。学生可通过课堂练习题、课后习题和课后提高题等几个环节提升程序设计能力,达到由浅入深、举一反三进行程序设计实训的目的。
此外,本书重要章节(如循环结构、数组、函数、指针等章节)的课后习题均增加了面向各类专业的应用与提高的部分习题,为各类专业学生了解计算机在本专业的应用提供感性认识。
C程序设计教程与实训(第3版)前言本次再版与之前的不同是:
(1) 重点例题和多数课后习题配有微视频讲解,通过扫描二维码可以观看。
(2) 在中国大学MOOC平台开设了C语言学习辅导与习题课的慕课课程,与教材内容对应。
(3) 进一步精选、增加了例题和习题,特别是同一个例子在几个章节中反复出现,便于比较方法之间的差别和效率。
本书的配套电子资源可在清华大学出版社官网(www.tup.tsinghua.edu.cn)下载。
培养学生程序设计能力的方法仍在研究和探索中,限度地提高学生的学习效果是我们永恒的奋斗目标。
本书由从事了多年计算机基础课程教学、具有丰富教学实践经验的一线教师编写完成。第1、2、7章由李芳编著,第3、5章及附录由高敬阳编著,第4、6章由马静编著,第8~10章由万静编著。全书由高敬阳组织编写并统稿。感谢第2版团队教师李国捷、吴蕾、尤枫的支持和付出。
由于作者水平有限,书中难免有错误和不妥之处,恳请读者批评指正。
编者2021年5月
高敬阳:博士,教授,博士生导师,北京市教学名师。
多年来带领团队一直致力于教学改革一线,大大提升了人才培养质量,该团队被评为北京市优秀教学团队,本人曾荣获霍英东教育基金会第八届青年教师奖;北京市优秀教学成果二等奖;主编出版了十一五、十二五规划教材、北京市优质教材《大学计算机基础》和《大学计算机基础实验指导》;主编《C程序设计教程与实训》荣获北京市精品教材;在《中国大学教学》等期刊发表教改论文多篇;带领团队录制的2门课程在中国大学MOOC平台上上线。
主持了国家自然科学基金、北京市自然科学基金等项目。
第1章C语言概述1
1.1引例1
1.2C语言程序的基本结构2
1.3C语言基本符号3
1.4程序设计的基本概念4
1.4.1程序和程序设计4
1.4.2算法5
1.4.3程序设计语言6
1.5运行C程序的步骤和开发环境7
1.5.1运行C程序的步骤7
1.5.2集成开发环境8
本章小结12
习题112
第2章C简单编程13
2.1引例13
2.2数据与类型14
2.3常量和变量14
2.3.1常量14
2.3.2变量17
2.4运算符与表达式19
2.4.1算术运算符与算术表达式19
2.4.2赋值运算符与赋值表达式20
2.4.3关系运算符与关系表达式21
2.4.4逻辑运算符与逻辑表达式21
2.4.5条件运算符及条件表达式22
2.4.6逗号运算符与逗号表达式22
2.4.7sizeof运算符22
2.4.8位运算符与位运算23
2.4.9数据间的混合运算24
2.5数据的输入输出25
2.5.1字符输入输出函数25
2.5.2格式输出函数printf()26
2.5.3格式输入函数scanf()27
2.6顺序结构程序设计29
2.6.1C语言的语句29
2.6.2顺序结构程序设计举例30
本章小结31
习题232
目录第3章选择结构34
3.1引例34
3.2if语句35
3.2.1ifelse形式35
3.2.2if形式37
3.2.3if语句的嵌套38
3.2.4ifelse if形式41
3.3switch语句43
本章小结46
习题346
第4章循环结构49
4.1引例49
4.2while语句50
4.3dowhile语句53
4.4for语句55
4.5循环嵌套58
4.6break和continue语句60
4.6.1break语句60
4.6.2continue语句62
4.7goto语句64
4.8循环应用65
本章小结71
习题471
第5章数组75
5.1引例75
5.2一维数组77
5.2.1数组的概念77
5.2.2一维数组的定义77
5.2.3一维数组的引用78
5.2.4一维数组的初始化79
5.2.5一维数组的应用79
5.3二维数组82
5.3.1二维数组的定义82
5.3.2二维数组的引用和初始化83
5.3.3二维数组的应用84
5.4字符数组和字符串87
5.4.1字符数组87
5.4.2字符串88
5.4.3字符串处理函数91
5.4.4字符串数组94
5.5用文件处理数据96
5.6数组应用98
本章小结102
习题5103
第6章函数106
6.1引例106
6.2函数的定义及调用107
6.2.1函数的定义108
6.2.2函数的调用109
6.2.3函数声明111
6.2.4两种特殊的函数112
6.3数组作为函数的参数113
6.3.1一维数组作为函数的参数113
6.3.2函数间的参数传递114
6.3.3二维数组作为函数的参数119
6.3.4字符数组作为函数的参数121
6.4函数的嵌套与递归123
6.5程序的多文件组织127
6.5.1多文件组织127
6.5.2Dev C 集成环境中多文件组织的应用129
6.6作用域和存储类型130
6.6.1变量的作用域130
6.6.2变量的存储类型133
6.6.3函数的存储类型138
6.7函数的应用138
本章小结140
习题6141
第7章指针145
7.1引例145
7.2指针变量的定义和引用146
7.2.1指针变量的定义146
7.2.2指针变量的引用147
7.2.3指针变量的应用148
7.3指针与数组149
7.3.1指向数组元素的指针149
7.3.2指针与字符串151
7.3.3指针与二维数组的关系153
7.4指针与函数157
7.4.1指针作为函数的参数157
7.4.2返回值为指针的函数161
7.4.3函数指针162
7.5指针数组和指向指针的指针163
7.5.1指针数组164
7.5.2指向指针的指针165
7.5.3命令行参数与字符指针数组167
本章小结168
习题7169
第8章结构体172
8.1引例172
8.2结构体类型的声明和变量的定义173
8.2.1结构体类型的声明173
8.2.2结构体类型变量的定义174
8.2.3结构体变量的引用175
8.2.4结构体变量的初始化176
8.3结构体数组177
8.3.1定义结构体数组178
8.3.2结构体数组的初始化178
8.3.3结构体数组的引用178
8.4结构体指针180
8.4.1结构体指针变量的定义与引用180
8.4.2指向结构体数组的指针182
8.4.3结构体变量和指向结构体的指针作为函数参数183
8.5动态存储分配186
8.6链表187
8.6.1链表的概念187
8.6.2动态链表189
8.7共用体194
8.7.1共用体的概念194
8.7.2共用体变量的引用195
8.8枚举类型196
8.8.1枚举类型的定义196
8.8.2枚举变量的定义196
8.8.3枚举变量的赋值和使用196
8.9用typedef命名类型198
本章小结199
习题8200
第9章文件204
9.1文件概述204
9.1.1文件的概念204
9.1.2缓冲文件系统205
9.1.3文件结构和文件类型指针205
9.2文件的打开和关闭206
9.2.1文件打开函数206
9.2.2文件关闭函数207
9.3文件的读写207
9.3.1文件的字符输入输出函数208
9.3.2文件的字符串输入输出函数209
9.3.3文件的格式化输入输出函数211
9.3.4文件的数据块输入输出函数212
9.4其他文件函数214
9.5应用举例216
本章小结218
习题9218
第10章应用实例222
10.1数值计算222
10.1.1一维多项式求值222
10.1.2一元三点拉格朗日插值223
10.1.3对分法求非线性方程实根226
10.1.4线性方程组求解229
10.2排序233
10.2.1直接插入排序233
10.2.2希尔排序234
10.2.3快速排序235
10.2.4选择排序237
10.2.5归并排序238
10.3管理系统239
10.3.1系统功能239
10.3.2设计思路240
10.3.3代码实现242
本章小结248
习题10248
附录AASCII码表249
附录B运算符的优先级和结合性250
附录C常用库函数252
附录D预处理命令257
D.1宏定义257
D.2文件包含259
D.3条件编译259
附录E各章习题解析与提示261
参考文献274