第1章 计算机与程序设计概述 1
1.1 计算机的硬件组成 2
1.1.1 计算机硬件体系结构 2
1.1.2 存储器 3
1.1.3 处理器 4
1.1.4 输入输出设备 5
1.1.5 计算机工作过程 5
1.2 计算机的运算基础 7
1.2.1 数理逻辑 7
1.2.2 数制 8
1.3 计算机软件 12
1.3.1 操作系统 13
1.3.2 应用软件 14
1.3.3 计算机语言 15
1.3.4 C语言概述 17
1.4 计算机程序设计 19
1.4.1 程序设计方法 19
1.4.2 算法概述 20
1.4.3 算法结构 20
1.4.4 算法描述 21
1.4.5 良好的程序设计风格 23
1.5 习题 24
第2章 C语言基本概念 25
2.1 C语言要素 25
2.1.1 预处理指令 26
2.1.2 main函数 27
2.1.3 保留字 28
2.1.4 标识符 28
2.1.5 变量 29
2.1.6 语句 30
2.1.7 注释 31
2.2 变量和赋值 32
2.2.1 变量声明 33
2.2.2 数据类型 34
2.2.3 变量取值 38
2.2.4 类型转换 40
2.3 运算符和表达式 42
2.3.1 算术运算符和表达式 42
2.3.2 赋值运算符和表达式 45
2.3.3 自增运算符和自减运算符 46
2.3.4 条件运算符 48
2.4 数据的输入输出 49
2.4.1 标准字符输入输出函数getchar()和putchar() 49
2.4.2 格式化输入输出函数scanf()和printf() 50
2.5 地址运算符和指针 54
2.5.1 地址运算符 54
2.5.2 地址和指针 55
2.6 用C语言编写数学公式 58
2.6.1 数学公式的C语言表达形式 58
2.6.2 常用的数学函数 58
2.7 实例研究 60
2.8 习题 61
第3章 选择结构程序设计 63
3.1 逻辑表达式 63
3.1.1 关系运算 63
3.1.2 判等运算 65
3.1.3 逻辑运算 66
3.1.4 用逻辑表达式表示条件 67
3.1.5 短路求值 69
3.2 if语句 69
3.2.1 一个选项的if语句 70
3.2.2 两个选项的if语句 71
3.2.3 多个选项的if语句 73
3.2.4 具有复合语句的if语句 75
3.2.5 嵌套的if语句 77
3.3 switch语句 79
3.4 实例研究 84
3.5 习题 85
第4章 循环结构程序设计 88
4.1 程序中的重复 88
4.2 while语句 89
4.2.1 计数循环 89
4.2.2 标记控制循环 92
4.2.3 条件循环 95
4.2.4 文件结束控制循环 97
4.3 do-while语句 98
4.4 for语句 101
4.4.1 for语句基本用法 101
4.4.2 for语句中省略表达式 104
4.5 退出循环 105
4.5.1 break语句 106
4.5.2 continue语句 107
4.5.3 goto语句 108
4.6 循环的嵌套 109
4.7 实例研究 111
4.8 习题 117
第5章 数组 119
5.1 一维数组 119
5.1.1 一维数组定义 119
5.1.2 一维数组初始化 120
5.1.3 使用循环结构存取数组 122
5.2 一维数组应用 125
5.2.1 一维数组与查找 125
5.2.2 一维数组与删除 128
5.2.3 一维数组与插入 129
5.2.4 一维数组与统计 131
5.2.5 一维数组与排序 133
5.3 二维数组 134
5.3.1 二维数组的定义与赋值 134
5.3.2 二维数组应用 137
5.4 字符数组和字符串 140
5.4.1 字符数组定义 140
5.4.2 字符数组初始化 140
5.4.3 字符数组的输入输出 144
5.4.4 字符串处理函数 147
5.5 一维数组与指针 151
5.5.1 指向一维数组的指针 151
5.5.2 通过指针引用一维数组元素 152
5.5.3 指针与一维数组的应用 155
5.6 二维数组与指针 156
5.6.1 指针变量指向二维数组的某个元素 156
5.6.2 指向数组的指针变量指向二维数组某一行 158
5.7 字符串与指针 160
5.7.1 字符指针 160
5.7.2 指针数组 162
5.8 指向指针的指针 164
5.9 实例研究 165
5.10 习题 170
第6章 函数 171
6.1 函数定义 172
6.1.1 有参函数的定义 172
6.1.2 无参函数的定义 175
6.2 函数调用及参数传递 177
6.2.1 函数调用 177
6.2.2 参数传递 179
6.2.3 函数的返回值 181
6.2.4 函数声明 182
6.3 函数的嵌套调用 184
6.4 函数调用与地址传递 185
6.4.1 传值调用与传地址调用 185
6.4.2 返回值与返回地址 191
6.5 函数指针 193
6.6 局部变量与全局变量 194
6.6.1 局部变量 194
6.6.2 全局变量 195
6.7 变量的存储类别 196
6.8 编译预处理 198
6.8.1 宏定义 198
6.8.2 文件包含 201
6.8.3 条件编译 201
6.9 实例研究 203
6.10 习题 205
第7章 结构、共用、枚举及位运算 207
7.1 结构 207
7.1.1 结构类型的声明 207
7.1.2 结构变量的定义和初始化 209
7.1.3 结构变量的引用 211
7.1.4 结构数组的定义和引用 214
7.1.5 结构指针变量的定义和引用 216
7.1.6 结构指针变量作函数参数 220
7.2 共用 224
7.2.1 共用类型的定义 224
7.2.2 共用类型的使用 225
7.3 枚举 226
7.3.1 枚举类型的定义 226
7.3.2 枚举类型的使用 228
7.4 位运算 229
7.4.1 二进制位运算 229
7.4.2 按位与运算 229
7.4.3 按位或运算 231
7.4.4 按位异或运算 231
7.4.5 按位取反运算 232
7.4.6 左移运算 232
7.4.7 右移运算 232
7.5 实例研究 233
7.6 习题 236
第8章 文件 238
8.1 文件概述 238
8.1.1 文本文件与二进制文件 238
8.1.2 缓冲文件系统 239
8.1.3 文件类型指针 240
8.2 文件的打开与关闭 241
8.2.1 文件的打开fopen()函数 242
8.2.2 文件的关闭fclose()函数 243
8.3 文件的顺序读写 245
8.3.1 fgetc()和fputc()函数 245
8.3.2 fgets()和fputs()函数 248
8.3.3 fread()和fwrite()函数 250
8.3.4 fscanf()和fprintf()函数 253
8.4 文件定位 255
8.5 实例研究 258
8.6 习题 259
第9章 动态数据结构 261
9.1 链表的概念 261
9.2 动态内存分配 264
9.3 单链表 265
9.3.1 单链表的建立 265
9.3.2 单链表的访问 268
9.3.3 单链表的插入 270
9.3.4 单链表的删除 273
9.4 实例研究 274
9.5 习题 277
第10章 算法设计初步 278
10.1 递推与迭代 278
10.1.1 求平方根 278
10.1.2 等比数列 279
10.2 枚举 280
10.2.1 百钱百鸡问题 280
10.2.2 完全数 282
10.3 递归与分治 283
10.3.1 递归 283
10.3.2 分治 286
10.4 排字 287
10.4.1 直接插入排序 287
10.4.2 冒泡排序 289
10.5 数学问题 292
10.5.1 最大公约数及最小公倍数 292
10.5.2 具有特殊性质的数 294
10.6 习题 295
附录A ASCII码表及其控制字符的含义 297
附录B Visual C++下基本数据类型表示及取值范围 299
附录C 常用运算符 300
附录D 常用库函数 302
附录E 常见错误分析表 307
附录F 在线判题系统(NBU OJ)简介 320
参考文献 323