第1章 概述 1
1.1 自然语言和计算机语言 1
1.2 C语言及C++语言 2
1.3 简单的C/C++程序及其运行方法(环境的使用) 2
1.3.1 C/C++程序开发运行环境 2
1.3.2 格式化输出输入函数printf()和scanf() 5
习题 8
第2章 基本的C/C++语言 9
2.1 C/C++语言中的名词——类型、量值(常量和变量) 9
2.1.1 整型和整型量值 9
2.1.2 浮点型和浮点量值(常量和变量) 11
2.1.3 字符型和字符量值(常量和变量) 12
2.1.4 字符串常量 13
2.2 C/C++语言中的动词—运算符、短语—表达式和特殊动词性关键字 14
2.2.1 赋值运算符和赋值表达式 14
2.2.2 算术运算符和算术表达式 15
2.2.3 逻辑运算符和逻辑表达式 17
2.2.4 关系运算符和关系表达式 18
2.2.5 其他运算符和表达式 19
2.2.6 不同类型量值的不同运算的混合 21
2.3 C/C++语言中的连词及句子——分支、循环和顺序结构 24
2.3.1 顺序结构 25
2.3.2 if…else——分支结构 25
2.3.3 switch…case——分支结构 27
2.3.4 ?…:——分支结构 29
2.3.5 for——循环结构 29
2.3.6 while——循环结构 31
2.3.7 do…while——循环结构 31
2.3.8 goto…label…if——循环结构 32
2.3.9 break——终止循环或开关 34
2.3.10 continue——终止本次循环 35
2.4 C/C++语言中的句子小结 35
2.5 用C/C++语言编写程序——段落 36
2.6 用C/C++语言编写复杂段落——语句嵌套 36
2.6.1 复杂段落——语句嵌套的含义 36
2.6.2 嵌套语句的示例 37
2.6.3 复杂段落…语句嵌套的小结 40
2.7 总结 42
习题 43
第3章 C/C++语言的横向名词性扩充 44
3.1 C/C++语言的横向名词性扩充(1):同类变量的集合——数组 44
3.1.1 一维数组 44
3.1.2 二维数组 48
3.1.3 n维数组 52
3.1.4 字符数组 52
3.2 C/C++语言的横向名词性扩充(2):自定义类型——typedef 58
3.2.1 简单类型的自定义 58
3.2.2 同类集合类型的自定义——变量数组类型的定义 58
3.3 C/C++语言的横向名词性扩充(3):异类集合类型和异类集合变量——结构体型(值)、共用体型(值)、枚举型(值) 59
3.3.1 结构体类型和结构体变量 59
3.3.2 共用体类型和共用体变量 62
3.3.3 枚举类型和枚举变量 62
3.4 C/C++语言的横向名词性扩充(4):异类集合类型的同类集合类型——结构体数组 65
3.5 各种横向扩充类型的融合使用 68
习题 71
第4章 C/C++语言的纵向名词性扩充(1):指针 72
4.1 简单指针类型和指针量值(常量和变量) 72
4.1.1 变量的三层含义 72
4.1.2 变量的指针和指针类型的变量 73
4.1.3 与指针相关的动词补充——&和*运算符 73
4.1.4 指针和指针变量示例 74
4.2 同类集合变量——数组的指针和对应的指针变量 76
4.2.1 一维数组的指针和操作一维数组的指针变量——本质上是指向单个变量的指针变量 76
4.2.2 二维数组的各级指针 80
4.2.3 操作二维数组的各种指针变量——本质上是指向简单变量和一维数组的指针变量 85
4.2.4 m维数组的指针和指向m维数组的指针变量 89
4.3 指向指针变量的指针量值——二级指针 89
习题 97
第5章 C/C++语言的纵向名词性扩充(2):函数 98
5.1 函数的构成 98
5.1.1 函数的定义 98
5.1.2 函数的声明和调用 99
5.1.3 函数的参数和返回值 99
5.2 不同参数和不同返回值形式的各种函数 100
5.2.1 无返回值函数 100
5.2.2 参数或返回值是异类集合量值的函数 101
5.2.3 参数是简单指针量值的函数 102
5.2.4 异类集合类型的指针量值作为函数的参数或返回值 105
5.2.5 函数的参数是和一维数组名对应的指针量值 108
5.2.6 函数的参数是和二维数组名对应的指针量值 109
5.2.7 返回值是指针量值的函数 111
5.3 函数的多级调用 114
5.3.1 函数的嵌套调用 114
5.3.2 函数的递归调用 116
5.4 函数的指针和指向函数的指针变量 117
5.4.1 函数的指针 117
5.4.2 指向函数的指针变量 118
5.5 main函数的参数 121
5.6 动态内存管理函数 122
习题 124
第6章 名词的空间域、时间域和物理存储位置 126
6.1 C/C++程序的逻辑结构 126
6.2 名词性的类型和量值在各逻辑结构上的空间域 127
6.2.1 模块域 127
6.2.2 嵌套模块的层域 128
6.2.3 文件域 130
6.2.4 工程域 132
6.2.5 工作区域 134
6.3 名词性的类型和量值在各逻辑结构上的时间域 134
6.3.1 模块内static 134
6.3.2 文件内的static 135
6.3.3 关于static的总结 136
6.4 变量的物理存储位置 136
习题 137
第7章 编译预处理 138
7.1 简单替换宏——符号常量 138
7.2 复杂替换宏——宏函数 140
7.3 批量的嵌入——文件包含 142
7.4 条件编译 143
7.4.1 #ifndef…#else…#endif 143
7.4.2 #ifdef…#else…#endif 148
7.4.3 #if…#else…#endif 149
7.4.4 assert故障诊断 149
7.4.5 字符串替换—— 150
7.4.6 数字链接—— 150
习题 151
第8章 C/C++语言的纵向名词性扩充(3):宏观扩充——文件 152
8.1 输入输出流和文件的指针 152
8.1.1 输入输出流 152
8.1.2 文件的指针 153
8.2 文件的打开和关闭 153
8.2.1 文件的物理形式 153
8.2.2 文件的打开 153
8.2.3 文件的关闭 155
8.3 文件的顺序读写 155
8.3.1 向文件中顺序输出(写)字符 155
8.3.2 从文件中顺序输入(读)字符 156
8.3.3 顺序多个数据读写 158
8.3.4 文件的格式化输入和输出 161
8.3.5 文件的字符串读写 161
8.4 文件内的定位和随机读写 163
8.4.1 检测文件位置指针 163
8.4.2 置文件位置指针于文件头 163
8.4.3 置文件位置指针于指定位置 163
8.5 文件的出错控制 166
8.5.1 检查是否到达文件尾feof() 167
8.5.2 检查当前文件操作是否出错ferror() 167
8.5.3 清除文件错误标识clearerr() 167
习题 167
第9章 C/C++语言的纵向名词性扩充(4):微观扩充——位和位域 168
9.1 位运算 168
9.1.1 位运算符和位运算 168
9.1.2 位运算举例 170
9.2 位域 171
习题 173
附录 习题答案 174
参考文献 195