具体描述
购买一整套 C程序设计+学习辅导(第四版) 请点击以下链接购买,套装更划算噢!
商品参数 书 名:c程序设计(第四版) 作 者:谭浩强 著 I S B N :9787302224464 出 版 社:清华大学出版社 出版时间:2010.6 印刷时间:2012.1 版 次:4版 印 次:7次 字 数:626000字 页 数:390页 开 本:16开 包 装:平装 重 量:585克 定 价:33元 目录 第1章程序设计和C语言 1.1什么是计算机程序 1.2什么是计算机语言 1.3C语言的发展及其特点 1.4*简单的C语言程序 1.4.1*简单的C语言程序举例 1.4.2C语言程序的结构 1.5运行C程序的步骤与方法 1.6程序设计的任务 习题 第2章算法——程序的灵魂 2.1什么是算法 2.2简单的算法举例 2.3算法的特性 2.4怎样表示一个算法 2.4.1用自然语言表示算法 2.4.2用流程图表示算法 2.4.3三种基本结构和改进的流程图 2.4.4用N?S流程图表示算法 2.4.5用伪代码表示算法 2.4.6用计算机语言表示算法 2.5结构化程序设计方法 习题 第3章*简单的C程序设计——顺序程序设计 3.1顺序程序设计举例 3.2数据的表现形式及其运算 3.2.1常量和变量 3.2.2数据类型 3.2.3整型数据 3.2.4字符型数据 3.2.5浮点型数据 3.2.6怎样确定常量的类型 3.2.7运算符和表达式 3.3C语句 3.3.1C语句的作用和分类 3.3.2*基本的语句——赋值语句 3.4数据的输入输出 3.4.1输入输出举例 3.4.2有关数据输入输出的概念 3.4.3用printf函数输出数据 3.4.4用scanf函数输入数据 3.4.5字符数据的输入输出 习题 第4章选择结构程序设计 4.1选择结构和条件判断 4.2用if语句实现选择结构 4.2.1用if语句处理选择结构举例 4.2.2if语句的一般形式 4.3关系运算符和关系表达式 4.3.1关系运算符及其优先次序 4.3.2关系表达式 4.4逻辑运算符和逻辑表达式 4.4.1逻辑运算符及其优先次序 4.4.2逻辑表达式 4.4.3逻辑型变量 4.5条件运算符和条件表达式 4.6选择结构的嵌套 4.7用switch语句实现多分支选择结构 4.8选择结构程序综合举例 习题 第5章循环结构程序设计 5.1为什么需要循环控制 5.2用while语句实现循环 5.3用do…while语句实现循环 5.4用for 语句实现循环 5.5循环的嵌套 5.6几种循环的比较 5.7改变循环执行的状态 5.7.1用break语句提前终止循环 5.7.2用continue语句提前结束本次循环 5.7.3break语句和continue语句的区别 5.8循环程序举例 习题 第6章利用数组处理批量数据 6.1怎样定义和引用一维数组 6.1.1怎样定义一维数组 6.1.2怎样引用一维数组元素 6.1.3一维数组的初始化 6.1.4一维数组程序举例 6.2怎样定义和引用二维数组 6.2.1怎样定义二维数组 6.2.2怎样引用二维数组的元素 6.2.3二维数组的初始化 6.2.4二维数组程序举例 6.3字符数组 6.3.1怎样定义字符数组 6.3.2字符数组的初始化 6.3.3怎样引用字符数组中的元素 6.3.4字符串和字符串结束标志 6.3.5字符数组的输入输出 6.3.6使用字符串处理函数 6.3.7字符数组应用举例 习题 第7章用函数实现模块化程序设计 7.1为什么要用函数 7.2怎样定义函数 7.2.1为什么要定义函数 7.2.2定义函数的方法 7.3调用函数 7.3.1函数调用的形式 7.3.2函数调用时的数据传递 7.3.3函数调用的过程 7.3.4函数的返回值 7.4对被调用函数的声明和函数原型 7.5函数的嵌套调用 7.6函数的递归调用 7.7数组作为函数参数 7.7.1数组元素作函数实参 7.7.2数组名作函数参数 7.7.3多维数组名作函数参数 7.8局部变量和全局变量 7.8.1局部变量 7.8.2全局变量 7.9变量的存储方式和生存期 7.9.1动态存储方式与静态存储方式 7.9.2局部变量的存储类别 7.9.3全局变量的存储类别 7.9.4存储类别小结 7.10关于变量的声明和定义 7.11内部函数和外部函数 7.11.1内部函数 7.11.2外部函数 习题 第8章善于利用指针 8.1指针是什么 8.2指针变量 8.2.1使用指针变量的例子 8.2.2怎样定义指针变量 8.2.3怎样引用指针变量 8.2.4指针变量作为函数参数 8.3通过指针引用数组 8.3.1数组元素的指针 8.3.2在引用数组元素时指针的运算 8.3.3通过指针引用数组元素 8.3.4用数组名作函数参数 8.3.5通过指针引用多维数组 8.4通过指针引用字符串 8.4.1字符串的引用方式 8.4.2字符指针作函数参数 8.4.3使用字符指针变量和字符数组的比较 8.5指向函数的指针 8.5.1什么是函数指针 8.5.2用函数指针变量调用函数 8.5.3怎样定义和使用指向函数的指针变量 8.5.4用指向函数的指针作函数参数 8.6返回指针值的函数 8.7指针数组和多重指针 8.7.1什么是指针数组 8.7.2指向指针数据的指针 8.7.3指针数组作main函数的形参 8.8动态内存分配与指向它的指针变量 8.8.1什么是内存的动态分配 8.8.2怎样建立内存的动态分配 8.8.3void指针类型 8.9有关指针的小结 习题 第9章用户自己建立数据类型 9.1定义和使用结构体变量 9.1.1自己建立结构体类型 9.1.2定义结构体类型变量 9.1.3结构体变量的初始化和引用 9.2使用结构体数组 9.2.1定义结构体数组 9.2.2结构体数组的应用举例 9.3结构体指针 9.3.1指向结构体变量的指针 9.3.2指向结构体数组的指针 9.3.3用结构体变量和结构体变量的指针作函数参数 9.4用指针处理链表 9.4.1什么是链表 9.4.2建立简单的静态链表 9.4.3建立动态链表 9.4.4输出链表 9.5共用体类型 9.5.1什么是共用体类型 9.5.2引用共用体变量的方式 9.5.3共用体类型数据的特点 9.6使用枚举类型 9.7用typedef声明新类型名 习题 第10章对文件的输入输出 10.1C文件的有关基本知识 10.1.1什么是文件 10.1.2文件名 10.1.3文件的分类 10.1.4文件缓冲区 10.1.5文件类型指针 10.2打开与关闭文件 10.2.1用fopen函数打开数据文件 10.2.2用fclose函数关闭数据文件 10.3顺序读写数据文件 10.3.1怎样向文件读写字符 10.3.2怎样向文件读写一个字符串 10.3.3用格式化的方式读写文件 10.3.4用二进制方式向文件读写一组数据 10.4随机读写数据文件 10.4.1文件位置标记及其定位 10.4.2随机读写 10.5文件读写的出错检测 习题 第11章常见错误分析355附录 附录A在Visual C++6.0环境下运行C程序的方法 附录B常用字符与ASCII代码对照表 附录CC语言中的关键字 附录D运算符和结合性 附录EC语言常用语法提要 附录FC库函数 参考文献 内容介绍 由谭浩强教授著、清华大学出版社出版的《C程序设计》是一本公认的学习C语言程序设计的经典教材。根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三版)》的基础上进行了修订。本书按照C语言的新标准C99进行介绍,所有程序都符合C99的规定,使编写程序更加规范;对C语言和程序设计的基本概念和要点讲解透彻,全面而深入;按照作者提出的“提出问题—解决问题—归纳分析”三部曲进行教学、组织教材;本书的每个例题都按以下几个步骤展开:提出任务—解题思路—编写程序—运行程序—程序分析—有关说明。符合读者认知规律,容易入门与提高。 本书内容先进,体系合理,概念清晰,讲解详尽,降低台阶,分散难点,例题丰富,深入浅出,文字流畅,通俗易懂,是初学者学习C程序设计的理想教材,可作为高等学校各专业的正式教材,也是一本自学的好教材。本书还配有辅助教材《C程序设计(第四版)学习辅导》
C语言程序设计:从零开始掌握编程精髓 本书旨在为零基础的学习者提供一套系统、深入的C语言学习路径。通过清晰的讲解、丰富的实例和循序渐进的练习,您将逐步掌握C语言的核心概念,培养严谨的编程思维,并能够独立设计和实现复杂的程序。 第一部分: C语言的基石——数据、变量与运算 在程序的世界里,数据是构建一切的基础。本部分将带您走进C语言的数据类型世界,了解不同类型数据的存储方式和特性。 基本数据类型: 从整型(`int`)、浮点型(`float`、`double`)到字符型(`char`),我们将一一剖析它们在内存中的表示、取值范围以及常用操作。您将学会如何选择最合适的数据类型来精确地表示您的数据,避免不必要的资源浪费和潜在的溢出问题。 变量的声明与初始化: 变量是存储数据的容器。本书将详细讲解变量的声明规则,以及如何通过初始化为变量赋予初始值,确保程序的健壮性。我们将讨论全局变量、局部变量的区别,以及它们的作用域和生命周期,帮助您理解数据在程序中的管理。 运算符的魔力: C语言提供了丰富的运算符,它们是执行计算和逻辑判断的强大工具。您将学习算术运算符(`+`, `-`, ``, `/`, `%`)、关系运算符(`>`, `<`, `==`, `!=`, `>=`, `<=`)、逻辑运算符(`&&`, `||`, `!`)、位运算符(`&`, `|`, `^`, `~`, `<<`, `>>`) 以及赋值运算符(`=`, `+=`, `-=`, `=`, `/=`, `%=`)等。通过大量的示例,您将掌握运算符的优先级和结合性,学会如何构建复杂的表达式,让数据按照您的意愿进行转换和运算。 类型转换: 在实际编程中,不同类型的数据常常需要相互转换。我们将深入探讨隐式类型转换和显式类型转换(强制类型转换),讲解它们的工作原理、可能带来的影响以及如何安全有效地进行类型转换,避免数据丢失或精度下降。 第二部分: 控制程序的流程——决策与循环 程序并非简单的线性执行,而是需要根据不同的条件做出决策,并重复执行某些任务。本部分将教会您如何利用C语言的控制结构来实现程序的逻辑化和自动化。 条件判断:if-else 语句 `if` 语句: 学习如何使用`if`语句根据一个布尔表达式的结果来决定是否执行某段代码。我们将介绍单分支`if`语句的使用场景,并强调理解条件表达式的重要性。 `if-else` 语句: 掌握双分支`if-else`语句,实现两种不同情况下的代码执行路径。您将学会如何通过嵌套`if-else`结构来处理更复杂的条件逻辑。 `else if` 语句: 了解如何使用`else if`来处理多个互斥的条件,构建多路选择结构,使程序能够根据一系列条件进行判断并执行相应的代码块。 `switch` 语句: 学习`switch`语句,它是一种更简洁、高效的多路选择结构,特别适用于根据一个变量的多个可能值来执行不同操作的场景。您将理解`case`、`break`和`default`关键字的作用,并学会如何避免`switch`语句中的常见陷阱。 循环结构:重复的力量 `while` 循环: 掌握`while`循环,它根据一个条件来重复执行一段代码,直到条件不再满足为止。我们将演示如何设置循环条件,如何避免无限循环,以及`while`循环在计数、累加等场景下的应用。 `do-while` 循环: 学习`do-while`循环,与`while`循环不同的是,`do-while`循环至少会执行一次循环体,然后再判断循环条件。这在需要先执行一次操作后再决定是否继续循环的情况下非常有用。 `for` 循环: 掌握功能强大的`for`循环,它特别适用于已知循环次数的场景。您将学习`for`循环的初始化、条件判断和迭代更新三个组成部分,并通过实例了解其在遍历数组、生成序列等方面的广泛应用。 循环控制语句:`break` 和 `continue` `break` 语句: 学习如何使用`break`语句提前终止当前所在的循环(`for`、`while`、`do-while`)或`switch`语句。 `continue` 语句: 掌握`continue`语句,它用于跳过当前循环的剩余部分,直接进入下一次循环的条件判断。 嵌套循环: 探索嵌套循环的用法,即在一个循环体内包含另一个循环。这将帮助您处理二维数组、生成网格状数据等更复杂的模式。 第三部分: 数据的组织——数组与字符串 当需要处理大量同类型的数据时,数组和字符串就显得尤为重要。本部分将带您深入理解这些数据结构,并学习如何高效地操作它们。 数组:同类型数据的集合 一维数组: 学习如何声明、初始化和访问一维数组。您将理解数组元素的索引从0开始,并掌握通过循环遍历数组以执行批量操作的方法。我们将演示数组在存储列表、序列数据等方面的应用。 多维数组: 探索二维及更高维数组的声明和使用。特别地,我们将详细讲解二维数组的内存存储方式,以及如何通过嵌套循环来处理矩阵、表格等数据。 数组与函数: 学习如何将数组作为参数传递给函数,以及如何在函数内部修改数组的内容。我们将讨论数组传递的本质(传递首地址)以及相关的注意事项。 字符串:字符的序列 字符串的表示: 理解C语言中字符串是以空字符(` `)结尾的字符数组。 字符串的输入与输出: 掌握使用`scanf()`、`gets()`(注意安全风险,推荐`fgets()`)等函数读取字符串,以及使用`printf()`、`puts()`等函数输出字符串的方法。 常用的字符串处理函数: 学习C标准库提供的强大字符串函数,例如: `strlen()`:计算字符串长度。 `strcpy()`、`strncpy()`:字符串复制。 `strcat()`、`strncat()`:字符串连接。 `strcmp()`:字符串比较。 `strchr()`、`strstr()`:查找字符或子字符串。 `atoi()`、`atol()`、`atof()`:字符串转换为数值。 字符串的内存安全性: 强调字符串操作的潜在风险,特别是缓冲区溢出问题,并讲解如何使用更安全的函数来避免这些问题。 第四部分: 代码的模块化——函数与作用域 函数是C语言中实现代码复用和模块化的基石。本部分将引导您掌握函数的定义、调用以及变量的作用域,从而编写出结构清晰、易于维护的代码。 函数的定义与调用: 学习如何定义自己的函数,包括函数的返回类型、函数名、参数列表和函数体。您将理解函数的声明(原型)与定义的关系,并掌握函数是如何被调用的。 函数的参数传递: 深入理解函数参数传递的两种方式: 传值调用(Pass by Value): 当函数参数是基本数据类型时,传递的是变量值的副本,函数内部的修改不会影响原始变量。 传址调用(Pass by Pointer/Reference): 通过传递变量的地址,函数内部可以直接修改原始变量的值,这是实现函数间数据共享和修改的关键。 函数返回值: 学习如何使用`return`语句从函数返回一个值,以及函数可以返回不同类型的值(包括`void`表示不返回值)。 变量的作用域与生命周期: 局部变量: 理解在函数内部声明的变量,其作用域仅限于该函数,生命周期从函数调用开始到函数返回结束。 全局变量: 学习在所有函数外部声明的变量,其作用域是整个程序,生命周期从程序开始到程序结束。我们将讨论全局变量的优点和潜在的缺点,以及如何谨慎使用。 静态变量(`static`): 掌握`static`关键字在局部变量和全局变量中的不同作用。在局部变量前使用`static`,可以使变量的生命周期延长到整个程序运行期间,但作用域仍然局限于函数内部。在全局变量前使用`static`,则会限制其作用域到当前编译单元。 递归函数: 探索递归的概念,即一个函数调用自身。我们将通过经典的递归例子(如阶乘、斐波那契数列)来解释递归的工作原理,并讨论递归的优缺点以及如何避免栈溢出。 第五部分: 内存的管理——指针的奥秘 指针是C语言中最强大也最容易让初学者感到困惑的概念之一。本部分将循序渐进地揭示指针的本质,帮助您理解内存地址、指针变量以及它们在程序设计中的核心作用。 地址与指针变量: 理解内存地址的概念,以及指针变量就是存储内存地址的变量。学习如何使用取地址运算符`&`获取变量的地址,以及如何声明和定义指针变量。 解引用运算符:`` 掌握解引用运算符``,它用于访问指针所指向内存地址中的数据。通过解引用,您可以读取或修改指针指向的内容。 指针与数组: 深入理解指针与数组之间的紧密联系。学习如何使用指针遍历数组,以及数组名在很多情况下可以被视为指向数组首元素的指针。 指针与函数: 指针作为函数参数: 再次强调传址调用,通过传递指针,函数可以修改调用者变量的值。 函数指针: 探索函数指针的概念,即指向函数的指针。学习如何声明、定义和调用函数指针,以及它们在回调函数、动态库调用等高级场景中的应用。 指针算术: 学习指针的加减运算。当对指针进行加减操作时,实际移动的字节数取决于指针指向的数据类型的大小,这使得指针算术在处理连续内存块时非常方便。 `NULL`指针: 理解`NULL`指针的概念,它是一个特殊的指针值,表示不指向任何有效的内存地址。学习何时以及如何使用`NULL`指针来避免野指针错误。 野指针与空指针: 警惕野指针(指向未分配或已释放内存的指针)和空指针(未初始化的指针),它们是导致程序崩溃和不可预测行为的常见原因。本书将提供避免这些问题的实用技巧。 第六部分: 动态内存分配与复杂数据结构 在程序运行过程中,有时需要根据实际需求动态地分配和释放内存。本部分将引导您掌握动态内存管理技术,并为构建更复杂的数据结构打下基础。 动态内存分配函数: `malloc()`: 学习使用`malloc()`函数在堆(heap)上分配指定字节数的内存。理解`malloc()`的返回值(指向分配内存块的指针)以及如何进行类型转换。 `calloc()`: 掌握`calloc()`函数,它不仅分配内存,还会将分配的内存区域的所有字节初始化为零。 `realloc()`: 学习`realloc()`函数,它用于重新分配已分配的内存块的大小,可以增大或减小已分配内存。 `free()`: 至关重要,理解`free()`函数的作用,它用于释放之前通过`malloc()`、`calloc()`或`realloc()`分配的内存。务必在不再需要内存时及时释放,以防止内存泄漏。 动态内存分配的常见错误: 深入分析内存泄漏、重复释放、访问已释放内存等常见错误,并提供有效的调试和预防策略。 结构体(`struct`): 定义与使用: 学习如何定义结构体,将不同类型的数据成员组合成一个逻辑单元。理解结构体变量的声明、初始化和成员访问(使用`.`运算符)。 结构体与指针: 掌握如何使用指针指向结构体变量,以及如何使用`->`运算符来访问结构体成员。 嵌套结构体: 探索结构体成员本身也可以是另一个结构体,实现更复杂的数据组织。 联合体(`union`): 了解联合体的概念,它允许多个成员共享同一块内存空间。学习联合体的定义、使用以及与结构体的区别,并理解其在特定场景下的应用。 枚举(`enum`): 掌握枚举类型,它为一组命名整型常量提供了一种更具可读性的方式。 第七部分: 文件操作——数据的持久化 程序运行结束后,数据会丢失。文件操作使我们能够将数据保存到磁盘,并在下次运行时重新加载。本部分将教授您如何进行文件的读写。 文件指针: 理解文件指针(`FILE `)是操作文件的关键。 文件的打开与关闭: 学习使用`fopen()`函数以不同的模式(读`"r"`、写`"w"`、追加`"a"`、读写`"r+"`等)打开文件,并使用`fclose()`函数关闭文件。 顺序读写: 字符读写: 掌握`fgetc()`(读字符)、`fputc()`(写字符)函数。 字符串读写: 学习`fgets()`(读字符串,推荐使用,比`gets()`安全)、`fputs()`(写字符串)函数。 格式化读写: 使用`fscanf()`(从文件读)、`fprintf()`(写到文件)函数,实现与`scanf()`和`printf()`类似的格式化数据读写。 二进制文件读写: `fread()`: 学习使用`fread()`函数从文件中读取二进制数据块。 `fwrite()`: 掌握使用`fwrite()`函数将二进制数据块写入文件。 理解二进制模式: 讲解文件以二进制模式打开(如`"rb"`、`"wb"`)与文本模式的区别。 文件定位: 学习使用`fseek()`(设置文件指针位置)、`ftell()`(获取文件指针当前位置)和`rewind()`(将文件指针移到文件开头)函数来控制在文件中的读写位置。 错误处理: 强调在文件操作过程中进行错误检查的重要性,学习使用`ferror()`和`feof()`函数来判断文件操作是否出错或到达文件尾。 第八部分: 预处理器指令与编译过程 在程序编译之前,预处理器会进行一些文本替换和文件包含等操作。本部分将带您了解预处理器的基本指令,并对C语言的编译过程有一个初步的认识。 `include`: 学习如何使用`include`指令包含标准库头文件和自定义头文件,实现代码的模块化和复用。 `define`: 掌握`define`指令,用于定义宏常量和宏函数。我们将探讨宏的文本替换机制,以及使用宏的注意事项,例如括号的使用和潜在的副作用。 条件编译:`ifdef`、`ifndef`、`if`、`else`、`endif` 学习使用条件编译指令,根据不同的编译环境或条件来包含或排除某些代码段,这在编写跨平台程序时非常有用。 编译、链接与运行: 对C语言程序的从源代码到可执行文件的整个过程有一个基本了解,包括编译、汇编、链接等步骤。 学习建议: 动手实践: C语言是一门实践性很强的语言,请务必在学习过程中多动手编写代码,尝试书中提供的所有示例,并完成课后练习。 理解概念: 不要死记硬背语法,而是要深入理解每个概念背后的原理。例如,理解指针的本质是地址,理解函数调用栈的工作方式。 调试技巧: 学会使用调试器(如GDB)来查找和修复程序中的错误,这是成为一名优秀程序员的必备技能。 阅读优秀代码: 阅读他人的优秀C语言代码,学习他们的编程风格和技巧。 循序渐进: C语言的知识点是相互关联的,请按照本书的章节顺序进行学习,打好坚实的基础。 通过本书的学习,您将不仅能够熟练运用C语言编写程序,更重要的是,您将建立起扎实的计算机科学基础,为未来学习更高级的编程语言和技术奠定坚实的基础。