第1章 程序设计基础与编程规范 1
1.1 程序设计与编程工具 1
1.1.1 程序与程序设计的概念 1
1.1.2 为什么要学程序设计 1
1.1.3 为什么要学习C程序设计 2
1.2 程序的基本结构和要素 3
1.2.1 程序的基本结构 3
1.2.2 输入输出 3
1.3 程序设计一般方法 3
1.4 编程规范 3
1.4.1 为什么要遵守编程规范 4
1.4.2 编程规范的基本要求 4
1.4.3 标识符命名 4
1.4.4 缩进 6
1.4.5 空行 7
1.4.6 一行只写一条语句 7
1.4.7 if、for、while语句体加括号{} 7
1.4.8 每行只声明同一类变量 8
1.4.9 函数要先声明后定义 8
1.4.10 注释 8
1.4.11 函数返回类型与return语句不缺省 9
1.4.12 例1-1:鸡兔同笼 9
1.5 程序设计方法学 11
1.5.1 算法 11
1.5.2 算法的描述 12
1.5.3 程序流程图 12
1.5.4 算法的评价 13
1.6 提问的智慧 13
1.6.1 三思而后问——提问之前 13
1.6.2 提问的技巧 14
1.6.3 技术问题应全部公开 14
1.6.4 问题解决后 14
习题 14
第2章 数据类型与表达式 16
2.1 标识符与关键字 16
2.1.1 标识符及其命名规则 16
2.1.2 关键字 17
2.2 数据类型 17
2.3 变量 17
2.3.1 变量的概念 17
2.3.2 变量的声明 18
2.3.3 变量的赋值 19
2.3.4 例2-1:变量赋初值示例 19
2.3.5 变量的存储类型 20
2.3.6 const类型变量 20
2.4 常量 21
2.4.1 直接常量(字面量) 21
2.4.2 符号常量 21
2.4.3 例2-2:常量示例——已知价格和数量,计算总价 22
2.4.4 整型常量 22
2.4.5 浮点型常量 22
2.4.6 字符型常量 23
2.4.7 字符串常量 23
2.4.8 转义字符 23
2.5 ASCII表 24
2.5.1 ASCII编码规则 24
2.5.2 字符与ASCII码的运算 25
2.6 运算符 25
2.6.1 赋值运算符 26
2.6.2 算术运算符 26
2.6.3 数据类型强制转换 27
2.6.4 逻辑运算符 28
2.6.5 关系运算符 28
2.6.6 自增自减运算符 29
2.6.7 复合赋值运算符 30
2.6.8 条件运算符 31
2.6.9 逗号运算符 31
2.6.10 sizeof运算符 31
2.6.11 例2-3:sizeof操作符使用示例——输出常用数据类型字节数 31
2.6.12 运算符的优先级和结合性 32
2.7 表达式 32
2.7.1 表达式的概念 32
2.7.2 数据类型转化 33
2.8 语句 34
2.8.1 赋值语句 34
2.8.2 用逗号分隔开的声明语句 35
2.8.3 变量声明时赋值 35
习题 35
第3章 基本输入输出 37
3.1 标准输入输出函数 37
3.2 标准输入函数scanf() 37
3.3 标准输出函数printf() 39
3.3.1 格式输出中常用转义字符 41
3.4 输入输出函数的应用示例 42
例3-1:scanf()与printf()应用——圆面积、周长 42
习题 43
第4章 选择控制 44
4.1 顺序控制 44
例4-1:交换两变量的值 44
4.2 if选择控制语句 46
4.2.1 if单分支语句 46
4.2.2 例4-2:if单分支语句——成绩通过通知 46
4.2.3 if…else双分支语句 47
4.2.4 例4-3:if双分支语句——成绩是否通过判断 47
4.2.5 if…else if…else多分支语句 47
4.2.6 例4-4:if多分支语句——成绩等级转换 48
4.2.7 嵌套if语句 51
4.2.8 例4-5:嵌套if语句——闰年判断 51
4.3 switch…case语句 53
4.3.1 switch语句格式 54
4.3.2 例4-6:switch语句示例——成绩等级转换 54
习题 55
第5章 循环控制 57
5.1 循环控制语句 57
5.2 for语句 57
5.2.1 for语句的一般形式与使用说明 57
5.2.2 for循环注意事项 59
5.2.3 例5-1:for语句——计算1+2+3+…+100 59
5.3 while语句 60
5.3.1 while语句的一般形式 60
5.3.2 例5-2:while语句应用——计算1+2+3+…+n 60
5.4 do…while语句 61
5.4.1 do…while语句的一般形式 61
5.4.2 do…while循环的使用说明 61
5.4.3 例5-3:do…while语句应用——计算1+2+3+…+100 62
5.5 break语句 62
5.5.1 break语句使用说明 62
5.5.2 例5-4:break语句应用——计算1+2+…+100时从某项终止 63
5.6 continue语句 63
5.6.1 continue语句使用说明 63
5.6.2 例5-5:continue语句应用——求1+2+…+10时跳过某项 63
5.7 goto语句 64
5.7.1 goto语句的使用格式 64
5.7.2 例5-6:goto语句应用——求1+2+…+n大于1000的最小项n 64
5.8 选择语句、循环语句综合编程 65
5.8.1 例5-7:直角三角形图案输出 66
5.8.2 例5-8:等腰三角形图案输出 69
5.8.3 例5-9:空心矩形图案输出 70
5.8.4 例5-10:输出水仙花数 71
5.8.5 例5-11:素数判断 72
5.8.6 例5-12:计算ex=1+x+x2/2!+…+xn/n! 74
5.8.7 例5-13:斐波那契数列 76
习题 79
第6章 数组 81
6.1 一维数组 81
6.1.1 数组的概念 81
6.1.2 一维数组的声明 81
6.1.3 数组元素引用 82
6.1.4 例6-1:数组元素逆序输出 82
6.1.5 一维数组的初始化 83
6.1.6 例6-2:冒泡排序法 84
6.2 二维数组 86
6.2.1 二维数组的声明 86
6.2.2 二维数组的初始化 86
6.2.3 例6-3:矩阵转置 87
6.3 高维数组 88
习题 88
第7章 字符数组与字符串 90
7.1 字符数组 90
7.1.1 字符数组概念 90
7.1.2 字符数组的声明与赋值 90
7.1.3 例7-1:字符数组元素输出为ASCII码值 92
7.1.4 例7-2:字符数组结束标识 92
7.2 字符串 93
7.3 字符串输入输出函数 93
7.3.1 函数scanf()和printf()输入输出字符串 93
7.3.2 例7-3:scanf()和printf()函数输入输出字符串 94
7.3.3 函数gets()和puts() 95
7.3.4 例7-4:gets(),puts()函数应用示例 95
7.3.5 函数getchar() 96
7.3.6 例7-5:getchar()函数应用——将输入的字符串逆序输出 96
7.4 常用字符串函数 96
7.4.1 字符串长度函数strlen() 97
7.4.2 例7-6:strlen()函数示例——求字符串长度 97
7.4.3 字符串连接函数strcat() 97
7.4.4 例7-7:strcat()函数使用示例——连接字符串 98
7.4.5 字符串复制函数strcpy() 98
7.4.6 例7-8:strcpy()函数使用示例——字符串复制 99
7.4.7 字符串比较函数strcmp() 99
7.4.8 例7-9:strcmp()函数应用——口令系统 99
7.5 字符数组与字符串的区别 101
例7-10:字符数组与字符串区别示例 101
7.6 字符串数组 102
例7-11:字符串数组示例 102
习题 103
第8章 函数 105
8.1 函数概念 105
8.2 函数的定义 106
8.2.1 函数的定义格式 106
8.2.2 函数的声明和调用 106
8.2.3 例8-1:简单函数示例 106
8.2.4 函数嵌套调用 108
8.2.5 例8-2:函数的嵌套调用 108
8.3 函数参数的传递 109
8.3.1 形式参数和实际参数 109
8.3.2 变量作为函数参数 109
8.3.3 例8-3:函数参数传递 110
8.3.4 例8-4:函数的多参数传递 110
8.3.5 例8-5:函数的实参与形参同名 111
8.3.6 函数的返回值 112
8.3.7 例8-6:函数返回值——计算正方形面积 112
8.3.8 例8-7:输出区间[2,5000]上的第n个素数 114
8.3.9 例8-8:自定义判断素数头文件prime.h 116
8.3.10 例8-9:使用自定义头文件——孪生素数 117
8.4 递归函数 118
8.4.1 例8-10:递归函数——求阶乘n! 119
8.4.2 例8-11:递归函数——求1+2+3+…+n 120
8.5 变量作用域 120
8.5.1 作用域概念 120
8.5.2 局部作用域 121
8.5.3 例8-12:局部变量示例 121
8.5.4 全局作用域 121
8.5.5 例8-13:全局变量示例——输入半径求圆直径、周长、面积、体积 122
习题 123
第9章 指针 124
9.1 地址 124
9.1.1 地址的概念 124
9.1.2 变量与地址 124
9.1.3 例9-1:变量值与变量地址示例 125
9.1.4 数组与地址 126
9.1.5 例9-2:数组与地址示例 126
9.2 指针 128
9.2.1 指针的概念 128
9.2.2 例9-3:指针简单操作示例 128
9.2.3 指针运算 129
9.2.4 指向数组的指针 130
9.2.5 例9-4:指向数组的指针示例 131
9.2.6 指向字符串的指针 132
9.2.7 例9-5:指向字符串的指针——字符串小写字母变大写 132
9.2.8 指向函数的指针 133
9.2.9 例9-6:指向函数的指针——求两数中的最大数 133
9.2.10 双层指针与多层指针的概念 134
9.2.11 指向指针的指针 134
9.2.12 例9-7:指向指针的指针示例 135
9.2.13 指向二维数组的指针 136
9.2.14 例9-8:指向二维数组的指针示例 136
9.2.15 指向字符串数组的指针 137
9.2.16 例9-9:指向字符串数组的指针——大写字母变小写 138
9.3 函数参数的地址传递 139
9.3.1 指针作为函数参数 139
9.3.2 例9-10:指针作为函数参数示例 140
9.3.3 数组作为函数参数 141
9.3.4 例9-11:数组作为函数参数——数组元素乘10后输出 141
9.4 变量引用作为函数参数 142
9.4.1 引用的概念 142
9.4.2 例9-12:变量引用示例 143
9.4.3 例9-13:变量引用作为函数参数 144
习题 145
第10章 结构体 146
10.1 结构体的概念 146
10.2 结构体定义格式 146
10.3 结构体成员访问 147
例10-1:结构体应用——学生结构体 147
习题 148
第11章 文件 149
11.1 文件的概念 149
11.2 文件读写函数 150
11.2.1 文件流 150
11.2.2 文件FILE的数据结构 150
11.2.3 文件结构指针 150
11.2.4 文件的打开函数fopen() 151
11.2.5 关闭文件函数fclose() 151
11.2.6 文件的读写 152
11.2.7 例11-1:以字符形式读写文件操作示例 152
11.2.8 例11-2:以字符串形式读写文件操作示例 155
习题 156
附录A DevCPP的安装与使用 157
A.1 DevCPP简介 157
A.2 DevCPP软件安装 157
A.3 创建桌面快捷方式和任务栏快速启动方式 160
A.4 DevCPP的语言设置 160
A.5 DevCPP的工具条设置 161
A.6 第一个程序 162
A.7 DevCPP常用快捷键 163
附录B 程序的编辑与调试 165
B.1 程序的编辑 165
B.2 程序的编译 166
B.3 程序的运行 167
B.4 程序的基本调试方法 167
B.4.1 标准数据检验 167
B.4.2 程序跟踪 168
B.4.3 例B2-1:插入输出语句跟踪程序——冒泡排序法 168
B.4.4 边界检验 169
B.4.5 简化程序 169
B.5 DevCPP的跟踪调试功能 170
B.5.1 设置断点 170
B.5.2 调试 171
B.5.3 例B-2:DevCPP调试示例——循环中的变量 172
附录C ASCII表 175
附录D 运算符优先级与结合方向 176
参考文献 178