第1章 C语言基础知识介绍 1
1.1永不过时的C语言 1
1.1.1品味C语言这一坛老酒 1
1.1.2 C语言的发展史 2
1.1.3学习C语言还有用吗 2
1.2认识第一段C语言程序 3
1.2.1编写第一段C语言程序 3
实例1-1:第一段C语言程序(定义变量并进行算数操作) 3
1.2.2分析C语言程序的具体组成 4
1.3如何学好C语言 6
第2章 安装C语言开发工具 7
2.1一步到位的Visual Studio 7
2.1.1安装Visual Studio 2017 7
2.1.2使用Visual Studio 2017 9
实例2-1:使用Visual Studio 2017运行一个C程序 9
2.2使用DEV C++开发C语言程序 12
2.2.1安装DEV C++ 12
2.2.2使用DEV C++运行一个C语言程序 14
2.3使用Turbo C 3.0开发C语言程序 14
2.3.1安装Turbo C 3.0 14
2.3.2使用Turbo C 3.0 15
第3章 C语言语法基础 16
3.1标识符和关键字 16
3.1.1标识符 16
3.1.2关键字 17
3.2数据类型 19
3.3常量和变量 20
3.3.1常量 20
3.3.2变量 21
实例3-1:计算圆的周长和面积 23
3.4整型数据 24
3.4.1整型常量 24
3.4.2整型变量 26
实例3-2:计算两个整型变量的和 27
3.5实型数据类型 28
3.5.1实型常量 28
3.5.2实型变量 29
实例3-3:对一个很大的数和一个很小的数进行加法运算 29
3.6字符型数据 30
3.6.1字符常量详解 30
实例3-4:通过转义字符输出指定的文本字符 31
3.6.2字符串常量 32
实例3-5:我最喜欢的偶像是欧阳娜娜 32
3.6.3字符变量 33
实例3-6:将字符变量和整型变量进行相互赋值 33
3.7整型、实型和字符型数据之间的运算 34
3.7.1强制转换 34
实例3-7:将int类型强制转换为double类型 35
3.7.2自动转换 35
实例3-8:计算圆的大概面积和精确面积 36
第4章 运算符和表达式 37
4.1运算符和表达式介绍 37
4.2算术运算符和算术表达式 38
4.2.1算术运算符的分类 38
4.2.2单目运算符 39
实例4-1:使用单目运算符实现基本的数学运算 39
4.2.3双目运算符 39
实例4-2:获取任意小于1000的正整数的个位、十位、百位和千位的数字 40
4.3赋值运算符和赋值表达式 40
4.3.1基本的赋值运算符 41
4.3.2复合赋值运算符 43
4.3.3赋值表达式 43
实例4-3:实现基本的赋值表达式运算处理 43
4.4关系运算符和关系表达式 44
4.4.1关系运算符 44
4.4.2关系表达式 44
实例4-4:比较体重 45
4.5逗号运算符和逗号表达式 46
4.5.1逗号运算符 46
4.5.2逗号表达式 46
实例4-5:使用逗号运算符实现数学运算 47
4.6逻辑运算符和逻辑表达式 48
4.6.1逻辑运算符 48
4.6.2逻辑表达式 49
实例4-6:对变量进行逻辑运算处理,并输出运算后的结果 49
4.7求字节数运算符sizeof 50
实例4-7:使用sizeof运算符计算不同类型数据的字节大小 51
4.8运算符的优先级 52
第5章 数据的输入和输出 54
5.1语句介绍 54
5.1.1 C语句简介 54
5.1.2赋值语句 56
5.2 C语言内置的数据输入和输出函数 57
5.2.1使用字符输出函数putchar 58
实例5-1:使用函数putchar输出指定的字符 58
5.2.2使用字符输入函数getchar 59
实例5-2:使用getchar函数获取在键盘中输入的内容 60
5.2.3使用格式输出函数printf 60
实例5-3:使用printf函数输出不同格式变量a和b的数据 61
实例5-4:使用printf格式字符输出指定格式的数据 62
5.2.4使用格式输入函数scanf 64
实例5-5:输出显示用户输入字符的ASCII码和对应的大写字母 66
5.2.5使用字符串输出函数puts 67
实例5-6:使用函数puts输出指定的字符串 67
5.2.6使用字符串输入函数gets 68
实例5-7:输出显示用户的姓名和身高信息 68
第6章 使用流程控制语句 69
6.1顺序结构 69
实例6-1:计算三角形的面积 70
6.2选择结构 70
6.2.1单分支结构语句 71
实例6-2:从大到小排列3个数字 71
6.2.2双分支结构语句 72
实例6-3:判断用户输入内容的格式 72
实例6-4:判断变量a和b的值是多少 74
6.2.3使用多分支结构语句 75
实例6-5:提示用户输入数字,然后将用户输入的数字输出。 77
6.2.4条件运算符和条件表达式 77
实例6-6:比较两个数字的大小并输出最大数 79
6.3循环结构 79
6.3.1使用for语句 79
实例6-7:计算某个整数的阶乘 80
6.3.2使用while循环语句 81
实例6-8:依次输出1*1、 1*2…到1*20的积 82
6.3.3使用do-while语句 83
实例6-9:猜数游戏 84
6.3.4正确对待goto语句 84
实例6-10:统计从键盘输入一行字符的个数 85
6.3.5使用break语句 85
实例6-11:计算圆的面积 86
6.3.6使用continue语句 86
实例6-12:输出显示100到200之间的不能被3整除的整数 87
6.3.7死循环/退出程序 87
第7章 数组存储数据 89
7.1使用一维数组 89
7.1.1定义一维数组 89
7.1.2引用即使用 90
实例7-1:输出数组内的各个元素值 91
7.1.3数组需要初始化 91
实例7-2:实现一个由小到大排列的冒泡程序 92
7.2多维数组 93
7.2.1二维数组 93
实例7-3:输出显示10行杨辉三角 95
7.2.2使用多维数组 96
实例7-4:获取成绩最高分的球员编号 98
7.3使用字符数组与字符串 99
7.3.1侃侃字符数组 99
7.3.2字符串与字符数组 100
7.3.3字符数组的输入输出 101
实例7-5:比较两个字符串的大小 102
7.4使用字符处理函数和字符串处理函数 103
7.4.1使用测试字符串长度函数strlen 103
实例7-6:使用函数strlen输出程序中数组字符串的长度 103
7.4.2使用字符串大小写转换函数strupr和strlwr 103
实例7-7:分别输出输入字符串的小写形式和大写形式 103
7.4.3使用字符串复制函数strcpy和strncpy 104
实例7-8:复制用户输入的字符串 104
7.4.4使用字符串比较函数strcmp和strncmp 105
实例7-9:比较用户输入的字符串 106
7.4.5使用字符串连接函数strcat和strncat 106
实例7-10:连接用户输入的字符串 107
7.4.6将字符串转换成数值的函数 108
实例7-11:将用户输入的字符串转换为数值类型的值 108
7.4.7使用字符检测函数 109
实例7-12:判断字符串中各字符所占用的个数 109
7.4.8使用字符大小写转换函数tolower和toupper 110
实例7-13:将字符串分别输出转换为大写形式和小写形式 111
第8章 函数 112
8.1函数基础知识介绍 112
8.1.1函数的分类 112
8.1.2函数的定义 114
实例8-1:比较两个数字的大小 114
8.2函数声明和函数原型 115
8.2.1函数声明 115
实例8-2:求s=(1+2+3+…+n)/(1+2+3+…+m)的值 116
8.2.2函数原型 117
8.3函数的参数 117
8.3.1形参和实参详解 117
实例8-3:计算从1到某个数字值的和 118
8.3.2将数组作为函数参数 118
实例8-4:判断一个整数是否大于0 119
实例8-5:互换二维数组中行和列的元素 120
8.4函数的返回值 120
实例8-6:计算两个整数3和4的和 121
8.5实现函数的调用 122
8.5.1调用函数的格式 122
实例8-7:比较3个数字的大小 122
8.5.2函数调用的方式 123
实例8-8:计算最大公约数和最小公倍数 123
8.6函数的嵌套调用和递归调用 124
8.6.1函数嵌套调用详解 124
实例8-9:输出字符串中最长的单词 125
8.6.2函数递归调用 126
实例8-10:实现数学中Hanoi塔问题的解决方案 127
8.7变量的作用域 129
8.7.1局部变量作用域 129
实例8-11:计算长方体的体积和三个面的面积 129
8.7.2全局变量作用域 130
实例8-12:超市价格调整 130
8.8静态存储变量和动态存储变量 131
8.8.1静态存储和动态存储的区别 132
8.8.2四种变量存储类型 132
8.8.3自动变量 132
8.8.4外部变量 133
实例8-13:在函数间通过外部函数直接传递数据 134
8.8.5静态变量 134
实例8-14:使用静态变量设置初始值 136
8.8.6寄存器变量 136
实例8-15:使用register变量提升效率 136
8.9内部函数和外部函数 137
8.9.1内部函数详解 137
实例8-16:在不同的文件内使用同一个名称的函数 138
8.9.2使用外部函数 138
实例8-17:在一个文件内调用另一个外部函数 138
8.10库函数 139
8.10.1库函数介绍 139
8.10.2库函数的分类 139
第9章 使用指针 141
9.1指针和内存地址 141
9.2变量的指针和指向变量的指针变量 142
9.2.1声明指针变量 142
9.2.2初始化指针变量 143
9.2.3引用指针变量 144
实例9-1:将两个指针变量分别指向两个变量 145
9.2.4指针运算符 145
实例9-2:对输入的数字进行排序处理 146
9.2.5指针变量的运算 147
实例9-3:顺序显示数组内的元素并分别逆向输出 148
9.2.6指针变量作为函数参数 148
实例9-4:按照从小到大的顺序排序输出三个整数 150
9.2.7 void类型的指针 151
实例9-5:定义4个类型的变量,然后分别输出转换后的结果 151
9.3指针和数组 152
9.3.1数组元素的指针 153
9.3.2指向一维数组元素的指针变量 154
9.3.3通过指针引用数组元素 155
实例9-6:分别通过指向数组的指针引用数组、利用数组名和下标引用数组 156
9.3.4数组名作函数参数 158
实例9-7:将数组中的元素按相反顺序存放 158
实例9-8:输出数组元素中的最大值和最小值 159
9.4指针和多维数组 160
9.4.1多维数组的地址 160
实例9-9:输出显示二维数组元素的地址 162
9.4.2指向多维数组的指针变量 162
实例9-10: 2*3或3*4矩阵相乘运算 164
9.5指针和字符串 165
9.5.1指针访问字符串 165
实例9-11:把一个字符串的内容复制到另一个字符串中 166
9.5.2字符串指针作函数参数 167
实例9-12:使用函数调用复制字符串的内容 167
9.6指针数组和多级指针 168
9.6.1指针数组 168
9.6.2多级指针的定义和应用 169
实例9-13:对5个字符串进行排序 170
9.6.3指向指针的指针 171
9.6.4 main函数的参数 171
实例9-14:使用带参数的main函数输出指针数组参数的值 172
9.7指针函数和函数指针 173
9.7.1指针函数 173
9.7.2函数指针 173
第10章 结构体、共用体和枚举 177
10.1使用结构体 177
10.1.1定义结构体 177
10.1.2定义结构体类型变量 178
10.1.3引用结构体变量 180
实例10-1:输出显示对应的年龄和成绩 180
10.1.4初始化结构体变量 182
10.2结构体数组 183
10.2.1怎样定义结构体数组 183
实例10-2:计算主流手机的跑分成绩和不及格的数量 184
10.2.2初始化结构体数组 185
实例10-3:输出显示数组内的元素 185
10.2.3引用结构体数组 186
实例10-4:手机信息录入系统 186
10.3结构体指针 187
10.3.1怎样定义结构体指针变量 187
10.3.2初始化结构体指针变量 188
10.3.3引用结构体指针变量 188
实例10-5:输出显示结构体成员变量的信息 188
10.3.4指向结构变量的指针 189
10.3.5指向结构体数组的指针 190
实例10-6:输出显示主流手机的跑分成绩 190
10.4在函数中使用结构体 191
10.4.1结构体变量和结构体指针可以作为函数参数 191
实例10-7:计算某天在当年中是第几天 191
10.4.2函数可以返回结构体类型的值 192
实例10-8:输出显示所有学生的信息 192
10.5使用共用体(联合) 194
10.5.1怎样定义共用体和共用体变量 194
实例10-9:输出结构体和共同体的空间大小 194
10.5.2引用和初始化共用体变量 195
实例10-10:在定义的结构体内使用共用体成员 195
10.6使用枚举 196
10.6.1定义枚举类型 196
10.6.2定义枚举变量 197
10.6.3引用枚举变量 198
实例10-11:五色球问题解法 198
10.7使用typedef定义类型 199
10.7.1类型定义符typedef基础 199
10.7.2使用typedef 201
实例10-12:计算两个复数的乘积 201
第11章 链表 202
11.1链表基础 202
11.2链表和数组 203
实例11-1:解决“老鹰捉小鸡”问题 203
11.3单向链表 204
11.3.1单向链表基础 204
11.3.2使用单向链表 205
实例11-2:输出显示链表节点中的数据 205
第12章 位运算 207
12.1使用位运算符 207
12.1.1按位与运算符“&” 207
实例12-1:计算a&b的值 208
12.1.2按位或运算符“|” 209
实例12-2:计算a|b的值 209
12.1.3按位异或运算符“?” 210
实例12-3:计算a?b的值 211
12.1.4取反运算符“~” 211
实例12-4:计算~a的值 211
12.1.5左移运算符“〈〈” 212
实例12-5:使用左移运算符处理变量 212
12.1.6右移运算符“〉〉” 212
实例12-6:使用右移运算符处理变量 213
12.1.7位运算综合应用实例 213
实例12-7:对两个数(255,10)进行位运算并输出结果 213
12.2位域 215
12.2.1位域的定义和位域变量基础 215
12.2.2使用位域 216
实例12-8:输出显示变量的位域 217
第13章 预编译处理 218
13.1预编译基础 218
13.2使用宏定义 219
13.2.1不带参数的宏定义 219
实例13-1:使用不带参数的宏定义优化代码 220
13.2.2带参数的宏定义 221
实例13-2:使用带参数的宏定义优化代码 222
13.3文件包含 222
实例13-3:比较3个数字的大小并输出其中的最小值 222
13.4条件编译 224
13.4.1使用#ifdef…#else…#endif指令 224
13.4.2使用#ifdefined…#else…#endif指令 225
实例13-4:联合使用#i#ifdef和#i#ifndif指令 226
13.4.3使用#i#ifndef…#else…#endif指令 226
13.4.4使用#i#if!defined…#else…#endif指令 226
13.4.5使用#i#ifdef…#elif…#elif…#else…#endif指令 227
实例13-5:递增修改字母的值 228
13.4.6使用#line指令 228
实例13-6:使用#line指令修改代码的行号 229
第14章 文件操作 230
14.1计算机中的文件 230
14.1.1文件的分类 230
14.1.2文本文件 231
14.1.3文件分类 231
14.1.4文件指针 232
14.2打开与关闭文件 232
14.2.1打开文件 232
14.2.2关闭文件 235
实例14-1:通过各种方式操作本地硬盘中的指定文件 235
14.3文件读写 236
14.3.1读写字符函数getc、fgetc、 putc和fputc 237
实例14-2:读取指定文件的内容 237
实例14-3:将用户输入的一行字符写入一个文件中 238
14.3.2读写字符串函数fgets和fputs 239
实例14-4:读取目标文件中内容,并输出前10个字符 239
实例14-5:输出显示字符串的内容 240
14.3.3格式化读写函数fscanf和frintf 241
实例14-6:输出显示两个用户的数据 241
14.3.4数据块读写函数fread和fwtrite 242
实例14-7:将一组字符串数据存储在指定的目标文件中 242
14.3.5其他的读写函数 243
实例14-8:输出显示文件中的整数 244
14.4随机读写文件 244
14.4.1使用函数fseek 245
实例14-9:从文件中随机读取其中的某个数据 245
14.4.2使用函数rewind 246
14.4.3使用函数ftell 247
实例14-10:获得当前位置指针离文件开头的距离 247
14.5文件管理函数 248
14.5.1删除文件 248
实例14-11:使用函数remove删除一个文件 248
14.5.2重命名文件 248
实例14-12:使用函数rename重命名一个指定的文件 249
14.5.3复制文件 249
实例14-13:复制指定目标文件中的内容 250
14.6文件状态检测函数 251
14.6.1使用函数feof 251
14.6.2使用函数ferror 251
14.6.3使用函数clearerr 252
实例14-14:检测对文件读写时是否发生错误 252
第15章 内存管理 253
15.1 C语言的内存模型 253
15.2栈和堆 254
15.2.1操作栈 254
实例15-1:在堆中动态分配并释放内存 254
15.2.2操作堆 255
实例15-2:编写自定义函数时操作内存 255
15.3动态内存管理 256
15.3.1内存分配函数malloc 256
实例15-3:生成指定长度的随机字符串 256
15.3.2分配内存空间并初始化函数calloc 257
实例15-4:存储输入的数据 257
15.3.3重新分配内存函数realloc 258
实例15-5:使用函数realloc重新分配内存 259
15.3.4释放内存空间函数free 259
实例15-6:使用函数free释放内存空间 260
第16章 数据结构 261
16.1线性表 261
16.1.1线性表的特性 261
16.1.2顺序表操作 262
16.1.3使用顺序表操作函数 264
实例16-1:使用顺序表操作学生信息 264
16.2先进先出的队列 266
16.2.1什么是队列 266
16.2.2实现一个排号程序 267
实例16-2:模拟实现一个业务办理排号程序 267
16.3后进先出栈 270
16.3.1什么是栈? 270
16.3.2实现栈操作 271
实例16-3:使用栈操作员工信息 271
第17章 常用的C语言算法思想 273
17.1枚举算法 273
17.1.1枚举算法介绍 273
17.1.2百钱买百鸡 274
实例17-1:使用枚举法解决“百钱买百鸡”问题 274
17.2递推算法 274
17.2.1递推算法介绍 275
17.2.2斐波那契数列 275
实例17-2:使用顺推法解决“斐波那契数列”问题 275
17.3递归算法 276
17.3.1递归算法介绍 276
17.3.2汉诺塔 277
实例17-3:使用递归算法解决“汉诺塔”问题 277
17.4分治算法 279
17.4.1分治算法介绍 279
17.4.2大数相乘 280
实例17-4:用分治算法解决“大数相乘”问题 280
17.5贪心算法 282
17.5.1贪心算法介绍 282
17.5.2找零方案 283
实例17-5:使用贪心算法解决“找零方案”问题 283
17.6试探法算法 284
17.6.1试探法算法介绍 284
17.6.2八皇后 285
实例17-6:使用试探法算法解决“八皇后”问题 285
17.7迭代算法 287
17.7.1迭代算法介绍 287
17.7.2计算平方根 288
实例17-7:用迭代算法解决“求平方根”问题 288
第18章 开发图形化界面程序 290
18.1图形化界面程序介绍 290
18.2文本的屏幕输出和键盘输入 291
18.2.1在屏幕输出文本 291
实例18-1:显示7种不同的颜色 293
18.2.2键盘输入 296
18.2.3将屏幕分割为左右两个部分 297
实例18-2:设置输出屏的颜色,并分割为左右两个部分 297
18.3图形显示方式和鼠标输入 299
18.3.1初始化图形模式 299
18.3.2清屏和恢复显示函数 302
18.3.3建立独立图形运行程序 302
18.3.4基本绘图函数 303
18.3.5线性函数 307
18.3.6颜色控制函数 309
18.3.7填色函数和画图函数 312
实例18-3:绘制多个图形 315
18.3.8图形窗口函数 316
18.3.9图形方式下的文本输出函数 316
实例18-4:在图形模式下输出不同样式的文本 319
18.4菜单设计 320
18.4.1下拉式菜单 320
实例18-5:实现一个基本的下拉式菜单效果 320
18.4.2弹出式菜单 323
实例18-6:实现一个基本的弹出式菜单效果 323
第19章 学生成绩管理系统 328
19.1系统需求分析 328
19.1.1背景介绍 328
19.1.2需求分析 328
19.1.3可行性分析 329
19.1.4编写项目计划书 330
19.2系统功能模块 331
实例 19-1:学生成绩管理系统功能模块 331
19.3系统总体设计 332
19.3.1功能模块设计 333
19.3.2数据结构设计 334
19.3.3构成函数介绍 335
19.4系统具体实现 336
19.4.1预处理 337
19.4.2主函数main 337
19.4.3系统主菜单函数 338
19.4.4表格显示信息 339
19.4.5信息查找定位 340
19.4.6格式化输入数据 340
19.4.7增加学生记录 341
19.4.8查询学生记录 342
19.4.9删除学生记录 343
19.4.10修改学生记录 344
19.4.11插入学生记录 345
19.4.12统计学生记录 346
19.4.13排序处理 347
19.4.14存储学生信息 348
第20章 三江化工薪资管理系统 352
20.1项目介绍 352
20.2项目规划分析 353
20.2.1项目目的 353
20.2.2功能模块分析 353
20.3系统设计 354
20.3.1设计数据结构 354
20.3.2规划项目函数 355
20.4具体编码 355
20.4.1预处理 356
20.4.2查找定位模块 356
20.4.3格式化输入模块 357
20.4.4增加记录模块 357
20.4.5修改记录模块 358
20.4.6删除记录模块 359
20.4.7插入记录模块 361
20.4.8存储记录模块 363
20.4.9主函数模块 364
20.4.10主菜单模块 365
20.4.11统计记录模块 366
20.5客户有变 366
20.5.1查询记录模块 366
20.5.2排序显示模块 368
20.5.3最后的一些调整 368
20.6项目调试 370
第21章 启明星绘图板系统 374
21.1项目介绍 374
21.2项目规划分析 375
21.2.1绘图板的核心技术 375
21.2.2功能描述 375
21.2.3总体设计 376
21.3架构设计 377
21.3.1设计数据结构 377
21.3.2规划系统函数 377
21.4具体编码 379
21.4.1实现预处理模块 379
21.4.2实现功能控制模块 381
21.4.3实现保存加载模块 382
21.4.4实现鼠标控制模块 383
21.4.5图形绘制模块 384
21.4.6主函数模块 395
21.5项目调试 400