搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
出版时间 :
无库存
C语言程序设计
0.00     定价 ¥ 69.00
泸西县图书馆
此书还可采购1本,持证读者免费借回家
  • ISBN:
    9787030432049
  • 作      者:
    刘渝研,丁海燕,何红玲
  • 出 版 社 :
    科学出版社
  • 出版日期:
    2015-02-01
收藏
荐购
畅销推荐
精彩书摘
基础篇
  第1章绪论
  本章导读
  C语言是目前使用较多的程序设计语言之一。本章将由对C语言的基本应用情况、
  发展历史的介绍开始,并简要描述其主要特点,进而通过一个简单的程序案例说明C程序的主要结构、组成及源程序的处理过程,同时也对C程序设计中涉及的命名规则进行简介。*后通过一个具体编程实例介绍以Microsoft Visual C++6.0为运行平台的C程序编辑和运行过程。目的是使读者通过对本章的阅读,能对C语言有初步的了解。
  1.1引言
  随机进行一个民意调查:您知道或听说过哪些计算机编程语言?得到的答案会是五花八门,C、Pascal、Basic、Fortran、C++、Java.这一系列编程语言的名称,就如同繁星点点,在程序设计的浩瀚天空中散发着璀璨的光芒。而这其中,C语言无疑是被提及*多的*亮的一颗,它就如同北极星,引导着程序设计前进发展的方向。
  C语言是使用*广泛的语言之一,可以说,C语言的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑。自C语言出现后,以C语言为根基的C++、Java和C#等面向对象语言相继诞生,并在各自领域大获成功。但今天C语言依旧在系统编程、嵌入式编程等领域占据着统治地位。
  根据TIOBE编程语言排行榜2014年8月公布的数据,如图1.1~图1.3所示,C语言高居榜首,多年来一直位于选用率榜单前列。
  这样一种诞生于20世纪70年代的“古老”编程语言,至今仍为众人所追捧,几乎成为所有编程初学者的入门语言,同时也是很多编程高手的神功利器,焕发着蓬勃的生机。这是为何?
  2012年6月30日,O'Reilly②采访了Head First C③一书的联合作者David Griffiths,谈论了为什么今天还要学C语言,谈到以下几点:
  (1)C语言至今仍然流行的原因是它无处不在,靠近硬件,被用于开发其他语言和操作系统;
  (2)通过学习C语言,可从系统级上更好地理解程序的工作原理;
  (3)大学应该继续教C语言,它是一种非常重要的基础性语言,要求完全理解整个技术栈;
  (4)学会C语言后学生将能更深入地理解计算机。
  浅显地来讲,对于一直要使用C语言的人而言,真正掌握C语言,可以帮助他在编程道路上攻城拔寨,所向披靡;对于要编程又不用C语言的人而言,可以通过C语言窥探计算机底层原理,掌握*流行的语法形式,了解基本的程序设计思维;对于不编程的人而言,能通过C语言更好地了解计算机,了解计算思维,并且通过全国计算机等级二级考试;对所有人而言,C语言会让你了解它并爱上它。
  现在,有想学习C语言的冲动了吗?那么,就从追溯C语言的历史开始,我们一起进入编程这个神奇的魔法学校,学习C语言这种*有力的魔咒,成为*强的魔法师!
  1.2C语言出现的历史背景
  1.2.1C语言的诞生
  谈及C语言的诞生,不能不介绍这两位公认的重量级编程高手,“骨灰级”游戏玩家,黑客的鼻祖:Ken Thompson(简称Ken,图1.4)和Dennis M.Ritchie(简称DMR,图1.5)。
  20世纪60年代后期,处于计算机史前时代的计算机系统还是批处理一统天下,但其极低的工作效率无法满足时代发展的需求,于是贝尔实验室、麻省理工学院、通用电气公司联合开发一个多用户分时操作系统,取名为Multics(多路信息计算系统),当时作为贝尔实验室成员之一的Ken参与了该项目的开发。在该项目的开发过程中,Ken创造出了名为Bon的编程语言。同时,作为一个游戏玩家,他一直梦想着能傲游太空,于是基于Multics,Ken自己编写了一个叫做“star travel”的游戏。但令Ken始料未及的是,由于开发周期长,成本高,而且庞大缓慢,Multics市场前景完全不被看好,贝尔实验室撤出了该项目。这意味着Ken没有机器可以再玩“star travel”了。
  为了满足玩游戏的需要,Ken决定自给自足,在一台废弃已久的老式PDP-7小型机上重写他的游戏,因为这台机器是免费的。但*直接的问题就是:这台PDP-7上没有操作系统!逢山开路,遇水搭桥,Ken勇往直前,用一个月的时间,利用PDP-7上的汇编语言,开发出了一个全新的操作系统,将其命名为UNiplexed Information and Computing System,缩写为UNICS。用汇编编写操作系统不方便,Ken便开发出一种简洁明了且接近于硬件语言的新语言,即C语言的前身一B语言,并用其改写了UNICS,即产生了第一版的UNIX。
  UNIX的出现开始并不被看好,但却引起了贝尔实验室另一位同事的注意,这就是同样酷爱“star travel”的Dennis M.Ritchie,于是DMR主动加入共同完善这个系统。自1972年UNIX成功移植到当时*先进的大型机PDP-2上,并于1973年在IBM举办的研讨会上展示后,其简洁、稳定与高效的优秀性能表现立刻引起了轰动,得到大家的喜爱,需求量与日俱增。
  UNIX的原码中不少是用汇编完成的,不具备良好的移植性。为了可以移植到各种不同的硬件系统,Ken与DMR决定进一步改写UNIX。1973年,DMR在B语言的基础上开发出了C语言。C语言灵活,高效性,与硬件无关,并且不失其简洁性,正是UNIX移植所需要的法宝,于是旧版的UNIX与C语言完美结合在一起产生了新的可移植的UNIX系统。UNIX和C语言在发展过程中相辅相成,随着UNIX的广泛使用,C语言也成为了当时*受欢迎的编程语言一直延续至今。
  由于UNIX与C语言的深远影响,1983年美国计算机协会将当年的图灵奖破例颁给了软件工程师Ken与DMR,并在当年还决定新设立一个奖项一软件系统奖,以奖励那些优秀的软件开发者,当然首*软件系统奖也是非他们两人莫属了。1999年两人因发展C语言和UNIX操作系统的杰出贡献一起获得了美国国家技术奖章。
  1.2.2 C语言标准的演变
  1.K&RC
  为了使UNIX操作系统推广,1977年DMR发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》,即是著名的PCC(Portable C Compiler,可移植C编译器)。1978年,BrainW.Kernighan(简称BWK)和DMR(两人合称K&R)合著TheCProgramming Language。该书被誉为C语言的“圣经”,其中介绍的C语言被称为“标准C”,人们通常称
  这个版本的C语言为K&RC,是后来广泛使用的C语言的基础。即使在后来ANSIC标准被提出的许多年后,K&RC仍然是许多编译器的*低标准要求,许多老旧的编译系统仍然运行K&RC的标准。
  2.ANSIC/C89标准
  20世纪70~80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。1983年美国国家标准局(American National Standards Institute,ANSI)成立了一个委员会,来制定C语言标准。
  1989年C语言标准被批准,被称为ANSIX3.159—1989“Programming LanguageC”,简称ANSIC或C89标准。
  1990 年,国际标准化组织(International Organization for Standards,ISO)接受了1989年的ANSIC为ISOC的标准,命名为ISO/IEC9899:1990,简称C90标准。不过习惯上仍然叫C89标准。
  1994年,ISO修订了C语言的标准。
  1995年,ISO对C90做了一些修订,即“1995基准增补1(ISO/IEC/9899/AMD1:1995)”。在ANSI标准化后,尽管C语言继续在改进,但C语言的标准在一段相当的时间内都保持不变。
  3.C99标准
  在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1994年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO9899:1999的发表,它通常被称为C99。C99被ANSI于2000年3月采用。
  但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其他一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣。
  4.C11标准
  2011年12月8日,ISO正式发布了新的C语言的新标准C11,之前被称为C1X,官方名称为ISO/IEC9899:2011。新的标准提高了对C++的兼容性,并增加了一些新的特性。
  1.3C语言的特点
  1.3.1基本特性
  (1)低级的高级语言。从C语言的处理方式来看,它属于高级语言,但从性能和控制来看,它将高级语言的基本结构和语句与低级语言的实用性相结合,相比较其他的编程语言(像C++,Java)而言,更接近低级语言。从总体上来说,可将C语言视为介于汇编语言和高级语言之间的一种语言。而低级的编程语言可以更好地了解计算机。
  (2)结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,它本身只提供必要的语言特性。这些函数不是作为C语言核心出现,可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
  (3)功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
  (4)C语言兼容性、可移植性强,应用广。C语言对编写所需的硬件环境兼容性优于其他高级语言,适用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。在ANSIC制订后,只要特定平台上的编译器完整实现了C89标准,而且代码没有使用某些特殊的扩展(GCC以及微软都有自己的编译器特定扩展),那么代码一定可以编译通过,再实现一下操作系统相关的函数库,C语言的移植就是很简单的事情,“一次编写,处处编译”。
  C语言也是一个比较少见的应用领域极为广泛的语言。很多大型软件都是用C语言编写的,比如编写操作系统。C语言可以编写服务器端软件,如Apache、Nginx,或者编写GUI程序,如GTK。大多数程序语言的第一版是通过C语言实现的,借助前面提到的“一次编写处处编译”,也*大程度保证了这些程序语言的可移植性。
  (5)指针。可以直接进行靠近硬件的操作,但是C的指针操作不作保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,由于这些改进增加了语言的复杂度,也为另一部分用户所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。
  (6)C语言文件由数据序列组成,可以构成二进制文件或文本文件。
  1.3.2优点
  (1)简洁紧凑、灵活方便。C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。
  C语言相比C++的优点之一就是*小原则,不会在编译时自作主张地自动产生一些额外代码。对于编写操作系统这类性能优化要求较高的系统时,这些多余的代码是不应该出现的。C语言的简洁设计哲学
展开
目录
目录
前言
基础篇
第1章 绪论 2
1.1 引言 2
1.2 C语言出现的历史背景 4
1.2.1 C语言的诞生 4
1.2.2 C语言标准的演变 5
1.3 C语言的特点 6
1.3.1 基本特性 6
1.3.2 优点 6
1.3.3 缺点 7
1.4 一个简单的C语言程序 8
1.5 程序与程序设计语言 11
1.5.1 程序与指令 11
1.5.2 程序设计语言 13
1.5.3 程序的编辑与处理 14
1.6运行C语言程序的步骤和方法15
1.6.1 运行C语言程序的步骤 15
1.6.2 运行C语言程序的方法 15
1.7 程序设计中的命名规则 16
本章小结 18
习题1 19
第2章 算法 21
2.1 算法的概念 21
2.1.1 算法的定义及特征 22
2.1.2 算法的评价 23
2.2 算法的描述 24
2.2.1 自然语言描述算法 24
2.2.2 流程图描述算法 26
2.2.3 伪代码描述算法 27
2.3 简单算法举例 28
2.4 计算思维 30
2.4.1 计算思维的定义 30
2.4.2 计算思维的特征 32
2.5 结构化程序设计方法 32
2.5.1 自顶向下、逐步求精 33
2.5.2 基本控制结构 33
2.5.3 模块化设计 33
本章小结 35
习题2 35
第3章 用C语言编写程序 37
3.1 C语言程序的简单结构 37
3.1.1 程序的基本结构和格式 39
3.1.2 C语言的标识符 39
3.2 常量、变量与赋值 40
3.2.1 常量 40
3.2.2 变量与内存 41
3.2.3 变量的定义与赋值 43
3.3 运算符与表达式 44
3.3.1 算术运算符 44
3.3.2 赋值运算符 45
3.3.3 自增、自减运算符 46
3.3.4 条件运算符 46
3.3.5 逗号运算符 47
3.3.6 求字节运算符 47
3.4 基本输入输出 47
3.4.1 格式输入输出 47
3.4.2 字符输入输出 56
3.5 基本数据类型 57
3.5.1 整型数据在内存中的存储 58
3.5.2 浮点型数据在内存中的存储 59
3.5.3 字符型数据在内存中的存储 59
3.6 各类数值型数据间的混合运算 60
3.6.1 运算中不同类型数据间的类型转换 60
3.6.2数据类型的强制转换 61
本章小结 61
习题3 62
第4章 选择结构 66
4.1 关系运算符和关系表达式 66
4.2 逻辑运算符和逻辑表达式 66
4.3 if语句 67
4.3.1 简单猜数游戏 67
4.3.2 if单分支语句 68
4.3.3 if双分支语句 69
4.3.4 if多分支语句 69
4.4 switch语句 70
4.4.1 简单菜单程序 70
4.4.2 switch语句 72
本章小结 73
习题4 74
第5章 循环结构 79
5.1 求1+2+3++100 79
5.1.1 while循环语句 79
5.1.2 do while循环语句 80
5.1.3 for循环语句 82
5.1.4 goto语句以及用goto构成的循环 83
5.2 判断素数 83
5.2.1 break语句 83
5.2.2 continue语句 85
5.3 嵌套循环 87
5.4 循环结构程序设计 89
本章小结 91
习题5 92
第6章 数据组织 98
6.1 一维数组的定义和引用 98
6.1.1 一维数组的定义 98
6.1.2 一维数组元素的引用 99
6.1.3 一维数组的初始化 99
6.1.4 一维数组编程 101
6.2 二维数组的定义和引用 104
6.2.1 二维数组的定义 105
6.2.2 二维数组的引用 106
6.2.3 二维数组的初始化 106
6.2.4 二维数组编程 107
6.3 字符数组 109
6.3.1 字符数组的定义 109
6.3.2 字符数组的初始化 110
6.3.3 字符数组的输入和输出 111
6.3.4 其他字符串处理函数 114
6.3.5 字符数组编程 114
6.4 结构体变量 115
6.4.1 结构体类型的声明 116
6.4.2 定义结构体变量 117
6.4.3 结构体类型变量的初始化和引用 118
6.4.4 结构体数组 119
6.4.5 结构体数组编程 120
6.5 共用体 121
6.5.1 共用体的概念 123
6.5.2 共用体类型的定义 123
6.5.3 共用体变量的定义 124
6.5.4 共用体变量的引用 124
6.5.5 共用体类型数据的特点 125
6.6 枚举类型 126
本章小结 127
习题6 127
第7章 函数初步 131
7.1 计算组合数Cm 131
7.1.1 问题提出 131
7.1.2 函数的分类 132
7.1.3 函数的定义 132
7.1.4 函数的调用 133
7.2 显示一条横线 135
7.2.1 不返回结果的函数应用 135
7.2.2 不返回结果的函数定义 136
7.3 变量的作用域和生存期 136
7.3.1 局部变量和全局变量 136
7.3.2 变量的生存周期和存储属性 138
7.4 函数应用程序设计 141
本章小结 143
习题7 143
第8章 指针初步 149
8.1 指针基本概念 149
8.1.1 交换两个变量的值 149
8.1.2 地址和指针的概念 151
8.1.3 指针变量定义 151
8.1.4 指针变量的引用 152
8.1.5 指针作为函数的参数 153
8.2 指针与数组 153
8.2.1 冒泡排序法 153
8.2.2 指针、数组和地址的关系 155
8.2.3 数组名作为函数参数 157
8.3 指针与字符串 157
8.3.1 字符串的分类统计 157
8.3.2 字符串和字符指针 159
8.3.3 常用字符串处理函数 160
8.4 指针与结构体 163
8.4.1 制造虚拟汽车 163
8.4.2 指针与结构体 164
8.4.3 指针与结构体数组 165
8.5 指针与函数 165
8.5.1 简单模式匹配 165
8.5.2 定义函数返回值为指针 167
8.6 指针应用程序设计 169
本章小结 169
习题8 169
提高篇
第9章 函数与程序结构 173
9.1 嵌套调用求组合数 173
9.2 函数递归调用 176
9.2.1 函数递归调用基本概念 176
9.2.2 汉诺塔问题 178
9.3 编译预处理 180
9.3.1 宏定义 181
9.3.2 文件包含 182
9.3.3 条件编译 182
9.4 学生成绩管理系统设计 185
9.4.1 分模块设计学生成绩管理系统 185
9.4.2 程序文件模块图 185
9.4.3 文件模块间的通信 185
本章小结 188
习题9 189
第10章 动态组织数据 194
10.1 用链表构造学生信息 194
10.1.1 链表的概念 196
10.1.2 处理动态链表所需的函数 197
10.1.3 建立动态链表 198
10.2 输出学生链表信息 200
10.2.1 链表的遍历 200
10.2.2 链表遍历的简单应用 202
10.3 在链表中插入一个新学生信息 202
10.4 在链表中删除一个指定学生信息 206
10.5 动态组织数据综合应用 210
10.5.1 用typedef命名已有类型 210
10.5.2 综合应用 211
本章小结 214
习题10 215
第11章 文件 222
11.1 C文件的概念 222
11.1.1 文本文件和二进制文件 223
11.1.2 文件缓冲区 223
11.1.3 文件类型指针 224
11.2 文件的打开与关闭 225
11.2.1 文件的打开(fopen函数) 225
11.2.2 文件的关闭(fclose函数) 227
11.3 C文件的读写 227
11.3.1 字符读写函数fgetc和fput 228
11.3.2 字符读写函数fgets和fputs 232
11.3.3 数据块读写函数fread和Fwrite 235
11.3.4 格式化读写函数fprintf和fscanf 237
11.4 C文件的随机读写 239
11.4.1 文件定位 240
11.4.2 随机读写 240
11.5 C文件的检测函数 241
11.5.1 文件结束检测函数 241
11.5.2 读写文件出错检测函数 242
11.5.3 文件出错标志和文件结束标志置0函数 242
本章小结 243
习题11 243
第12章 指针进阶 247
12.1 用矩形法求多个函数的定积分 247
12.1.1 指向函数指针的概念 249
12.1.2 指向函数的指针变量 249
12.1.3 指向函数指针的调用 249
12.2 查找关键字符号表 251
12.2.1 指针数组的定义 252
12.2.2 指针数组与二维数组 254
12.3 用指向指针数据的指针实现字符串的排序 257
12.3.1 指向指针数据的指针变量 258
12.3.2 定义指向指针数据的指针变量 258
12.3.3 指向指针数据的指针变量作为函数参数 259
12.3.4 命令行参数 260
12.4 指针综合应用 261
本章小结 263
习题12 264
第13章 位运算 269
13.1 位运算符 269
13.1.1 按位与运算 269
13.1.2 按位或运算 271
13.1.3 按位异或运算 271
13.1.4 求反运算 273
13.1.5 左移运算 273
13.1.6 右移运算 274
13.1.7 不同长度的数据进行位运算 275
13.2 位运算应用与举例 275
13.3 位域 277
本章小结 279
习题13 279
附录 283
附录A 常用字符与ASCII代码对照表 283
附录B 关键字及其用途 284
附录C 运算符的优先级和结合性 285
附录D C常用库函数 286
附录E VC6.0常见编译错误信息 290
参考文献 294
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

温馨提示:请使用泸西县图书馆的读者帐号和密码进行登录

点击获取验证码
登录