本书根据应用的需要,合理取舍,精选内容,采用读者容易理解的方法,力求深入浅出、通俗易懂。
本书的主要特色如下。
(1) 讲解预备知识,以飨基础薄弱者,利于无障碍地学会编程。
(2) 增加了运行环境介绍,使用VC编译工具,接轨国家等级考试。
(3) 详解程序调试,通过真题进行实战讲解,专门针对上机考试。
(4) 例题都给出了程序运行的真实截屏效果,以保障所讲解的程序是能够运行的。
(5) 习题经过细心琢磨,专为应试做准备,部分习题选自历年的考题。
(6) 各章末尾的案例实训是精选的综合性案例,具有一定的实用性。
(7) 篇末的项目实践贯穿主要的知识点,以加强系统性和实践性。
(8) 精选了网上的一些内容,博采众家之长,集众多优质案例于一书。
前 言
计算机程序设计语言现今已有数百种,常用的也有数十种,但很少有哪一种语言像C语言那样充满活力,流行近半个世纪经久不衰;也很少有哪一种语言像C语言那样在中国如此普及。国家计算机等级考试中,各级考试均离不开C语言的身影;国内高等院校几乎都把计算机文化基础和C语言作为理工科学生步入计算机领域的"敲门砖",C语言程序设计已成为理工科学生必备的技能之一。
C语言是20世纪70年代初期推出的编译型程序设计语言。经过近半个世纪的发展,C语言表现出了强大的生命力,已经从早期在少数小型机机种上使用的算法语言,发展成了当今在各类平台上普遍使用的通用程序设计语言。因为C语言具有强大的处理功能,特别是在某些方面可以替代汇编语言,所以熟练掌握C语言是现代计算机工作者应具备的基本条件,也是学习更高层次面向对象的C 语言的必备基础。
在近半个世纪的发展过程中,C语言的体系日臻完善,功能不断增强。与此相应,各种新型的C编译系统相继问世,C语言已从早期的"传统模式"发展为当前的"现代模式"。
鉴于目前流行的C语言编译系统大多数是以ANSI C89为基础开发的,所以本书以C89为基础并结合当前最常用的VC集成开发环境进行介绍,同时兼顾过去20年非常流行的Turbo C集成环境。总而言之,本书的宗旨在于向读者呈现一本内容新颖、系统全面、按现代编程风格介绍C语言程序设计的书籍。
本书共分为11章,各章的主要内容说明如下。
第1章介绍C语言的基础。考虑到计算机零基础读者的需要,本章适量增加了一些C语言预备知识。
第2章以VC为背景,介绍运行C语言程序的步骤与方法,并通过典型案例,介绍C语言程序的调试方法。
第3章介绍C语言的基本数据类型、常量、变量以及C语言的各种运算符与表达式。
第4章从结构化程序设计的角度,介绍C程序的流程设计,同时融入算法的概念。
第5章介绍最简单的构造类型--数组。
第6章介绍各种类型的函数,以及函数间数据传递的方法。
第7章介绍编译预处理。
第8章讨论C语言最重要的概念--指针及其特性。
第9章介绍C语言的另一种构造类型--结构体与共用体,同时,还介绍枚举类型和用typedef定义既有类型的方法。
第10章从实用出发,介绍用C语言处理文件的方法。
第11章为项目实践,用一个大案例贯穿本书的主要知识点。书后的附录列出了ASCII码表、C语言关键字、常用库函数以及运算符的优先级与结合性。
此处提请读者注意:全书中紧随程序代码后的是程序的运行结果截图。在各截图标题栏中显示的文件名及路径仅是作者调试程序时使用的临时文件名和路径。
本书作者在多年从事C语言教学和软件开发的基础上,参考了国内外有关的C语言著作,参考了因特网上诸多的优秀程序,并参照了近几年来一直延用的《2013年计算机二级C语言程序设计考试大纲》,完成了编著工作。因此,本书既可作为普通高等院校及大专院校的教材使用,又可供参加各类计算机考试的人员学习和参考。
本书由天津工业大学的杨连贺教授、天津市信息安全测评中心的赵玉玲、天津广播电视大学的丁刚副教授主编,池明文、李俊荣为副主编。在本书的编写过程中,还得到了天津大学软件学院的刘石英副研究员、高翔副研究员、曹军老师、沈士强老师的热情帮助和指导。天津农学院计算机与信息工程学院的靳润昭教授、烟台大学计算机与控制工程学院的贺利坚副教授、西北工业大学计算机学院的张彦春副教授提供了不少案例,天津工业大学计算机科学与软件学院的硕士研究生董禹龙和房超在程序调试方面也做了不少工作,在此一并向他们表示衷心的感谢。
限于作者的经验和水平,书中的错误与不足之处在所难免,希望得到专家和读者的批评指正。
作 者
2017年2月于天津工业大学
目 录
第1章 C语言基础.... 1
1.1 计算机语言的概念... 2
1.2 C语言的发展和特点... 3
1.2.1 概述... 3
1.2.2 C语言的发展历史... 4
1.2.3 C语言的特点... 5
1.3 计算机中数的表示及进制转换... 6
1.3.1 数制的概念... 6
1.3.2 数码、基数与位权... 6
1.3.3 各种进制之间的转换... 7
1.4 字节和位的概念... 9
1.5 整数的表示方法原码、反码
和补码... 10
1.5.1 整数的原码表示... 10
1.5.2 整数的反码表示... 10
1.5.3 整数的补码表示... 10
1.6 书写程序时应遵循的规则... 11
1.7 C语言程序的结构... 11
1.7.1 源程序结构... 11
1.7.2 C语言的字符集... 13
1.7.3 C语言的词汇... 14
1.8 简单的C程序举例... 15
1.9 运行C语言程序的步骤和方法... 17
第2章 VC环境下C程序的运行
和调试.... 19
2.1 在VC下运行一个C程序... 20
2.1.1
启动VC.. 20
2.1.2
编辑程序... 20
2.1.3
编译程序... 21
2.1.4
运行程序... 22
2.2 在VC下调试C程序的方法... 23
2.2.1
VC调试功能简介... 23
2.2.2
使用VC调试C程序的方法... 26
第3章 数据描述.... 31
3.1 C语言的数据类型... 32
3.2 常量和变量... 33
3.2.1 常量和符号常量... 33
3.2.2 变量... 34
3.3 整型数据... 34
3.3.1 整型常量的表示方法... 34
3.3.2 整型变量... 36
3.4 实型数据... 40
3.4.1 实型常量的表示方法... 40
3.4.2 实型变量... 41
3.4.3 实型常数的类型... 42
3.5 字符型数据... 42
3.5.1 字符常量... 42
3.5.2 转义字符... 43
3.5.3 字符变量... 44
3.5.4 字符数据在内存中的存储形式
及使用方法... 44
3.5.5 字符串常量... 45
3.6 为变量赋初值... 46
3.7 算术运算符和算术表达式... 46
3.7.1 C语言的运算符简介... 47
3.7.2 算术运算符和算术表达式... 47
3.8 赋值运算符和赋值表达式... 50
3.9 逗号运算符和逗号表达式... 52
3.10 各类数值型数据之间的混合运算... 53
3.11 本章小结... 56
习题... 57
第4章 C程序的流程设计.... 59
4.1 C语句概述... 60
4.2 赋值语句... 62
4.3 数据输入输出的概念及在C语言中
的实现... 63
4.4 字符数据的输入输出... 63
4.4.1 putchar函数(字符输出函数) 63
4.4.2 getchar函数(键盘输入函数) 64
4.5 格式输入与输出... 65
4.5.1 printf函数(格式输出函数) 65
4.5.2 scanf函数(格式输入函数) 68
4.6 结构化程序设计的方法... 74
4.7 顺序结构程序设计... 76
4.7.1 顺序结构的程序... 76
4.7.2 顺序结构程序的案例实训... 76
4.8 选择结构程序设计... 77
4.8.1 关系运算符和关系表达式... 77
4.8.2 逻辑运算符和逻辑表达式... 79
4.8.3 if语句... 81
4.8.4 switch语句... 89
4.8.5 分支结构程序的案例实训... 91
4.9 循环结构程序的设计... 94
4.9.1 概述... 94
4.9.2 goto语句以及用goto语句
构成的循环... 95
4.9.3 while语句... 95
4.9.4 do-while语句... 98
4.9.5 for语句... 100
4.9.6 循环的嵌套... 103
4.9.7 几种循环的比较... 103
4.9.8 break语句和continue语句... 104
4.9.9 循环结构程序的案例实训... 106
4.10 本章小结... 110
习题... 113
第5章 数组.... 117
5.1 一维数组的定义和引用... 118
5.1.1 一维数组的定义方式... 118
5.1.2 一维数组元素的引用... 119
5.1.3 一维数组的初始化... 121
5.1.4 一维数组应用举例... 122
5.2 二维数组的定义和引用... 123
5.2.1 二维数组的定义... 123
5.2.2 二维数组元素的引用... 124
5.2.3 二维数组的初始化... 126
5.2.4 二维数组程序举例... 127
5.3 字符数组... 128
5.3.1 字符数组的定义... 128
5.3.2 字符数组的初始化... 128
5.3.3 字符数组的引用... 129
5.3.4 字符串及其结束标志... 129
5.3.5 字符数组的输入输出... 130
5.3.6 字符串处理函数... 132
5.4 案例实训... 135
5.5 本章小结... 138
习题... 139
第6章 函数.... 143
6.1 概述... 144
6.2 函数定义的一般形式... 145
6.3 函数的参数和函数的值... 147
6.3.1 形参和实参... 147
6.3.2 函数的返回值... 149
6.4 函数的调用与被调用函数的声明... 150
6.4.1 函数调用的一般形式... 150
6.4.2 函数调用的方式... 150
6.4.3 被调用函数的声明和函数
原型... 152
6.5 函数的嵌套调用... 153
6.6 函数的递归调用... 155
6.7 数组作为函数参数... 157
6.8 局部变量和全局变量... 163
6.8.1 局部变量... 163
6.8.2 全局变量... 165
6.9 变量的存储类别... 167
6.9.1 动态存储方式与静态存储
方式... 167
6.9.2 auto变量... 168
6.9.3 用static声明局部变量... 168
6.9.4 register变量... 170
6.9.5 用extern声明外部变量... 170
6.10 内部函数和外部函数... 172
6.10.1 内部函数... 172
6.10.2 外部函数... 172
6.10.3 建立包含多个文件的程序... 174
6.11 案例实训... 177
6.12 本章小结... 181
习题... 183
第7章 编译预处理.... 189
7.1 概述... 190
7.2 宏定义... 190
7.2.1 无参宏的定义... 190
7.2.2 带参宏定义... 193
7.3 文件包含... 199
7.4 条件编译... 200
7.5 案例实训... 202
7.6 本章小结... 203
习题... 204
第8章 指针.... 207
8.1 指针的基本概念... 208
8.2 变量的指针和指向变量的指针
变量... 209
8.2.1 定义一个指针变量... 209
8.2.2 指针变量的引用... 210
8.2.3 指针变量作为函数参数... 214
8.2.4 关于指针变量几个问题的
进一步说明... 218
8.3 数组的指针和指向数组的指针
变量... 221
8.3.1 指向数组元素的指针... 222
8.3.2 通过指针引用数组元素... 223
8.3.3 数组名与指针变量作为函数的
参数... 227
8.3.4 指向多维数组的指针和指针
变量... 235
8.4 字符串的指针和指向字符串的指针
变量... 239
8.4.1 字符串的表示形式... 239
8.4.2 字符串指针变量与字符数组的
区别... 244
8.5 函数指针变量... 244
8.6 指针型函数... 246
8.7 指针数组和指向指针的指针... 247
8.7.1 指针数组的概念... 247
8.7.2 指向指针的指针... 251
8.7.3 main函数的参数... 253
8.8 有关指针的数据类型和指针运算
小结... 254
8.8.1 有关指针的数据类型小结... 254
8.8.2 指针运算小结... 255
8.8.3 void指针类型... 256
8.9 案例实训... 256
8.10 本章小结... 258
习题... 259
第9章 结构体与共用体.... 263
9.1 结构体类型的定义... 264
9.2 结构体变量的说明... 265
9.3 结构体变量成员的引用方法... 267
9.4 结构体变量的赋值... 268
9.5 结构体变量的初始化... 268
9.6 结构体数组的定义... 269
9.7 结构体指针变量的说明和使用... 271
9.7.1 指向结构体变量的指针... 271
9.7.2 指向结构体数组的指针... 273
9.7.3 结构体指针变量作为函数
参数... 274
9.8 动态存储分配... 276
9.9 用指针处理链表... 278
9.9.1 链表概述... 278
9.9.2 链表的建立和输出... 279
9.10 共用体... 288
9.10.1 共用体的定义... 288
9.10.2 共用体的引用... 289
9.11 枚举类型... 290
9.11.1 枚举类型的定义和枚举变量
的说明... 290
9.11.2 枚举类型变量的赋值
和使用... 290
9.12 用typedef定义已有类型... 292
9.13 案例实训... 293
9.14 本章小结... 295
习题... 298
第10章 文件的输入输出.... 303
10.1 文件概述... 304
10.2 文件指针... 305
10.3 文件的打开与关闭... 305
10.3.1 文件的打开(fopen函数) 305
10.3.2 文件的关闭(fclose函数) 307
10.4 文件的顺序读写... 307
10.4.1 字符读写函数fgetc
和fputc. 307
10.4.2 字符串读写函数fgets
和fputs. 311
10.4.3 数据块读写函数fread
和fwrite. 313
10.4.4 格式化读写函数fscanf
和fprintf 314
10.4.5 文件结束检测函数feof 316
10.5 文件的随机读写... 316
10.5.1 文件定位函数... 317
10.5.2 文件随机读写... 317
10.6 文件读写的出错检测... 318
10.7 案例实训... 319
10.8 本章小结... 321
习题... 321
第11章 项目实践.... 325
11.1 题目要求... 326
11.2 系统分析... 326
11.3 系统设计... 326
11.3.1 总体设计... 326
11.3.2 详细设计... 327
11.4 系统实施... 334
11.5 关于项目实践的几点说明... 345
附录A ASCII代码表.... 347
附录B C语言中的关键字.... 349
附录C C语言的常用库函数.... 351
附录D 运算符的优先级与结合性.... 359
参考文献.... 361