
本书按照程序设计的体系结构,系统地介绍了C程序设计的基本思想及基本方法。全书内容分为两部分。第一部分(第1~7章)依次介绍了C程序设计的基本应用:包括C程序的基本结构、基本运算量,以及结构化程序设计的顺序结构、选择结构、循环结构、数组及函数的开发方法与应用实现;第二部分(第8~12章)详细介绍了C程序设计的高级应用:包括预处理、结构体、共用体、指针、文件及位运算等应用。
本书从实用的角度出发,内容选取先进精准、组织循序渐进、讲解文字精练;各部分辅助图表、结合实例、深入浅出、结构清晰;典型实例精挑细选、算法分析流程图化、程序结构错落有致、程序结果真实有效;各章习题针对性强、题型丰富;免费提供电子课件、源程序及习题答案;详细介绍了开发环境Visual C++ 6.0的使用方法,全部例题均在此环境中成功运行。
本书可作为高等学校非计算机专业本科生的计算机通识教材,也可作为计算机相关专业的程序设计入门教材、计算机技术的培训教材,还可作为全国计算机等级考试的参考用书和编程爱好者自学C语言的自学教材。
本书对应的电子教案、习题答案和实例源文件可以到http://www.tupwk.com.cn /downpage网站下载。
前 言
C语言程序设计简单易学,具有广泛的用途,是非常适合高等学校各专业学生学习的程序设计语言,又是计算机学科的程序设计基础课。通过C语言程序的学习,读者可以运用相关知识和技能更好地进行算法和程序的设计,也为后继课程的学习打下良好的基础。
我们基于多年的丰富教学经验及素材积累,精心编写此书,目的是让初学者能循序渐进地掌握程序设计的思想,系统地掌握C语言程序设计的方法,从实用的角度出发,选取适当的相关案例,配备精练的讲解文字,辅助直观的算法流程图,编写缩进格式的实现程序,得到真实有效的运行结果。对于各种程序设计语言的共同概念,如数据类型、结构化程序设计的三种基本结构、数组及函数等进行深入讲解,使读者能够全面地理解程序设计语言,使读者能在此基础上自学其他程序设计语言。
全书共12章,第1章介绍C程序结构及其特点、Visual C++ 6.0的安装及使用;第2章介绍数据类型、常量、变量、函数和表达式;第3章介绍传统流程图及N-S结构化流程图、赋值语句、数据输入输出函数调用语句及顺序结构程序设计;第4章介绍关系运算符、逻辑运算符和表达式、用if语句和switch语句实现选择结构程序设计;第5章介绍用while语句、do-while语句和for语句实现循环结构程序设计及用break和continue语句提前结束循环;第6章介绍数组的定义和初始化、数组元素的使用、数值数组元素的常用操作、字符数组的使用;第7章介绍函数的定义、被调函数的声明、函数的调用、数组作函数参数、变量的作用域和存储类别;第8章介绍宏定义、文件包含、条件编译;第9章介绍结构体类型、共用体类型、枚举类型;第10章分别介绍指向变量的、指向数组的、指向函数的、指向指针的和指向结构体的指针变量及动态存储分配;第11章介绍文件的打开与关闭、文件的顺序读写和随机读写及文件检测函数;第12章介绍位运算符和位域。
除封面署名的作者外,在本书编写过程中,得到了所在学院的同事的热心帮助和支持,参加本书内容编写、程序调试、课件制作、习题收集、答案制作、内容审校等工作的老师还有李颖、于萍、逯洋、英昌盛、王海燕、叶丽娜、张桂杰、赵靖华、刘哲、李闯、张伟、赵鹏、王继魁、吕凯、刘伟、丛飚、刘松、孙英慧、邹晓辉、王发斌、刘艳玲、李爽、罗琳、王晓雪等,在此向他们表示衷心的感谢。
需要本书电子课件、源程序及习题答案的读者,请到清华大学出版社网站下载。
由于时间仓促,书中难免存在不妥之处,请读者原谅,并提出宝贵意见。我们的电话是010-62796045,信箱是huchnehao@263.net。
编者
年 月 日
目 录
第 1 章 引言 / 1
1.1 程序设计语言 / 1
1.1.1 低级语言 / 1
1.1.2 高级语言 / 2
1.2 程序结构及其特点 / 2
1.2.1 程序结构 / 3
1.2.2 程序结构的特点 / 3
1.2.3 程序书写规则 / 5
1.2.4 程序保留字 / 5
1.3 Visual C++ 6.0的安装及使用 / 6
1.3.1 Visual C++ 6.0的安装 / 7
1.3.2 Visual C++ 6.0的启动 / 7
1.3.3 Visual C++ 6.0上机过程 / 7
1.3.4 Visual C++ 6.0的退出 / 10
1.4 习题 / 10
第 2 章 数据类型及基本运算量 / 13
2.1 数据类型 / 13
2.1.1 基本数据类型 / 13
2.1.2 构造数据类型 / 15
2.1.3 指针类型 / 15
2.1.4 空类型(void) / 15
2.2 常量 / 15
2.2.1 直接常量 / 16
2.2.2 符号常量 / 18
2.3 变量 / 19
2.3.1 变量的种类 / 19
2.3.2 变量的定义 / 20
2.3.3 变量的使用 / 20
2.4 库函数 / 22
2.4.1 数学函数 / 22
2.4.2 输入输出函数 / 23
2.5 运算符及表达式 / 23
2.5.1 运算符及表达式简介 / 23
2.5.2 算术运算符和算术表达式 / 25
2.5.3 赋值运算符和赋值表达式 / 29
2.5.4 逗号运算符和逗号表达式 / 32
2.6 习题 / 33
第 3 章 顺序结构程序设计 / 35
3.1 结构化程序设计 / 35
3.1.1 结构化程序的特点 / 35
3.1.2 结构化程序的设计方法 / 35
3.2 传统流程图及N-S结构化流程图 / 36
3.3 C语句概述 / 38
3.4 赋值语句 / 40
3.5 数据输入输出函数调用语句 / 41
3.5.1 数据输入输出的方法 / 41
3.5.2 字符输入输出 / 41
3.5.3 格式输入与输出 / 43
3.6 顺序结构程序设计举例 / 50
3.7 习题 / 52
第 4 章 选择结构程序设计 / 55
4.1 选择结构程序设计概述 / 55
4.2 关系运算符和表达式 / 56
4.2.1 关系运算符 / 56
4.2.2 关系表达式 / 57
4.3 逻辑运算符和表达式 / 58
4.3.1 逻辑运算符 / 58
4.3.2 逻辑表达式 / 59
4.4 用if语句实现选择结构程序设计 / 60
4.4.1 if语句的3种形式 / 60
4.4.2 if语句的嵌套 / 65
4.4.3 条件运算符和条件表达式 / 67
4.5 用switch语句实现选择结构程序设计 / 68
4.6 选择结构程序设计举例 / 71
4.7 习题 / 75
第 5 章 循环结构程序设计 / 79
5.1 循环结构程序设计概述 / 79
5.2 用于实现循环结构程序设计的语句 / 80
5.2.1 用while语句实现循环结构程序设计 / 80
5.2.2 用do-while语句实现循环结构程序设计 / 86
5.2.3 用for语句实现循环结构程序设计 / 91
5.2.4 循环的嵌套 / 96
5.2.5 几种循环语句的比较 / 99
5.3 用break和continue语句提前结束循环 / 99
5.3.1 break语句 / 99
5.3.2 continue语句 / 101
5.4 循环结构程序设计举例 / 102
5.5 习题 / 105
第 6 章 数组 / 111
6.1 数组的概念 / 111
6.2 数组的定义 / 112
6.3 数组的初始化 / 114
6.4 数组元素的使用 / 116
6.5 数值数组元素的常用操作 / 119
6.5.1 一维数组元素的常用操作 / 119
6.5.2 二维数组元素的常用操作 / 130
6.6 数值数组的应用举例 / 135
6.6.1 一维数组程序举例 / 136
6.6.2 二维数组程序举例 / 140
6.7 字符数组的使用 / 141
6.7.1 字符串和字符串结束标志 / 141
6.7.2 字符数组的输入输出 / 142
6.7.3 字符串处理函数 / 143
6.8 字符数组应用程序举例 / 148
6.9 习题 / 149
第 7 章 用户自定义函数 / 155
7.1 用户自定义函数的种类 / 155
7.2 函数的定义 / 156
7.3 被调函数的声明 / 158
7.4 函数的调用 / 159
7.4.1 函数调用的一般形式 / 159
7.4.2 函数调用的方式 / 159
7.4.3 函数调用的参数传递 / 161
7.5 函数的嵌套调用 / 162
7.6 函数的递归调用 / 163
7.7 数组作函数参数 / 165
7.7.1 数组元素作函数实参 / 165
7.7.2 数组名作函数参数 / 166
7.8 变量的作用域 / 168
7.8.1 局部变量 / 168
7.8.2 全局变量 / 169
7.9 变量的存储类别 / 171
7.9.1 静态存储方式与动态存储方式 / 171
7.9.2 用auto声明动态局部变量 / 171
7.9.3 用static声明静态局部变量 / 172
7.9.4 用register声明寄存器变量 / 173
7.9.5 用extern声明外部变量 / 174
7.10 习题 / 175
第 8 章 预处理命令 / 181
8.1 宏定义 / 181
8.1.1 无参宏定义 / 181
8.1.2 带参宏定义 / 183
8.2 文件包含 / 189
8.3 条件编译 / 190
8.4 习题 / 191
第 9 章 用户自定义数据类型 / 193
9.1 结构体类型 / 193
9.1.1 结构体类型的定义 / 193
9.1.2 结构体类型变量的定义 / 194
9.1.3 结构体类型变量的成员变量的表示方法 / 195
9.1.4 结构体类型变量的成员变量的使用方法 / 196
9.1.5 结构体类型变量的初始化及整体赋值 / 197
9.1.6 结构体类型数组的定义和使用 / 197
9.2 共用体类型 / 199
9.2.1 共用体类型的定义 / 199
9.2.2 共用体类型变量的使用 / 199
9.3 枚举类型 / 201
9.3.1 枚举类型的定义 / 201
9.3.2 枚举类型变量的定义 / 202
9.3.3 枚举类型变量的使用 / 202
9.4 类型声明符typedef / 204
9.5 习题 / 206
第 10 章 指针 / 211
10.1 指针的基本概念 / 211
10.2 指向变量的指针变量 / 211
10.2.1 指针变量的定义 / 212
10.2.2 指针运算符 / 212
10.2.3 指针变量作为函数参数 / 215
10.3 指向数组的指针变量 / 217
10.3.1 指向数组的指针变量的定义与赋值 / 218
10.3.2 通过指针变量引用数组元素 / 218
10.3.3 指向数组的指针变量作函数参数 / 222
10.3.4 指向多维数组的指针和指向多维数组的指针变量 / 228
10.3.5 字符串的指针和指向字符串的指针变量 / 230
10.4 指向函数的指针变量和指针型函数 / 232
10.4.1 指向函数的指针变量 / 232
10.4.2 指针型函数 / 234
10.5 指针型数组和指向指针的指针变量 / 235
10.5.1 指针型数组的定义及使用 / 236
10.5.2 指向指针的指针变量 / 239
10.5.3 main函数的参数 / 240
10.6 指向结构体的指针变量 / 242
10.6.1 指向结构体变量的指针变量 / 242
10.6.2 指向结构体数组的指针变量 / 244
10.6.3 结构体指针变量作函数参数 / 245
10.7 动态存储分配 / 247
10.8 习题 / 249
第 11 章 文件 / 255
11.1 文件的种类 / 255
11.2 文件指针和文件内部的位置指针 / 256
11.3 文件的操作 / 256
11.4 文件的打开与关闭 / 258
11.4.1 文件打开函数fopen() / 258
11.4.2 文件关闭函数fclose() / 260
11.5 文件的顺序读写 / 260
11.5.1 字符读写函数fgetc()和fputc() / 260
11.5.2 字符串读写函数fgets()和fputs() / 262
11.5.3 数据块读写函数fread()和fwtrite() / 264
11.5.4 格式化读写函数fscanf()和fprintf() / 266
11.6 文件的随机读写 / 267
11.6.1 文件的定位 / 268
11.6.2 文件的随机读写 / 268
11.7 文件检测函数 / 269
11.7.1 文件结束检测函数feof() / 270
11.7.2 读写文件出错检测函数ferror() / 270
11.7.3 清除文件出错标志和结束标志函数clearerr() / 270
11.8 习题 / 270
第 12 章 位运算 / 273
12.1 位运算符 / 273
12.1.1 按位与运算 / 273
12.1.2 按位或运算 / 274
12.1.3 按位异或运算 / 275
12.1.4 按位求反运算 / 275
12.1.5 左移运算 / 275
12.1.6 右移运算 / 275
12.2 位域(位段) / 276
12.3 习题 / 279
参考文献 / 281