本书以C语言作为教学语言,主旨是帮助读者理解高级语言程序设计,通过一种实用的编程语言,理解和掌握程序设计的思想、方法和基本技术,为继续学习相关课程打下坚实的基础。本书详细介绍了C语言和基本程序设计的各方面知识,包括与计算机、程序以及程序设计有关的基本概念,用计算机解决问题的思维方法,以及程序设计的基本技术。本书的内容选择、撰写方式和章节安排都认真考虑了入门课程和自学者的需求,也能很好地与后续课程衔接。
本书适合作为普通高等学校计算机科学与技术专业或其他专业的第一门程序设计课程的教材。
前?言
高级语言程序设计是各级高校中重要的理科基础课程。该课程的目的是帮助读者理解程序和计算,理解并掌握程序设计的思想、方法和基本技术,学习一种实用的编程语言,为在信息社会中继续学习和工作打下坚实的基础。长期以来,该课程都是以C语言为教学语言,原因在于C语言一直是业界使用非常广泛的语言之一,也是许多计算机专业课的支撑语言,它包含了最重要的基本程序设计机制,能较好地满足编程学习的需要。然而,随着时代的发展,尤其是Python语言的异军突起和机器学习、人工智能的突飞猛进,当前的教学改革趋势之一是减少该课程的教学时数,而增加其他课程的教学时数。很多高校中,以C语言为教学语言的高级语言程序设计课程教学时数已经由以前的64学时减少到40学时甚至32学时。在这种情况下,如何在有限的教学时间内让学生掌握必要的基础编程知识就成为教学实践中的重要问题。本书根据高等院校计算机基础教学改革的需要,结合编者多年来讲授相关课程的教学经验编写而成,以适应当代的教学实践需求。
本书在章节安排和内容选择上都认真考虑了入门课程和自学者的需求。各章节都精选C语言重点知识进行讲解,对细节知识也进行了简单说明,在内容编排上特别重视由易到难、稳步推进,以递进的方式讲解概念,用贴切的问题实例展示用法,通过多种方式相互呼应,帮助读者领悟并掌握与程序设计有关的概念、方法和技术。每个小节后面的配套习题可供学生进行书面练习或编程练习,而且每章末尾提供本章知识要点,可帮助学生掌握理论知识要点。
本书还特别强调对程序设计过程的正确认识,强调良好的程序设计风格,强调程序的良好结构、可读性、易修改性等。书中的源代码示例都力图反映这些方面,也尽量避免晦涩难懂的语句。书中在各章节适当地介绍常用的标准库函数,帮助读者在编程实践中熟练使用它们。
本书包含10章和若干附录,主要内容如下。
第1章 程序设计和C语言:介绍程序与程序设计语言的概念、C语言的发展及其特点,用一个简单例子介绍C程序的加工和执行,介绍集成开发环境Dev-C++的基本使用方法,并讨论程序开发和算法设计。
第2章 数据与简单计算:讨论C语言中最基本的概念,包括基本字符、标识符、关键字和语句,数据编码与基本数据类型,常量和变量,数据输出,运算符、表达式与计算等。
第3章 变量和顺序结构:介绍C语言中变量的概念、定义和使用,与变量相关的运算符和表达式,数据输入,数学函数及其使用,最后介绍程序调试和除错的基本方法。
第4章 选择结构:介绍关系运算和逻辑运算,实现选择结构的条件语句、条件表达式和switch语句。
第5章 循环结构:介绍支持循环执行的几种控制结构,循环程序中的常用方法,以及随机数相关函数和字符相关函数。
第6章 函数与程序:首先介绍函数的定义与调用,讨论程序的函数分解,然后介绍外部变量等概念。在此基础上介绍多文件开发相关技术。
第7章 数组:介绍数组的概念、定义和使用,数组作为函数参数,字符数组与字符串。
第8章 指针:介绍指针的概念和指针变量的使用,指针与数组的关系,指针作为函数参数,动态存储分配,指向函数的指针。
第9章 结构体和其他数据类型:首先介绍类型定义,然后介绍结构体的定义及其在程序中的使用,并简单介绍链表、共用体和枚举。
第10章 文件:介绍文件相关概念,顺序读写数据文件和二进制成块读写数据文件。
最后安排了4个附录,列出了C语言运算符、ANSI C关键字、C语言常用功能,并给出了本书中的命名规范。
为了方便读者阅读,本书把重要名词概念用黑体字标记,正文中的重要词句用粗楷体字标记,代码语法描述或伪代码中的重要字词用楷体字标记,重要源代码用波浪线标记。书中一些高级主题章节用星号标记,供学有余力的读者阅读。相关教学资料(教学课件、编程练习题参考答案和额外的习题等)可以从如下网址获取: />全书由三位编者共同搭建整体知识框架,确定各章节的内容安排,主要由李安邦负责执笔完成全书主体内容的撰写工作,陈绪君和裘宗燕聚焦审校环节,以严谨的专业视角对书稿进行全面细致的阅读,从内容的准确性、逻辑的连贯性及表述的规范性等多个维度提出修改建议,共同打磨和完善全书。三位编者始终秉持对教学内容负责的态度,通过紧密协作确保了本教材的专业性与实用性,希望能为广大读者提供有价值的学习参考。
由于编者水平有限,书中难免有错误或不足,恳请广大读者和同行进行批评指正。如果需要联系我们,请发邮件到anbangli@ccnu.edu.cn或qzy@math.pku.edu.cn。
编 者
2025年6月
李安邦,俄罗斯莫斯科大学数学-物理副博士,华中师范大学物理学院副教授,从事生物物理学研究,长期讲授计算机程序设计相关课程和大学物理课程。已出版多部著作和译著,包括《从问题到程序C/C++基础程序设计》(合著,机械工业出版社,2023年第1版)、《蛋白质物理》(译著,科学出版社,2013)和《无处不在的巨分子》(译著,科学出版社,2020)等。
陈绪君,理学博士,华中师范大学物理学院副教授,从事计算机视觉、自然语言模型和大语言模型等领域研究,主持或参与多项信息化系统项目。长期从事高级程序语言设计(C语言)数据结构和最优化理论等课程的教学工作,具有丰富的教学实践经验。
裘宗燕,北京大学数学学院信息科学系教授。长期从事计算机软件与理论、程序设计语言和符号计算方面的研究与教学工作。已出版多部著作和译著,包括《程序设计语言基础》(译著,北京大学出版社,1990)、《Mathematics数学软件系统的应用与程序设计》(编著,北京大学出版社,1994)、《C++程序设计语言(特别版)》(译著,机械工业出版社,2002)、《C++语言的设计和演化》(译著,机械工业出版社,2002)、《程序设计语言--概念和结构》(合译,机械工业出版社,2002)、《从问题到程序程序设计与C语言引论》(编著,机械工业出版社,2005年第1版,2011年第2版)、《从问题到程序C/C++基础程序设计》(合著,机械工业出版社,2023年第1版)等。
目?录
前言
第1章 程序设计和C语言1
1.1 计算机与计算机程序1
1.2 程序设计语言2
1.3 C语言的发展及其特点3
1.4 C程序快速入门5
1.4.1 C程序的加工和执行5
1.4.2 集成开发环境6
1.4.3 小龙Dev-C++使用简介6
1.4.4 一个简单的C程序8
1.5 程序开发和算法设计12
1.5.1 程序开发过程12
1.5.2 算法设计14
1.5.3 算法的表示14
1.6 程序除错18
本章知识要点20
第2章 数据与简单计算22
2.1 基本字符、标识符、关键字和
语句22
2.1.1 基本字符22
2.1.2 标识符和关键字22
2.1.3 语句和复合语句23
2.2 数据编码与基本数据类型24
2.2.1 二进制记数法24
2.2.2 定点整数的表示和整数类型26
2.2.3 浮点数的表示和浮点数类型27
2.2.4 字符的表示和字符类型29
2.3 常量和变量31
2.3.1 整型常量31
2.3.2 浮点型常量32
2.3.3 字符常量33
2.3.4 字符串常量33
2.3.5 符号常量34
2.3.6 枚举常量34
2.3.7 变量34
2.3.8 常变量35
2.4 数据输出36
2.4.1 数据输入/输出的概念36
2.4.2 用printf函数格式化输出36
2.4.3 输出字符和字符串40
2.5 运算符、表达式与计算41
2.5.1 算术运算符41
2.5.2 算术表达式42
2.5.3 算术表达式的求值42
2.5.4 混合类型计算和类型转换46
2.5.5 简单计算程序48
本章知识要点52
第3章 变量和顺序结构54
3.1 变量的概念、定义和使用54
3.1.1 变量的概念54
3.1.2 变量的定义54
3.1.3 变量的使用:赋值与取值55
3.1.4 赋值语句57
3.1.5 使用变量时的常见错误58
3.2 与变量相关的运算符和表达式60
3.2.1 赋值表达式的值与结合性60
3.2.2 复合赋值运算符61
3.2.3 自增和自减运算符62
3.2.4 对求值顺序敏感的表达式62
3.3 数据输入63
3.3.1 格式化输入函数scanf64
3.3.2 字符输入函数getchar68
3.3.3 数据输入注意事项69
3.4 数学函数及其使用72
3.4.1 标准库和函数原型72
3.4.2 数学函数74
3.5 程序调试和除错78
本章知识要点79
第4章 选择结构80
4.1 关系运算符和关系表达式80
4.2 逻辑运算符和逻辑表达式81
4.3 if语句84
4.4 条件运算符和条件表达式91
4.5 switch语句93
4.6 选择结构程序实例98
本章知识要点101
第5章 循环结构102
5.1 while语句102
5.2 do...while语句108
5.3 for语句111
5.4 循环的嵌套115
5.5 与循环有关的控制语句118
5.5.1 标志变量与break语句118
5.5.2 continue语句120
5.6 死循环121
5.7 循环程序应用实例122
5.7.1 生成与检查122
5.7.2 迭代与递推124
5.7.3 随机数模拟127
5.7.4 字符相关函数 130
本章知识要点133
第6章 函数与程序135
6.1 函数定义135
6.2 函数调用137
6.3 函数原型声明141
6.4 局部变量144
6.4.1 局部变量的作用域144
6.4.2 函数的参数机制146
6.4.3 局部变量的生存期147
6.5 函数编程实例149
*6.6 递归函数155
6.7 外部变量与静态局部变量158
6.7.1 外部变量158
*6.7.2 静态局部变量163
*6.7.3 变量的存储类别164
6.8 多文件开发简介166
6.8.1 文件包含预处理命令166
6.8.2 多文件开发中的文件组织167
*6.9 C语句172
本章知识要点174
第7章 数组177
7.1 一维数组177
7.1.1 定义一维数组177
7.1.2 引用一维数组元素178
7.1.3 一维数组的初始化181
7.1.4 一维数组程序举例184
*7.1.5 C99中的变长数组186
7.2 二维数组187
7.2.1 二维数组的定义和初始化187
7.2.2 二维数组程序举例188
7.3 数组作为函数参数190
7.3.1 数组元素作为函数实参190
7.3.2 外部数组191
7.3.3 一维数组作为函数参数192
*7.3.4 多维数组作为函数参数195
7.4 字符数组与字符串196
7.4.1 字符数组的定义和初始化196
7.4.2 字符数组中存储的字符串197
7.4.3 字符数组和字符串的输出与
输入198
7.4.4 字符数组/字符串应用202
7.4.5 字符串处理函数205
7.4.6 标准库字符串处理函数208
本章知识要点214
第8章 指针216
8.1 内存与地址216
8.2 指针变量的定义和使用218
8.2.1 指针变量的定义218
8.2.2 指针变量的赋值和初始化219
8.2.3 间接访问220
8.2.4 野指针、空指针与通用指针222
8.3 指针与函数224
8.3.1 指针作为函数参数224
8.3.2 指针作为函数返回值227
8.4 指针与数组229
8.4.1 指向数组的指针229
8.4.2 数组参数与指针参数231
*8.4.3 多维数组作为参数的通用
函数236
8.5 字符指针与字符数组238
8.5.1 字符指针和字符常量指针239
8.5.2 使用字符指针的函数240
8.5.3 标准库字符串函数原型242
*8.6 指针数组与多级指针244
*8.6.1 指针数组244
*8.6.2 多级指针247
*8.6.3 main函数的形参248
8.7 动态存储分配250
8.7.1 动态存储分配的定义250
8.7.2 动态存储分配函数251
8.7.3 动态存储分配示例程序253
8.8 指向函数的指针255
本章知识要点258
第9章 结构体和其他数据类型261
9.1 用typedef定义新类型名261
9.2 结构体类型和结构体变量262
9.2.1 定义结构体类型262
9.2.2 结构体变量的定义和使用265
9.3 结构体数组268
9.4 结构体指针270
9.4.1 指向结构体变量的指针270
9.4.2 指向结构体数组的指针271
9.4.3 结构体与函数272
*9.5 链表277
*9.6 共用体280
*9.7 枚举282
本章知识要点285
第10章 文件287
10.1 文件相关概念287
10.1.1 文件系统与文件名287
10.1.2 文本文件与二进制文件288
10.1.3 文件流和内存缓冲区288
10.1.4 文件类型指针289
10.2 打开与关闭文件289
10.2.1 用fopen函数打开数据
文件290
10.2.2 用fclose函数关闭数据
文件292
10.2.3 标准输入/输出流292
10.3 顺序读写数据文件293
10.3.1 格式化读写文本文件293
10.3.2 字符和字符串的文件读写296
10.3.3 文件读写示例:书目管理
系统299
*10.4 二进制成块读写数据文件308
10.4.1 二进制成块读写308
10.4.2 随机读写数据文件312
10.5 程序开发实例315
本章知识要点321
附录322
附录A C语言运算符表322
附录B ANSI C关键字列表322
附录C C语言常用功能速查323
附录D 命名规范324