第1章 C 语言概述 1
1.1 C 语言的发展史 2
1.1.1 程序语言简述 2
1.1.2 C 语言的历史 2
1.2 C 语言的特点 3
1.3 一个简单的C 程序 3
1.4 一个完整的C 程序 5
1.5 C 语言程序的格式 8
1.6 开发环境 9
1.6.1 Dev C++ 9
1.6.2 Visual C++ 6.0 13
小结 14
上机指导 15
习题 15
第2章 算法 16
2.1 算法的基本概念 17
2.1.1 算法的特性 17
2.1.2 算法的优劣 17
2.2 算法的描述 18
2.2.1 自然语言 18
实例:用自然语言求n!
2.2.2 流程图 19
实例:画出趣味俄罗斯方块的流程图
2.2.3 N-S 流程图 22
实例:绘制N-S 流程图求n!
小结 24
上机指导 24
习题 24
第3章 数据类型 25
3.1 编程规范 26
3.2 关键字 26
3.3 标识符 27
3.4 数据类型 28
3.5 常量 29
3.5.1 整型常量 29
3.5.2 实型常量 31
3.5.3 字符型常量 32
实例1:输出字符常量
实例2:输出字符串常量
3.5.4 转义字符 34
3.5.5 符号常量 35
实例:输入半径,得到圆的面积
3.6 变量 36
3.6.1 整型变量 36
3.6.2 实型变量 38
实例:使用各种实型变量
3.6.3 字符型变量 40
实例:使用字符型变量
3.7 变量的存储类别 42
3.7.1 静态存储与动态存储 42
3.7.2 auto 变量 42
实例:使用auto 变量
3.7.3 static 变量 43
实例:使用static 变量
3.7.4 register 变量 43
实例:使用register 变量修饰整型变量
3.7.5 exter变量 44
实例:使用extem 变量
3.8 混合运算 45
实例:int、char、float 型变量相加,
得出double 型变量进行输出
小结 46
上机指导 46
习题 47
第1章 C 语言概述 1
1.1 C 语言的发展史 2
1.1.1 程序语言简述 2
1.1.2 C 语言的历史 2
1.2 C 语言的特点 3
1.3 一个简单的C 程序 3
1.4 一个完整的C 程序 5
1.5 C 语言程序的格式 8
1.6 开发环境 9
1.6.1 Dev C++ 9
1.6.2 Visual C++ 6.0 13
小结 14
上机指导 15
习题 15
第2章 算法 16
2.1 算法的基本概念 17
2.1.1 算法的特性 17
2.1.2 算法的优劣 17
2.2 算法的描述 18
2.2.1 自然语言 18
实例:用自然语言求n!
2.2.2 流程图 19
实例:画出趣味俄罗斯方块的流程图
2.2.3 N-S 流程图 22
实例:绘制N-S 流程图求n!
小结 24
上机指导 24
习题 24
第3章 数据类型 25
3.1 编程规范 26
3.2 关键字 26
3.3 标识符 27
3.4 数据类型 28
3.5 常量 29
3.5.1 整型常量 29
3.5.2 实型常量 31
3.5.3 字符型常量 32
实例1:输出字符常量
实例2:输出字符串常量
3.5.4 转义字符 34
3.5.5 符号常量 35
实例:输入半径,得到圆的面积
3.6 变量 36
3.6.1 整型变量 36
3.6.2 实型变量 38
实例:使用各种实型变量
3.6.3 字符型变量 40
实例:使用字符型变量
3.7 变量的存储类别 42
3.7.1 静态存储与动态存储 42
3.7.2 auto 变量 42
实例:使用auto 变量
3.7.3 static 变量 43
实例:使用static 变量
3.7.4 register 变量 43
实例:使用register 变量修饰整型变量
3.7.5 exter变量 44
实例:使用extem 变量
3.8 混合运算 45
实例:int、char、float 型变量相加,
得出double 型变量进行输出
小结 46
上机指导 46
习题 47
第4章 运算符与表达式 48
4.1 表达式 49
实例:求解二元一次不定方程ax+by=c 的解
4.2 赋值运算符与赋值表达式 50
4.2.1 变量赋初值 51
实例:模拟钟点工的计费情况,使用
赋值语句和表达式得出钟点工
工作8 个小时后所得的薪水
4.2.2 自动类型转换 52
4.2.3 强制类型转换 52
实例:通过不同类型变量之间的赋
值,将赋值操作后的结果进行输出
4.3 算术运算符与算术表达式 53
4.3.1 算术运算符 53
实例:求100~1000 之间满足各位
数字之和是5 的所有数
4.3.2 算术表达式 54
实例:使用算术表达式计算摄氏温度
4.3.3 优先级与结合性 55
实例:通过不同运算符的优先级和
结合性,使用printf 函数显
示终的计算结果
4.3.4 自增/自减运算符 57
实例:比较自增、自减运算符前缀
与后缀的不同
4.4 关系运算符与关系表达式 58
4.4.1 关系运算符 58
4.4.2 关系表达式 59
4.4.3 优先级与结合性 59
实例:使用if 语句判断两个学科的分数大小
4.5 逻辑运算符与逻辑表达式 61
4.5.1 逻辑运算符 61
4.5.2 逻辑表达式 61
实例:判断闰年
4.5.3 优先级与结合性 61
实例:使用逻辑运算符构造表达
式,通过输出函数显示表达
式的结果
4.6 位逻辑运算符与位逻辑表达式 62
4.6.1 位逻辑运算符 62
4.6.2 位逻辑表达式 63
4.7 逗号运算符与逗号表达式 63
实例:通过逗号运算符将其他运算
符结合在一起形成表达式,
再将表达式的终结果赋
值给变量
4.8 复合赋值运算符 64
实例:使用复合赋值运算符简化赋
值运算
小结 65
上机指导 67
习题 67
第5章 常用的数据输入/输出
函数 68
5.1 语句 69
5.2 字符数据输入/输出 69
5.2.1 字符数据输出 69
实例:使用putchar 函数,输出字
符串“Hello”
5.2.2 字符数据输入 70
实例1:使用getchar 函数获取在键
盘上输入的字符,再利用
putchar 函数进行输出
实例2:使用getchar 函数取消获取
回车符
5.3 字符串输入/输出 72
5.3.1 字符串输出函数 72
实例:使用puts 函数对字符串常量
和字符串变量都进行操作
5.3.2 字符串输入函数 73
实例:使用字符串输入函数gets 获
取输入信息
5.4 格式输出函数 74
实例:使用printf 函数输出字符花
5.5 格式输入函数 78
实例:利用scanf 函数得到用户
输入的两个整型数据
5.6 顺序程序设计应用 81
实例:将大写字符转换成小写字符
小结 83
上机指导 83
习题 83
第6章 选择结构程序设计 85
6.1 if 语句 86
6.2 if 语句的基本形式 86
6.2.1 if 语句形式 86
实例:使用if 语句模拟信号灯指挥
车辆行驶
6.2.2 if…else 语句形式 89
实例1:使用if…else 语句得到两个
数的大值
实例2:使用if…else 语句模拟信号灯
6.2.3 else if 语句形式 92
实例:使用else if 语句编写屏幕菜
单程序
6.3 if 的嵌套形式 95
实例:使用if 嵌套语句选择日程安排
6.4 条件运算符 97
实例:使用条件运算符计算欠款金额
6.5 switch 语句 99
6.5.1 switch 语句的基本形式 99
实例:使用switch 语句输出分数段
6.5.2 多路开关模式的switch 语句 103
实例:使用switch 语句设计欢迎界
面的菜单选项
6.6 if…else 语句和switch 语句的区别 104
6.7 选择结构程序应用 106
实例:使用switch 语句计算运输
公司的计费
小结 108
上机指导 108
习题 109
第7章 循环控制 110
7.1 循环语句 111
7.2 while 语句 111
实例:计算1 累加到100 的结果
7.3 do-while 语句 112
实例:使用do-while 语句计算1~
100 之间的累加结果
7.4 for 语句 114
7.4.1 for 语句使用 114
实例:打印俄罗斯方块的游戏窗口
7.4.2 for 循环的变体 117
实例:省略for 语句中的个
表达式
7.4.3 for 语句中的逗号应用 119
实例:计算1~100 之间所有偶数
的累加结果
7.5 3 种循环语句的比较 120
7.6 循环嵌套 120
7.6.1 循环嵌套的结构 120
7.6.2 循环嵌套实例 122
实例:使用嵌套语句打印欢迎界面
的边框
7.7 转移语句 124
7.7.1 goto 语句 124
实例:使用goto 语句从循环内部跳出
7.7.2 break 语句 125
实例:使用break 语句跳出循环
7.7.3 continue 语句 126
实例:使用continue 语句结束本次
的循环操作
小结 127
上机指导 128
习题 128
第8章 数组 129
8.1 一维数组 130
8.1.1 一维数组的定义和引用 130
实例:使用数组保存数据
8.1.2 一维数组初始化 131
实例:初始化一维数组
8.1.3 一维数组应用 134
实例:使用数组保存学生姓名
8.2 二维数组 135
8.2.1 二维数组的定义和引用 135
8.2.2 二维数组初始化 136
实例:使用二维数组标记游戏屏幕上的图案
8.2.3 二维数组应用 138
实例:打印游戏窗口,并设置左右下横框上有图案
8.3 字符数组 141
8.3.1 字符数组的定义和引用 141
8.3.2 字符数组初始化 141
实例:使用二维字符数组输出一个钻石形状
8.3.3 字符数组的结束标志 143
8.3.4 字符数组的输入和输出 144
实例:使用两种方式输出字符串
8.3.5 字符数组应用 145
实例:计算字符串中单词的个数
8.4 多维数组 146
8.5 数组的排序算法 146
8.5.1 选择法排序 146
8.5.2 冒泡法排序 148
8.5.3 交换法排序 150
实例:实现学生信息管理系统中的
学生成绩排名功能
8.5.4 插入法排序 152
8.5.5 折半法排序 154
8.5.6 排序算法的比较 156
8.6 字符串处理函数 157
8.6.1 字符串复制 157
实例:字符串复制应用
8.6.2 字符串连接 158
实例:字符串连接应用
8.6.3 字符串比较 160
实例:字符串比较应用
8.6.4 字符串大小写转换 161
实例:字符串大小写转换
8.6.5 获得字符串长度 163
实例:获得字符串长度
8.7 数组应用 164
8.7.1 反转输出字符串 164
8.7.2 输出系统日期和时间 165
8.7.3 字符串的加密和解密 166
小结 168
上机指导 168
习题 169
第9章 函数 170
9.1 函数概述 171
实例:在主函数中调用其他函数
9.2 函数的定义 172
9.2.1 函数定义的形式 173
9.2.2 定义与声明 174
实例:定义获取屏幕光标位置和设置文字颜色函数
9.3 返回语句 177
9.3.1 从函数返回 177
实例:从函数返回应用
9.3.2 返回值 178
实例:返回值类型与return 值类型
9.4 函数参数 180
9.4.1 形式参数与实际参数 180
实例:形式参数与实际参数的比喻实现
9.4.2 数组作函数参数 182
实例:数组元素作为函数参数
9.4.3 mai函数的参数 187
实例:main 函数的参数使用
9.5 函数的调用 188
9.5.1 函数的调用方式 188
实例:调用获取屏幕光标位置和设
置文字颜色函数,来设置趣
味俄罗斯方块的标题图
9.5.2 嵌套调用 193
实例:函数的嵌套调用
9.5.3 递归调用 195
实例:函数的递归调用
9.6 内部函数和外部函数 197
9.6.1 内部函数 197
实例:内部函数的使用
9.6.2 外部函数 198
实例:外部函数的使用
9.7 局部变量和全局变量 200
9.7.1 局部变量 200
实例1:局部变量的作用域
实例2:局部变量的屏蔽作用
9.7.2 全局变量 203
实例:使用全局变量模拟价格调整
9.8 函数应用 204
实例1:数学库函数使用
实例2:使用三角函数
实例3:使用字符函数判断输入字符
小结 210
上机指导 210
习题 211
第10章 指针 212
10.1 指针相关概念 213
10.1.1 地址与指针 213
10.1.2 变量与指针 214
10.1.3 指针变量 214
实例:从键盘中输入两个数,利用指
针的方法将这两个数输出
10.1.4 指针自加自减运算 218
实例:整型变量地址输出
10.2 数组与指针 219
10.2.1 一维数组与指针 219
实例:输出数组中的元素
10.2.2 二维数组与指针 223
实例:利用指针对二维数组进行输
入和输出
10.2.3 字符串与指针 226
实例:输入两个字符串a 和b,将
字符串a 和b 连接起来
10.2.4 字符串数组 228
实例:输出12 个月
10.3 指向指针的指针 229
实例1:使用指向指针的指针输出12 个月
实例2:利用指向指针的指针输出一维数组中是偶数的元
素,并统计偶数的个数
10.4 指针变量作函数参数 232
实例1:调用自定义函数交换两变量值
实例2:嵌套的函数调用
实例3:任意输入10 个数据,先将
这10 个数据中是奇数的数
据输出,再求这10 个数据
中所有奇数之和
10.5 返回指针值的函数 240
实例:使用返回指针的函数查找大值
10.6 指针数组作mai函数的参数 242
实例:输出main 函数的参数内容
小结 243
上机指导 243
习题 244
第11章 结构体和共用体 245
11.1 结构体 246
11.1.1 结构体类型的概念 246
11.1.2 结构体变量的定义 247
11.1.3 结构体变量的引用 248
实例:引用学生成绩结构体
11.1.4 结构体类型的初始化 250
实例:声明结构体类型表示商品,
然后定义结构体变量,之后
对变量中的成员进行赋值,
后将结构体变量中保存
的信息进行输出
11.2 结构体数组 251
11.2.1 定义结构体数组 251
11.2.2 初始化结构体数组 253
实例:初始化学生信息结构体数
组,并输出学生信息
11.3 结构体指针 254
11.3.1 指向结构体变量的指针 255
实例:通过指针使用点运算符引用
结构体变量的成员
11.3.2 指向结构体数组的指针 257
实例:根据学生结构类型定义结构
体数组,并对其进行初始化
操作
11.3.3 结构体作为函数参数 259
实例:声明一个简单的结构类型表
示学生成绩,编写一个函
数,使得该结构类型变量作
为函数的参数
11.4 包含结构的结构 262
实例:定义两个结构体类型,一个
表示日期,一个表示学生的
个人信息
11.5 链表 263
11.5.1 链表概述 263
11.5.2 创建动态链表 264
11.5.3 输出链表 266
实例:编写一个包含学生信息的链
表结构,并且将链表中的信
息进行输出
11.6 链表相关操作 268
11.6.1 链表的插入操作 269
11.6.2 链表的删除操作 270
实例:对学生信息链表进行删除操作
11.7 共用体 274
11.7.1 共用体的概念 274
11.7.2 共用体变量的引用 274
实例:定义共用体变量,通过定义
的显示函数,引用共用体中
的数据成员
11.7.3 共用体变量的初始化 275
实例:定义共用体变量的同时进行
初始化操作,并将引用变量
的值输出
11.7.4 共用体类型的数据特点 276
11.8 枚举类型 276
实例:使用枚举类型
小结 278
上机指导 278
习题 279
第12章 位运算 280
12.1 位与字节 281
12.2 位运算操作符 281
12.2.1 “与”运算符 281
实例:任意输入两个数分别赋给a
和b,计算a&b 的值
12.2.2 “或”运算符 283
实例:任意输入两个数分别赋给a
和b,计算a|b 的值
12.2.3 “取反”运算符 284
实例:输入一个数赋给变量a,计
算~a 的值
12.2.4 “异或”运算符 285
实例:输入两个数分别赋给变量a
和b,计算a^b 的值
12.2.5 “左移”运算符 287
实例:将15 先左移两位,将其左
移后的结果输出,在这个结
果的基础上再左移3 位,并
将结果输出
12.2.6 “右移”运算符 288
实例:将30 和-30 分别右移3 位,
将所得结果分别输出,在所
得结果的基础上再分别右
移两位,并将结果输出
12.3 循环移位 289
实例:从键盘中输入一个八进制数,
然后输入要移位的位数,后
将移位的结果显示在屏幕上
12.4 位段 292
12.4.1 位段的概念与定义 292
12.4.2 位段相关说明 293
小结 294
上机指导 294
习题 295
第13章 预处理 296
13.1 宏定义 297
13.1.1 不带参数的宏定义 297
实例:设计趣味俄罗斯方块的宏
13.1.2 带参数的宏定义 298
实例:对两个数实现乘法加法混合运算
13.2 #include 指令 299
实例:文件包含应用
13.3 条件编译 301
13.3.1 #if 命令 301
实例:#if 应用
13.3.2 #ifdef 及#ifndef 命令 304
实例:#ifdef 和#ifndef 的具体应用
13.3.3 #undef 命令 305
13.3.4 #line 命令 305
实例:输出行号
13.3.5 #pragma 命令 306
小结 306
上机指导 307
习题 307
第14章 文件 308
14.1 文件概述 309
14.2 文件基本操作 309
14.2.1 文件指针 309
14.2.2 文件的打开 310
14.2.3 文件的关闭 310
14.3 文件的读写 311
14.3.1 fputc 函数 311
实例:向E:exp01.txt 中写入
“forever…forever…”
14.3.2 fgetc 函数 312
实例:在屏幕中显示出exp02.txt 中
的内容
14.3.3 fputs 函数 312
实例:向指定的磁盘文件中写入字
符串“gone with the wind”
14.3.4 fgets 函数 313
实例:读取任意磁盘文件中的内容
14.3.5 fprintf 函数 314
实例:将数字88 以字符的形式写
到磁盘文件中
14.3.6 fscanf 函数 315
实例:将文件中的5 个字符以整数
形式输出
14.3.7 fread 和fwrite 函数 316
实例:将录入的通讯录信息保存到
磁盘文件中,并显示
14.4 文件的定位 318
14.4.1 fseek 函数 318
实例:向任意一个二进制文件中写
入一个长度大于6 的字符
串,然后从该字符串的第6
个字符开始输出余下字符
14.4.2 rewind 函数 320
实例:rewind 函数的应用
14.4.3 ftell 函数 321
实例:求字符串长度
小结 322
上机指导 323
习题 323
第15章 存储管理 324
15.1 内存组织方式 325
15.1.1 内存的组织方式 325
15.1.2 堆与栈 325
实例:在堆中分配内存并释放
15.2 动态管理 327
15.2.1 malloc 函数 327
实例:使用malloc 函数动态分配空间
15.2.2 calloc 函数 328
实例:使用calloc 函数分配数组内存
15.2.3 realloc 函数 329
实例:使用realloc 函数重新分配内存
15.2.4 free 函数 330
实例:使用free 函数释放内存空间
15.3 内存丢失 331
小结 332
上机指导 332
习题 333
第16章 网络套接字编程 334
16.1 内存组织方式 335
16.1.1 IP 地址 335
16.1.2 OSI 七层参考模型 335
16.1.3 地址解析 336
16.1.4 域名系统 337
16.1.5 TCP/IP 337
16.1.6 端口 339
16.1.7 套接字的引入 339
16.1.8 网络字节顺序 339
16.2 套接字概述 339
16.2.1 套接字概述 340
16.2.2 TCP 的套接字的socket 编程 340
16.2.3 UDP 的套接字的socket 编程 340
16.3 套接字函数 341
16.3.1 套接字函数介绍 341
16.3.2 基于TCP 的网络聊天程序 345
实例:设计网络聊天服务器端
小结 351
上机指导 352
习题 352
第17章 综合实例—学生信息
管理系统 353
17.1 开发背景 354
17.2 开发环境需求 354
17.3 系统功能设计 354
17.4 预处理模块设计 354
17.4.1 模块概述 354
17.4.2 控制输出格式 355
17.4.3 文件引用 355
17.4.4 宏定义 355
17.4.5 函数声明 355
17.5 主函数设计 356
17.5.1 功能概述 356
17.5.2 实现主函数 356
17.5.3 显示主菜单 358
17.6 录入学生信息 358
17.6.1 模块概述 358
17.6.2 实现文件的打开和关闭功能 359
17.6.3 实现录入学生信息 360
17.7 查询学生信息 362
17.7.1 模块概述 362
17.7.2 查询没有记录的文件 363
17.7.3 查找并打印学生信息 363
17.8 删除学生信息 364
17.8.1 模块概述 364
17.8.2 实现删除学生信息 364
17.9 修改学生信息 366
17.9.1 模块概述 366
17.9.2 实现修改学生信息 367
17.10 插入学生信息 368
17.10.1 模块概述 368
17.10.2 实现插入学生信息 368
17.11 学生成绩排名 370
17.11.1 模块概述 370
17.11.2 使用交换排序法实现排序功能 371
17.11.3 实现学生成绩排名 371
17.12 统计学生总数 372
17.12.1 模块概述 372
17.12.2 实现统计学生总数 372
17.13 显示所有学生信息 373
17.13.1 模块概述 373
17.13.2 读取并显示所有学生信息 374
小结 374