出版日期:2008年06月
ISBN:9787302172451
[十位:7302172455]
页数:505
定价:¥59.00
店铺售价:¥6.30
(为您节省:¥52.70)
店铺库存:6
本
正在处理购买信息,请稍候……
我要买:
本
* 如何购买
联系店主:
15974791540
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2025-01-26 12:27:13]
李**
福州市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2025-01-26 11:49:09]
陈**
宁波市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2025-01-26 10:07:45]
李**
秦皇岛市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2025-01-26 09:10:23]
罗**
佛山市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2025-01-25 20:31:26]
左**
武汉市
《标准C程序设计(第4版)》内容提要:
本书是印度各大学使用*广的C语言程序设计教材之一。
本书旨在教授读者如何使用C语言进行程序设计。全书贯彻了“用示例学习”的概念。在深入介绍了C语言的每个特性之后,给出了一个完整的示例程序,用于演示说明其应用。每章末尾的“案例学习”不仅介绍了把C语言的特性集成在一起的常用方法,而且还显示了它在实际生活中的应用。*后一章介绍了开发**、无错误的C程序的一些指导原则。
本书在前一版的基础上增加介绍了C99的一些新特性,并增加了不少复习题和项目设计题,而且在附录IV中给出了4个完整的应用程序开发示例,使得本书的实际应用性更强。
本书特点:
带注释的代码全书随处可见,这些注释说明了C语言的各种特性是如何集成在一起以实现特定任务的。补充信息和“注意”对正文进行了必要的补充,但独立于正文之外。*后一章给出了开发**的C程序的一些指导原则,以及经验不足的C程序员可能容易犯的常见错误列表。每章末尾的案例研究演示了把C特性集成在一起的常用方式,并显示了一些实际的应用。每章末尾的“谨记”一节列举了一些有用的提示和可能出问题的地方。每章末尾的“问题”和“练习”为读者复习所学概念和实际的应用开发
《标准C程序设计(第4版)》图书目录:
第1章 C语言概述
1.1 C语言的历史
1.2 C语言的主要特性
1.3 示例程序1:显示一条消息
1.4 示例程序2:两个数相加
1.5 示例程序3:利息计算
1.6 示例程序4:子例程的使用
1.7 示例程序5:数学函数的使用
1.8 C程序的基本结构
1.9 编程风格
1.10 运行一个程序
1.11 UNIX系统环境下
1.11.1 创建程序
1.11.2 编译与链接
1.11.3 运行程序
1.11.4 创建自己的可运行文件
1.11.5 多个源文件问题
1.12 MS-DOS系统环境下
复习题
编程练习
第2章 常量、变量及数据类型
2.1 概述
2.2 字符集
2.3 C标记符
2.4 关键字与标识符
2.5 常量
2.5.1 整型常量
2.5.2 实数常量
2.5.3 单字符常量
2.5.4 字符串常量
2.5.5 反斜杠字符常量
2.6 变量
2.7 数据类型
2.7.1 整数型
2.7.2 浮点数类型
2.7.3 void类型
2.7.4 字符类型
2.8 变量的声明
2.8.1 基本类型的声明
2.8.2 自定义类型的声明
2.9 存储类的声明
2.10 变量的赋值
2.10.1 赋值语句
2.10.2 从键盘读取数据
2.11 符号常量的定义
2.11.1 可修改性
2.11.2 可理解性
2.12 将变量声明为常量
2.13 将变量声明为可变的
2.14 数据的溢出
2.15 案例学习
2.15.1 平均数计算
2.15.2 温度转换问题
复习题
编程练习
第3章 运算符与表达式
3.1 概述
3.2 算术运算符
3.2.1 整数算术运算
3.2.2 实数算术运算
3.2.3 混合算术运算
3.3 关系运算符
3.4 逻辑运算符
3.5 赋值运算符
3.6 递增和递减运算符
3.7 条件运算符
3.8 逐位运算符
3.9 特殊运算符
3.9.1 逗号运算符
3.9.2 sizeof运算符
3.10 算术表达式
3.11 表达式的计算
3.12 算术表达式的优先级
3.13 一些可计算性问题
3.14 表达式中的类型转换
3.14.1 隐式类型转换
3.14.2 显式类型转换
3.15 运算符的优先级及其关联
3.16 数学函数
3.17 案例学习
3.17.1 销售人员的工资
3.17.2 二次方程的求解
复习题
编程练习
第4章 输入输出操作管理
4.1 概述
4.2 读取一个字符
4.3 写字符
4.4 格式化输入
4.4.1 整数输入
4.4.2 实数输入
4.4.3 字符串输入
4.4.4 混合数据类型的读取
4.4.5 错误输入的检测
4.4.6 使用scanf函数时应记住的几个要点
4.5 格式化输出
4.5.1 整数的输出
4.5.2 实数的输出
4.5.3 单个字符的显示
4.5.4 字符串的显示
4.5.5 混合数据的输出
4.5.6 提高输出的可读性
4.6 案例学习
4.6.1 库存报告
4.6.2 可靠性图形
复习题
编程练习
第5章 判断与分支
5.1 概述
5.2 if判断语句
5.3 简单if语句
5.4 if…else语句
5.5 嵌套if…else语句
5.6 阶梯式else if语句
5.7 switch语句
5.8 ?: 运算符
5.9 goto语句
5.10 案例学习
5.10.1 数值的分布范围
5.10.2 账单计算
复习题
编程练习
第6章 判断与循环
6.1 概述
6.2 while语句
6.3 do语句
6.4 for语句
6.4.1 简单的for循环语句
6.4.2 for循环的其他特性
6.4.3 for循环的嵌套
6.5 循环中的跳转
6.5.1 跳出循环
6.5.2 跳过循环的一部分
6.5.3 避免使用goto语句
6.5.4 跳出程序
6.6 简洁的测试表达式
6.7 案例学习
6.7.1 二项式系数表
6.7.2 柱状图
6.7.3 *小成本
6.7.4 描绘两函数的曲线图
复习题
编程练习
第7章 数组
7.1 概述
7.2 一维数组
7.3 一维数组的声明
7.4 一维数组的初始化
7.4.1 编译时初始化
7.4.2 运行时初始化
7.5 二维数组
7.6 二维数组的初始化
7.7 多维数组
7.8 动态数组
7.9 与数组相关的其他内容
7.10 案例学习
7.10.1 数列的中值问题
7.10.2 标准偏差的计算
7.10.3 测试评分
7.10.4 产品与销售分析
复习题
编程练习
第8章 字符数组与字符串
8.1 概述
8.2 字符串变量的声明与初始化
8.3 使用scanf函数从终端读取字符串
8.3.1 读取文本行
8.3.2 使用getchar和gets函数
8.4 在屏幕上显示字符串
8.4.1 使用printf函数
8.4.2 使用putchar和puts函数
8.5 字符的算术运算
8.6 将字符串组合在一起
8.7 两个字符串的比较
8.8 字符串处理函数
8.8.1 strcat()函数
8.8.2 strcmp()函数
8.8.3 strcpy()函数
8.8.4 strlen()函数
8.8.5 其他字符串函数
8.9 字符串表
8.10 字符串的其他特性
8.11 案例学习
8.11.1 计算文本中的字数
8.11.2 客户列表处理程序
复习题
编程练习
第9章 用户自定义函数
9.1 概述
9.2 为什么需要自定义函数
9.3 多函数程序
9.4 自定义函数的元素
9.5 函数的定义
9.5.1 函数头
9.5.2 函数名与类型
9.5.3 形参列表
9.5.4 函数体
9.6 返回值及其类型
9.7 函数调用
9.8 函数声明
9.9 函数的类型
9.10 无参数无返回值的函数
9.11 有参数无返回值的函数
9.12 有参数有返回值的函数
9.13 无参数但有一个返回值的函数
9.14 返回多个值的函数
9.15 函数的嵌套
9.16 函数的迭代
9.17 将数组传递给函数
9.17.1 一维数组
9.17.2 二维数组
9.18 将字符串传递给函数
9.19 变量的作用域、可见性和生存期
9.19.1 自动变量
9.19.2 外部变量
9.19.3 外部声明
9.19.4 静态变量
9.19.5 寄存器变量
9.19.6 嵌套代码块
9.20 多文件程序
9.21 案例学习
复习题
编程练习
第10章 结构体与共用体
10.1 概述
10.2 结构体的定义
10.3 声明结构体变量
10.4 访问结构体成员
10.5 结构体的初始化
10.6 结构体变量的复制与比较
10.7 单个成员的运算
10.8 结构数组
10.9 结构体中的数组
10.10 结构体中的结构体
10.11 结构体与函数
10.12 共用体
10.13 结构体的大小
10.14 位域
10.15 案例学习
复习题
编程练习
第11章 指针
11.1 概述
11.2 理解指针
11.3 访问变量的地址
11.4 指针变量的声明
11.5 指针变量的初始化
11.6 通过指针访问变量
11.7 指针链
11.8 指针表达式
11.9 指针的递增与比例因子
11.10 指针与数组
11.11 指针与字符串
11.12 指针数组
11.13 指针作为函数的参数
11.14 函数返回指针
11.15 指向函数的指针
11.16 指针与结构体
11.17 案例学习
11.17.1 考试成绩处理程序
11.17.2 库存更新程序
复习题
编程练习
第12章 文件管理
12.1 概述
12.2 定义并打开文件
12.3 关闭文件
12.4 文件的输入输出操作
12.4.1 getc与putc函数
12.4.2 getw和putw函数
12.4.3 fprintf与fscanf函数
12.5 I/O操作的错误处理
12.6 随机访问文件
12.7 命令行参数
复习题
编程练习
第13章 动态内存分配与链表
13.1 概述
13.2 动态内存分配
13.3 用malloc函数分配一块内存
13.4 用calloc函数分配多个内存块
13.5 用free函数释放已用的空间
13.6 用realloc函数改变内存块的大小
13.7 链表的概念
13.8 链表的优点
13.9 链表的种类
13.10 再论指针
13.11 创建链表
13.12 插入一个数据项
13.13 删除一个数据项
13.14 链表的应用
13.15 案例学习
13.15.1 在已排序链表中插入数据
13.15.2 构建一个已排序的链表
复习题
编程练习
第14章 预处理器
14.1 概述
14.2 宏替换指令
14.2.1 简单宏替换
14.2.2 含参数的宏
14.2.3 宏嵌套
14.3 文件包含
14.4 编译器控制指令
14.4.1 情形1
14.4.2 情形2
14.4.3 情形3
14.4.4 情形4
14.5 ANSI C的其他预处理器指令
14.5.1 #elif指令
14.5.2 #pragma指令
14.5.3 #error指令
14.5.4 字符串化运算符#
14.5.5 标记符粘贴运算符##
复习题
编程练习
第15章 C程序开发指导原则
15.1 概述
15.2 程序设计
15.2.1 问题分析
15.2.2 勾勒程序结构
15.2.3 算法开发
15.2.4 控制结构
15.3 程序编码
15.3.1 自身文档化
15.3.2 语句构造
15.3.3 输入/输出格式
15.3.4 程序的通用性
15.4 常见的程序错误
15.4.1 丢失分号
15.4.2 误用分号
15.4.3 丢失括号
15.4.4 丢失引号
15.4.5 误用引号
15.4.6 使用不正确的注释字符
15.4.7 未定义变量
15.4.8 忽视了运算符的优先级
15.4.9 忽视了递增递减运算符的计算顺序
15.4.10 忽视了函数参数的说明
15.4.11 在函数调用中实参和形参类型不匹配
15.4.12 函数未声明
15.4.13 在scanf的参数中丢失了&运算符
15.4.14 超出了数组的边界
15.4.15 忘记了给字符串的空字符留出空间
15.4.16 使用未初始化的指针
15.4.17 丢失了间接运算符和地址运算符
15.4.18 在指针表达式中丢失括号
15.4.19 在宏定义语句中参数遗漏了括号
15.5 程序测试与调试
15.5.1 错误的类型
15.5.2 程序测试
15.5.3 程序调试
15.6 程序的效率
15.6.1 运行时间
15.6.2 内存需求
复习题
附录Ⅰ 位级程序设计
Ⅰ.1 概述
Ⅰ.2 逐位逻辑运算符
Ⅰ.2.1 逐位与操作
Ⅰ.2.2 逐位或操作
Ⅰ.2.3 逐位非或操作
Ⅰ.3 逐位移位运算符
Ⅰ.4 逐位求反运算符
Ⅰ.5 屏蔽
附录Ⅱ
附录Ⅲ
附录Ⅳ 项目设计
Ⅳ.1 库存管理系统
Ⅳ.2 登录记录系统
Ⅳ.3 链表
Ⅳ.4 矩阵相乘
附录Ⅴ C99的特性
Ⅴ.1 概述
Ⅴ.2 新关键字
Ⅴ.3 新注释
Ⅴ.4 新数据类型
Ⅴ.4.1 _Bool类型
Ⅴ.4.2 _Complex和_Imaginary类型
Ⅴ.4.3 long long类型
Ⅴ.5 变量声明
Ⅴ.6 I/O格式化的变��
Ⅴ.7 数组处理
Ⅴ.7.1 可变长度数组
Ⅴ.7.2 数组声明中的类型说明
Ⅴ.7.3 结构的灵活数组成员
Ⅴ.8 函数实现
Ⅴ.8.1 默认为inline类型的规则
Ⅴ.8.2 显式函数定义
Ⅴ.8.3 return语句的限制
Ⅴ.8.4 声明函数为inline
Ⅴ.9 受限指针
Ⅴ.10 编译器限制的变化
Ⅴ.11 其他改进
参考文献
《标准C程序设计(第4版)》文章节选:
第1章 c语言概述
1.1 C语言的历史
作为一种程序设计语言,字母“C”看上去是一个奇怪的名字。但是这个奇怪而好听的语言却是现今*为流行的计算机语言之一,因为它是一种结构化的、**的、与机器无关的语言。它允许软件开发人员开发程序时无须担心实现这些程序的硬件平台。
所有现代语言的起源都是ALGOL语言,该语言是20世纪60年代提出的。ALGOL语言是*先使用块结构的计算机语言。尽管它从来没有在美国流行开来,但在欧洲被广泛使用。ALGOL语言给计算机科学界带来了结构化程序设计的概念。20世纪60年代,计算机科学家,如Corrado Bohm、Guiseppe Jacopini和Edsger Dijkstra使这一概念大众化了。随后,又宣布开发了好几种计算机语言。
1967年,Martin Richards开发了一种称为BCPL(基本组合程序设计语言)的计算机语言。该语言主要用于系统软件的开发。1970年,Ken Thompson创建了一种计算机语言,该语言继承了BCPL的很多特性,就称为B语言。在贝尔实验室,8语言用来开发UNIX操作系统的早期版本。BCPL和B语言都是“无类型”的系统程序设计语言。
C语言是Dennis Ritchie于1972年在贝尔实验室从ALGOL、BCPL和B语言的基础上发展而来的。C语言利用了这些语言的很多概念,并添加了数据类型的概念以及其他功能强大的特性。由于它是与UNIX操作系统一起被开发出来的,因此它与UNIX有着很强的关联。UNIX操作系统(也是在贝尔实验室开发出来的)几乎完全是用c语言编码的。UNIX是现今使用*为流行的网络操作系统,也是因特网数据超高速路的心脏。
多年以来,C语言主要用于科研环境下,但*终,随着多种商用C编译器的发布,以及UNIX操作系统的不断流行,在计算机专业中也开始获得广泛支持。今天,C语言可以运行在多种操作系统和硬件平台下。
20世纪70年代,C语言发展为现在所谓的“传统C语言”。自1978年由BrianKemingham和Dennis Ritchie著作的The C Programming Language一书的出版,C语言成了*为流行的语言。该书很受欢迎,以至于在程序设计界,C语言就认为是“K&R C”。C语言的快速发展导致了不同版本的语言出现,这些语言相互类似但往往不兼容。对系统开发人员来说,这是一个严重的问题。
为了确保c语言的标准,1983年,美国**标准局(American National StandardsInstitate,ANSI)任命了一个技术委员会来定义C语言的标准。该委员会于1989年批准了一个C语言版本,这就是现在的ANSI C。该本版又于1990年被国际标准组织(InternationalStardards Organiyation,ISO)批准。C语言的这个版本又称为C89。
20世纪90年代,一种完全基于C的语言——C++语言,经历了大量的改进和变化,于1977年11月成为了一种获得ANSl/ISO批准的语言。C++在C的基础上添加了一些新特性,使之不仅成为一种真正的面向对象的语言,而且是一种更通用的语言。与此同时,美国的Sun公司创造了一种新的语言——JaVa语言,它是以C和C++为模型的。
所有流行的计算机语言其本质都是动态的。它们通过加入新特性来不断地提高其功能和使用范围,C语言也不例外。尽管c++和Java语言都是从c发展而来的,c语言标准委员会认为,如果C++仃ava语言的一些特性加入到C中,会提高C语言的性能。于是就产生了C语言的1999标准。这个版本的C语言通常称为C99。C语言的历史和发展如图1.1所示。
尽管C99是一个改进版本,但很多常用的编译器仍不支持C99的所有新特性。因此,我们将在附录中单独介绍加入到C99的新特性,这样,感兴趣读者就可以快速地参考这些新特性,并在可能的情况下使用它们。
1.2 C语言的主要特性
C语言之所以越来越受欢迎,是因为它具有很多可取的特性。它是一种健壮的语言,其丰富的内置函数集和运算符可用来编写任意复杂的程序。C语言编译器融合了汇编语言的性能和**语言的特性,因此很适合编写系统软件和商业软件。事实上,市场上很多的C编译器都是用C语言编写的。
用C语言编写的程序**且运行速度快。这归功于它的各种数据类型和功能强大的运算符。其运行速度是BASIC语言的好几倍。例如,一个计算0~15000个变量的程序,用C语言编写,其运行时间为1秒,而用BASIC语言编写的则要运行50秒。
C语言有32个关键字,它们的长度取决于其内置函数。C语言有很多标准函数可用来开发程序。
C语言是高度可移植的。这意味着,为某一台计算机编写的C程序,只要稍作修改甚至不用修改就可以在另一台计算机上运行。如果我们计划使用不同操作系统的新计算机,可移植性很重要。
C语言很适于结构化程序设计,因而要求用户以功能模块的方式来思考问题。这些模块的恰当结合就可以形成一个完整的程序。这种模块化的结构使得程序的调试、测试和维护更加容易。
C语言另一个重要特性是它的自我扩展能力。一个C程序基本上是各种函数的集合,这些函数由C函数库支持。我们可以不断地将自己的函数添加到C函数库中去。由于有了这么大量的函数,程序设计就变得简单了。
在讨论C语言的具体特征之前,我们先来看看二个C范例程序,分析并了解程序是如何工作的。
1.3示例程序l:显示一条消息
让我们来详细看看该程序。**行告诉操作系统程序名是main,从这一行开始执行。main()i函数是C系统使用的一个特殊函数,用来告诉计算机程序的运行起点。每个程序必须正好有一个main函数。如果有多个main函数,编译器就无法知道哪一个是程序的起始点。紧跟在main后面的空括号对表明main函数不带参数。关于参数的概念我们将在讨论函数(第9章)时再详细介绍。
第二行的开始是“{”,表明main函数的开始,而*后一行的闭括号则表示该函数的结束。在上面范例程序中,闭括号还标志着整个程序的结束。这两个括号之中的所有语句就形成了函数体。函数体包含有一个指令集,从而完成指定的任务。
在上面的范例程序中,函数体包含有3个语句,其中只有printf一行是可执行的语句。以/*开始,以*/结尾的行称为注释行。程序中恰当地使用注释行,可以提高程序的可读性。更容易让人理解。由于注释行不是可执行语句,因此/*与*/之间的内容全部被编译器忽略掉。通常,一个注释可以插入到程序的任何空白处——行的开始、中间或结尾处——但不能插入到一个词的中间。
尽管注释行可以出现在程序的任意地方,但在C语言中它们不能嵌套。这就意味着,不能在注释行中再插入注释行。一旦编译器发现了注释的开始标志,它就将忽略掉后面的所有内容,直到再发现一个结束标志为止。下面注释行:
/*==/*==*/==*/
是不合法的,因此将产生一个错误。
由于注释行不会影响程序的运行速度以及编译后程序的大小,因此我们应大方地在程序中使用注释。注释有助于开发人员和其他用户理解程序的不同函数和运算,对程序的调试和测试也有帮助。我们将在后面的范例程序中体会到注释行的作用。
现在让我们来看printf()函数,这是该范例程序中**可执行的语句:
printf(”I see,I remember!”);
printf是预定义的标准的C函数,用于显示输出。预定义的含义就是,该函数已编写好并已编译。在链接时,与我们的程序链接在一起。编译和链接的概念将在本章的后面介绍。printf函数将两个引号之间的内容显示出来。在本范例程序中,其输出为:
I See,I remember!
注意,打印行以分号结尾。C语言的每条语句都必须以分号结尾。假如我们要如下地将输出显示成两行:
I See,
I remember
这可以通过添加两个print函数来实现,具体如下:
printf(”I see,\n”);
printf(”I remember!”);
两个括号之间的信息称为该函数的参数。**个printf函数的参数是“I see,\n”,第二个的是“I remember!”。这些参数只是要显示出来的字符串。
注意,**个printf函数的参数在字符串的末尾包含有字符\和n的组合。该组合称为新行字符。新行字符命令计算机换到下一行(即新行)。在概念上,它类似于打字机的回车键。在显示了逗号字符后,新行字符\n的出现将使“I remember!”显示在下一行。字符\和n之间不允许有空格。
如果省略掉**个printf语句的新行字符,那么输出仍为一行,即如下所示:
……
《标准C程序设计(第4版)》编辑推荐与评论:
C语言是所有本科生课程的一门核心课,也是现今使用*广泛的计算机语言。国内国外的C语言图书已经非常多了,但通过本书的翻译,我们觉得这本书还是很有引进价值,具体表现在它的以下几个特点上:
本书是基于*新的C语言标准。
附录IV给出了4个完整的应用程序开发示例。
扩展讨论了C的指针。
每章后面的“谨记”一节给出了很有用的编程提示以及容易出错的问题。
每章后面的案例学习给出了20多个真实的开发,展示了C程序的设计过程。
80多个程序设计范例向读者阐述了良好程序设计的基本原则。
还有近200个复习题和130多个项目设计题。