C语言程序设计:现代方法(第2版)(图灵程序设计丛书)(C Programming:A Modern Approach,Second Edition)
分類: 图书,计算机与互联网,程序语言与软件开发,语言与开发工具,C语言及其相关,
品牌: 金(K.N.King)
基本信息·出版社:人民邮电出版社
·页码:600 页
·出版日期:2010年04月
·ISBN:9787115219572
·条形码:9787115219572
·版本:第1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:图灵程序设计丛书
·外文书名:C Programming:A Modern Approach,Second Edition
产品信息有问题吗?请帮我们更新产品信息。
内容简介时至今日,C语言仍然是计算机领域的通用语言之一,但今天的C语言已经和最初的时候大不相同了。本书最主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化”。这一版中紧密结合了C99标准,并与C89标准进行对照,补充了C99中的最新特性。本书分为C语言的基础特性、C语言的高级特性、C语言标准库和参考资料4个部分。每章末尾都有一个“问与答”小节给出一系列与该章内容相关的问题及答案,此外还包含适量的习题。 本书是为大学本科阶段的C语言课程编写的教材,同时也非常适合作为其他课程的辅助用书。
目录
目录 第1章C语言概述1 1.1C语言的历史1 1.1.1起源1 1.1.2标准化1 1.1.3基于C的语言2 1.2C语言的优缺点3 1.2.1C语言的优点3 1.2.2C语言的缺点3 1.2.3高效地使用C语言4 问与答5 第2章C语言基本概念7 2.1编写一个简单的C程序7 程序显示双关语7 2.1.1编译和链接8 2.1.2集成开发环境8 2.2简单程序的一般形式9 2.2.1指令9 2.2.2函数9 2.2.3语句10 2.2.4显示字符串10 2.3注释11 2.4变量和赋值12 2.4.1类型12 2.4.2声明13 2.4.3赋值13 2.4.4显示变量的值14 程序计算箱子的空间重量14 2.4.5初始化15 2.4.6显示表达式的值16 2.5读入输入16 程序计算箱子的空间重量(改进版)16 2.6定义常量的名字17 程序华氏温度转换为摄氏温度17 2.7标识符18 2.8C程序的书写规范19 问与答21 练习题23 编程题24 第3章格式化输入/输出26 3.1printf函数26 3.1.1转换说明27 程序用printf函数格式化数28 3.1.2转义序列28 3.2scanf函数29 3.2.1scanf函数的工作方法30 3.2.2格式串中的普通字符31 3.2.3易混淆的printf函数和scanf函数32 程序分数相加32 问与答33 练习题34 编程题35 第4章表达式36 4.1算术运算符36 程序计算通用产品代码的校验位38 4.2赋值运算符39 4.2.1简单赋值40 4.2.2左值41 4.2.3复合赋值41 4.3自增运算符和自减运算符42 4.4表达式求值43 4.5表达式语句45 问与答45 练习题47 编程题49 第5章选择语句50 5.1逻辑表达式50 5.1.1关系运算符50 5.1.2判等运算符51 5.1.3逻辑运算符51 5.2if语句52 5.2.1复合语句53 5.2.2else子句53 5.2.3级联式if语句54 程序计算股票经纪人的佣金55 5.2.4靶誩lse”的问题56 5.2.5条件表达式57 5.2.6C89中的布尔值58 5.2.7C99中的布尔值58 5.3switch语句59 程序显示法定格式的日期61 问与答62 练习题65 编程题67 第6章循环69 6.1while语句69 程序显示平方表71 程序数列求和71 6.2do语句72 程序计算整数的位数73 6.3for语句73 6.3.1for语句的惯用法74 6.3.2在for语句中省略表达式75 6.3.3C99中的for语句75 6.3.4逗号运算符76 程序显示平方表(改进版)77 6.4退出循环78 6.4.1break语句78 6.4.2continue语句78 6.4.3goto语句79 程序账簿结算80 6.5空语句81 问与答83 练习题84 编程题85 第7章基本类型88 7.1整数类型88 7.1.1C99中的整数类型90 7.1.2整数常量90 7.1.3C99中的整数常量91 7.1.4整数溢出91 7.1.5读/写整数91 程序数列求和(改进版)92 7.2浮点类型93 7.2.1浮点常量94 7.2.2读/写浮点数94 7.3字符类型94 7.3.1字符操作95 7.3.2有符号字符和无符号字符95 7.3.3算术类型96 7.3.4转义序列96 7.3.5字符处理函数97 7.3.6用scanf和printf读/写字符98 7.3.7用getchar和putchar读/写字符98 程序确定消息的长度99 7.4类型转换100 7.4.1常用算术转换101 7.4.2赋值过程中的转换102 7.4.3C99中的隐式转换103 7.4.4强制类型转换103 7.5类型定义105 7.5.1类型定义的优点105 7.5.2类型定义和可移植性105 7.6sizeof运算符106 问与答107 练习题109 编程题110 第8章数组113 8.1一维数组113 8.1.1数组下标113 程序数列反向115 8.1.2数组初始化115 8.1.3指定初始化式116 程序检查数中重复出现的数字116 8.1.4对数组使用sizeof运算符117 程序计算利息118 8.2多维数组119 8.2.1多维数组初始化120 8.2.2常量数组121 程序发牌121 8.3C99中的变长数组122 问与答123 练习题124 编程题125 第9章函数129 9.1函数的定义和调用129 程序计算平均值129 程序显示倒计数130 程序显示双关语(改进版)131 9.1.1函数定义132 9.1.2函数调用133 程序判定素数134 9.2函数声明135 9.3实际参数136 9.3.1实际参数的转换137 9.3.2数组型实际参数138 9.3.3变长数组形式参数140 9.3.4在数组参数声明中使用static141 9.3.5复合字面量141 9.4return语句142 9.5程序终止143 9.6递归144 程序快速排序146 问与答147 练习题150 编程题153 第10章程序结构155 10.1局部变量155 10.1.1静态局部变量156 10.1.2形式参数156 10.2外部变量156 10.2.1示例:用外部变量实现栈156 10.2.2外部变量的利与弊157 程序猜数158 10.3程序块161 10.4作用域162 10.5构建C程序163 程序给一手牌分类163 问与答169 练习题169 编程题170 第11章指针172 11.1指针变量172 11.2取地址运算符和间接寻址运算符173 11.2.1取地址运算符173 11.2.2间接寻址运算符174 11.3指针赋值174 11.4指针作为参数176 程序找出数组中的最大元素和最小元素177 11.5指针作为返回值179 问与答180 练习题181 编程题182 第12章指针和数组184 12.1指针的算术运算184 12.1.1指针加上整数185 12.1.2指针减去整数185 12.1.3两个指针相减186 12.1.4指针比较186 12.1.5指向复合常量的指针186 12.2指针用于数组处理186 12.3用数组名作为指针188 程序数列反向(改进版)189 12.3.1数组型实际参数(改进版)189 12.3.2用指针作为数组名191 12.4指针和多维数组191 12.4.1处理多维数组的元素191 12.4.2处理多维数组的行192 12.4.3处理多维数组的列192 12.4.4用多维数组名作为指针192 12.5C99中的指针和变长数组193 问与答194 练习题195 编程题197 第13章字符串198 13.1字符串字面量198 13.1.1字符串字面量中的转义序列198 13.1.2延续字符串字面量199 13.1.3如何存储字符串字面量199 13.1.4字符串字面量的操作200 13.1.5字符串字面量与字符常量200 13.2字符串变量200 13.2.1初始化字符串变量201 13.2.2字符数组与字符指针202 13.3字符串的读和写203 13.3.1用printf函数和puts函数写字符串203 13.3.2用scanf函数和gets函数读字符串203 13.3.3逐个字符读字符串204 13.4访问字符串中的字符205 13.5使用C语言的字符串库206 13.5.1strcpy函数207 13.5.2strlen函数208 13.5.3strcat函数208 13.5.4strcmp函数209 程序显示一个月的提醒列表209 13.6字符串惯用法211 13.6.1搜索字符串的结尾211 13.6.2复制字符串213 13.7字符串数组214 程序核对行星的名字217 问与答218 练习题220 编程题222 第14章预处理器225 14.1预处理器的工作原理225 14.2预处理指令227 14.3宏定义227 14.3.1简单的宏227 14.3.2带参数的宏229 14.3.3#运算符231 14.3.4##运算符231 14.3.5宏的通用属性232 14.3.6宏定义中的圆括号233 14.3.7创建较长的宏233 14.3.8预定义宏234 14.3.9C99中新增的预定义宏235 14.3.10空的宏参数236 14.3.11参数个数可变的宏236 14.3.12__func__标识符237 14.4条件编译237 14.4.1#if指令和#endif指令238 14.4.2defined运算符238 14.4.3#ifdef指令和#ifndef指令239 14.4.4#elif指令和#else指令239 14.4.5使用条件编译240 14.5其他指令240 14.5.1#error指令240 14.5.2#line指令241 14.5.3#pragma指令242 14.5.4_Pragma运算符242 问与答243 练习题245 第15章编写大型程序248 15.1源文件248 15.2头文件249 15.2.1#include指令249 15.2.2共享宏定义和类型定义250 15.2.3共享函数原型251 15.2.4共享变量声明252 15.2.5嵌套包含253 15.2.6保护头文件253 15.2.7头文件中的#error指令254 15.3把程序划分成多个文件254 程序文本格式化255 15.4构建多文件程序260 15.4.1makefile260 15.4.2链接期间的错误262 15.4.3重新构建程序262 15.4.4在程序外定义宏264 问与答264 练习题265 编程题266 第16章结构、联合和枚举267 16.1结构变量267 16.1.1结构变量的声明267 16.1.2结构变量的初始化269 16.1.3指定初始化269 16.1.4对结构的操作270 16.2结构类型270 16.2.1结构标记的声明271 16.2.2结构类型的定义272 16.2.3结构作为参数和返回值272 16.2.4复合字面量273 16.3嵌套的数组和结构274 16.3.1嵌套的结构274 16.3.2结构数组274 16.3.3结构数组的初始化275 程序维护零件数据库275 16.4联合281 16.4.1用联合来节省空间282 16.4.2用联合来构造混合的数据结构284 16.4.3为联合添加“标记字段”284 16.5枚举285 16.5.1枚举标记和类型名286 16.5.2枚举作为整数286 16.5.3用枚举声明“标记字段”286 问与答287 练习题289 编程题293 第17章指针的高级应用294 17.1动态存储分配294 17.1.1内存分配函数294 17.1.2空指针295 17.2动态分配字符串296 17.2.1使用malloc函数为字符串分配内存296 17.2.2在字符串函数中使用动态存储分配296 17.2.3动态分配字符串的数组297 程序显示一个月的提醒列表(改进版)297 17.3动态分配数组299 17.3.1使用malloc函数为数组分配存储空间299 17.3.2calloc函数300 17.3.3realloc函数300 17.4释放存储空间301 17.4.1free函数301 17.4.2靶罩刚搿蔽侍�301 17.5链表302 17.5.1声明结点类型302 17.5.2创建结点303 17.5.3-运算符303 17.5.4在链表的开始处插入结点304 17.5.5搜索链表306 17.5.6从链表中删除结点307 17.5.7有序链表308 程序维护零件数据库(改进版)309 17.6指向指针的指针313 17.7指向函数的指针314 17.7.1函数指针作为参数314 17.7.2qsort函数314 17.7.3函数指针的其他用途316 程序列三角函数表317 17.8受限指针318 17.9灵活数组成员319 问与答320 练习题323 编程题325 第18章声明327 18.1声明的语法327 18.2存储类型328 18.2.1变量的性质328 18.2.2auto存储类型329 18.2.3static存储类型329 18.2.4extern存储类型330 18.2.5register存储类型331 18.2.6函数的存储类型332 18.2.7小结332 18.3类型限定符333 18.4声明符334 18.4.1解释复杂声明335 18.4.2使用类型定义来简化声明336 18.5初始化式336 18.6内联函数337 18.6.1内联定义338 18.6.2对内联函数的限制339 18.6.3在GCC中使用内联函数339 问与答339 练习题342 第19章程序设计345 19.1模块345 19.1.1内聚性与耦合性347 19.1.2模块的类型347 19.2信息隐藏347 19.3抽象数据类型350 19.3.1封装351 19.3.2不完整类型351 19.4栈抽象数据类型352 19.4.1为栈抽象数据类型定义接口352 19.4.2用定长数组实现栈抽象数据类型353 19.4.3改变栈抽象数据类型中数据项的类型354 19.4.4用动态数组实现栈抽象数据类型355 19.4.5用链表实现栈抽象数据类型357 19.5抽象数据类型的设计问题359 19.5.1命名惯例359 19.5.2错误处理359 19.5.3通用抽象数据类型359 19.5.4新语言中的抽象数据类型360 问与答360 练习题361 编程题362 第20章底层程序设计363 20.1位运算符363 20.1.1移位运算符363 20.1.2按位求反运算符、按位与运算符、按位异或运算符和按位或运算符364 20.1.3用位运算符访问位365 20.1.4用位运算符访问位域366 程序XOR加密366 20.2结构中的位域367 20.3其他底层技术369 20.3.1定义依赖机器的类型369 20.3.2用联合提供数据的多个视角370 20.3.3将指针作为地址使用371 程序查看内存单元371 20.3.4volatile类型限定符373 问与答374 练习题374 编程题376 第21章标准库377 21.1标准库的使用377 21.1.1对标准库中所用名字的限制377 21.1.2使用宏隐藏的函数378 21.2C89标准库概述378 21.3C99标准库更新380 21.4:常用定义381 21.5:布尔类型和值381 问与答382 练习题382 编程题383 第22章输入/输出384 22.1流384 22.1.1文件指针385 22.1.2标准流和重定向385 22.1.3文本文件与二进制文件385 22.2文件操作386 22.2.1打开文件386 22.2.2模式387 22.2.3关闭文件388 22.2.4为打开的流附加文件389 22.2.5从命令行获取文件名389 程序检查文件是否可以打开389 22.2.6临时文件390 22.2.7文件缓冲391 22.2.8其他文件操作392 22.3格式化的输入/输出393 22.3.1璸rintf函数393 22.3.2璸rintf转换说明393 22.3.3C99对…printf转换说明的修改395 22.3.4璸rintf转换说明示例396 22.3.5璼canf函数398 22.3.6璼canf格式串398 22.3.7璼canf转换说明398 22.3.8C99对...scanf转换说明的改变400 22.3.9scanf示例400 22.3.10检测文件末尾和错误条件401 22.4字符的输入/输出403 22.4.1输出函数403 22.4.2输入函数403 程序复制文件404 22.5行的输入/输出405 22.5.1输出函数405 22.5.2输入函数406 22.6块的输入/输出406 22.7文件定位407 程序修改零件记录文件409 22.8字符串的输入/输出409 22.8.1输出函数410 22.8.2输入函数410 问与答411 练习题414 编程题416 第23章库对数值和字符数据的支持419 23.1:浮点类型的特性419 23.2:整数类型的大�421 23.3:数学计算(C89)422 23.3.1错误422 23.3.2三角函数422 23.3.3双曲函数423 23.3.4指数函数和对数函数423 23.3.5幂函数424 23.3.6就近取整函数、绝对值函数和取余函数424 23.4:数学计算(C99)425 23.4.1IEEE浮点标准425 23.4.2类型426 23.4.3宏426 23.4.4错误426 23.4.5函数427 23.4.6分类宏427 23.4.7三角函数428 23.4.8双曲函数428 23.4.9指数函数和对数函数429 23.4.10幂函数和绝对值函数430 23.4.11误差函数和伽玛函数430 23.4.12就近取整函数431 23.4.13取余函数432 23.4.14操作函数432 23.4.15最大值函数、最小值函数和正差函数433 23.4.16浮点乘加433 23.4.17比较宏434 23.5:字符处理434 23.5.1字符分类函数435 程序测试字符分类函数436 23.5.2字符大小写映射函数437 程序测试大小写映射函数437 23.6:字符串处理437 23.6.1复制函数437 23.6.2拼接函数438 23.6.3比较函数439 23.6.4搜索函数440 23.6.5其他函数442 问与答442 练习题443 编程题444 第24章错误处理446 24.1:诊断446 24.2:错误447 24.3:信号处理448 24.3.1信号宏449 24.3.2signal函数449 24.3.3预定义的信号处理函数450 24.3.4raise函数450 程序测试信号451 24.4:非局部跳转452 程序测试setjmp和longjmp452 问与答453 练习题454 第25章国际化特性456 25.1:本地化456 25.1.1类别456 25.1.2setlocale函数457 25.1.3localeconv函数458 25.2多字节字符和宽字符461 25.2.1多字节字符461 25.2.2宽字符461 25.2.3统一码和通用字符集462 25.2.4统一码编码462 25.2.5多字节/宽字符转换函数463 25.2.6多字节/宽字符串转换函数465 25.3双字符和三字符465 25.3.1三字符465 25.3.2双字符466 25.3.3:拼写替换467 25.4通用字符名467 25.5:扩展的多字节和宽字符实用工具467 25.5.1流倾向468 25.5.2格式化宽字符输入/输出函数468 25.5.3宽字符输入/输出函数470 25.5.4通用的宽字符串实用工具471 25.5.5宽字符时间转换函数474 25.5.6扩展的多字节/宽字符转换实用工具474 25.6:宽字符分类和映射实用工具477 25.6.1宽字符分类函数477 25.6.2可扩展的宽字符分类函数478 25.6.3宽字符大小写映射函数478 25.6.4可扩展的宽字符大小写映射函数478 问与答479 练习题479 编程题480 第26章其他库函数482 26.1:可变参数482 26.1.1调用带有可变参数列表的函数483 26.1.2v…printf函数484 26.1.3v…scanf函数485 26.2:通用的实用工具485 26.2.1数值转换函数485 程序测试数值转换函数486 26.2.2伪随机序列生成函数488 程序测试伪随机序列生成函数488 26.2.3与环境的通信489 26.2.4搜索和排序实用工具490 程序确定航空里程491 26.2.5整数算术运算函数492 26.3:日期和时间492 26.3.1时间处理函数493 26.3.2时间转换函数495 程序显示日期和时间498 问与答500 练习题501 编程题502 第27章C99对数学计算的新增支持503 27.1:整数类型503 27.1.1类型503 27.1.2对指定宽度整数类型的限制504 27.1.3对其他整数类型的限制505 27.1.4用于整数常量的宏505 27.2:整数类型的格式转换506 27.2.1用于格式说明符的宏506 27.2.2用于最大宽度整数类型的函数507 27.3复数508 27.3.1复数的定义508 27.3.2复数的算术运算509 27.3.3C99中的复数类型509 27.3.4复数的运算510 27.3.5复数类型的转换规则510 27.4:复数算术运算511 27.4.1宏511 27.4.2CX_LIMITED_RANGE编译提示512 27.4.3函数512 27.4.4三角函数512 27.4.5双曲函数513 27.4.6指数函数和对数函数514 27.4.7幂函数和绝对值函数514 27.4.8操作函数514 程序求二次方程的根515 27.5:泛型数学515 27.5.1泛型宏516 27.5.2调用泛型宏517 27.6:浮点环境518 27.6.1浮点状态标志和控制模式518 27.6.2宏519 27.6.3FENV_ACCESS编译提示519 27.6.4浮点异常函数520 27.6.5舍入函数520 27.6.6环境函数521 问与答521 练习题522 编程题523 附录AC语言运算符524 附录BC99与C89的比较525 附录CC89与经典C的比较529 附录D标准库函数532 附录EASCII字符集569 参考文献570 索引573……[看更多目录]