C语言程序设计
作者 : 王立柱 编著
出版日期 : 2011-06-16
ISBN : 978-7-111-34972-3
定价 : 29.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 257
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书共分12章,内容包括:机器语言简介,基本数据类型,操作符和表达式,程序流程控制,指针和数组,函数,模块化程序设计,字符串,结构,流与文件,二维数组和指针以及C语言高级综合程序设计。最后一章包括顺序表、单向链表、综合设计实例、从C到C++的基本内容和从C到C++的顺序表。

图书特色

C语言程序设计
The C Programming Language
王立柱 编著

培养程序设计能力是一项系统的工程。作者以逻辑方法进行了长期的程序设计类课程的教学实践,收效显著,并将其心得融入本书中。本书以程序设计的发展过程为对象,以程序设计的基本矛盾的运动为主线,把程序设计的需要作为原则,用程序设计的实例来贯穿,使读者以哲学的眼光理解程序设计,更高效地提升程序设计能力。

本书特点
注重规律,按照程序设计方法的连续发展阶段而编写。本书介绍了机器指令系统和机器语言程序设计;系统讲授了基本类型和类型化程序设计、复合类型和过程化程序设计;同时涉及抽象类型、高级程序设计以及类和对象化程序设计。
承上启下。本书每一章节的内容都是在克服前一章节的局限性和继续其优点之后引入的。
实用性强。本书从需要出发,用实例说明问题,对函数、指针、数组和字符串的讲授有独到见解,使读者具有身临其境的创新体验,从而自主地分析和解决一些疑难问题。
本书配套的多媒体助学软件使结构、算法、代码、运行过程和结果同时展现,数据自由输入,运行过程步步跟踪。同时,本书为教师提供教学课件和实例程序源代码。相关资源可登录华章网站(www.hzbook.com)下载。

图书前言

畅行在程序和哲学之间
一、学习程序设计的方法
  学习程序设计有两种方法:历史方法和逻辑方法。
  历史方法是人们在不自觉中使用的方法。这种方法就是跟随事物的进程来分析和描述事物的方法。但是历史的进程常常是跳跃式的、曲折的,如果处处跟随着它,那就势必要关注许多无关紧要的、偶然性的东西,这些东西反映在思想意识上常常是相互冲突的,它们会不时地打断我们思想的进程,使我们很难形成前后连贯的、可以继承而深入的概念。而人的认知能力是有限的,不借助于前后连贯的概念,人们就很容易孤立、静止地看待问题,停留在通俗、肤浅的认识上。例如对不断出现的程序语言或程序设计的概念,有的人认为越新的越有价值,有的人认为越容易的越好,好像他们面对的是一堆彼此毫无关联的马铃薯,只有“新鲜的”或“好看的”才值得挑选。这种认识有多种表现形式,例如:有了C++就不必学习C了;有了Java就可以不学习C++了;“引用”是专门代替令人头疼的“指针”的;类概念的产生是因为我们眼前的事物都具有类的特征。他们喜欢从概念出发,忽视了用恰当的事实来说明概念形成的过程,不过这种认识是由历史方法决定的,因为事物的进程是跳跃式的、曲折的,不深入到事物的内部,就看不清形成这个概念的具体过程。
  逻辑方法是本教材中采用的方法。这种方法要求把程序设计当作过程去研究,而且去除表面的、干扰性的、偶然性的因素,深入到程序设计的内在结构中去,研究它的发展规律。要知道“事物的表现形式和事物的本质不是直接合二为一的,否则一切科学都是多余的了”。要相信“精神本性也和肉体本性一样是必要的、具体的,并且同样具有严格的形式”,这种形式就是一系列不同的发展阶段,它们以一个否定另一个的方式彼此联系着。这里的否定不是消灭,而是扬弃,是后者克服前者中消极的东西,保留和继承前者中积极的东西,并把它发展到新的阶段,而连接各个阶段的是概念,概念既是对前一个阶段的总结,也是后一个阶段的起点。我们要做的就是由此及彼地推广这些概念,使它们互相隶属,从低级形式发展到高级形式。
  逻辑方法要求我们至少做到五个方面:
  1) 具体。要研究事实,对比事实,积累事实,用事实说话。要从程序设计的内部,即用程序设计的事实,来阐述程序设计的思想,不要从外部注入思想。例如,“类概念的产生是因为我们眼前的事物都具有类的特征”就不是用程序设计的事实阐述类的思想,而是在灌输类的思想,用这种思想不能说清一个简单的问题:我们眼前的事物早就具有类的特征,为什么类的概念没有出现得更早一些?
  2) 全面。要全面地看待事物,尽可能把握、研究它的一切方面、一切联系和中介。“具体之所以具体,是因为它是许多规定的综合,是多样性的统一。它在思维中表现为综合的过程,表现为结果,而不是表现为起点”。例如,引用的内部实质是指针,外部是“去引用”,形式等价于一个对象的别名。“‘引用’是专门代替令人头疼的‘指针’的”这种说法,仅仅是把引用看成了别名,而忽略了其实质。又例如,有人抱怨C++编译器暗地里对程序做了很多“手脚”,让程序员无所适从,这主要是因为他们还没有从程序设计的角度主动对待编译器这个连接高级语言和机器语言的中介。
  3) 过程。“要从事物的发展和变化中来观察事物”。“结论要是没有使它得以成为结论的过程,就毫无价值;结论本身若是固定不变,若是不再成为继续发展的前提,就比无用还糟糕”。用一句话来表达,就是过程比结果更重要。这是新的唯物主义观点的直接的理论前提,也是逻辑方法的出发点。例如,有人认为可以直接学习C++,而不用先学习C。实际上,学习C++也要先学习基本类型、操作符和表达式、程序流程控制、指针和数组、函数、C格式字符串等,而这些绝大部分都是C的内容,即使是那些与C不同的部分,也需要“从C基本类型到C++用户类型再到C基本类型”这个否定之否定的过程来给予说明。例如,C++基本类型变量的初始化形式如下:
  int n(5);
  C++从左至右的联合赋值表达式如下:
  (m=n)=5;
  C++的函数重载、内联函数和默认参数,都是C中没有的内容,但是如果我们尊重它们产生的过程,就应该在C++用户类型和C基本类型如何统一的阶段中来学习,这样一来,直接学习C++和先学习C再学习C++就是一回事了。
  4) 相互作用。事物是相互作用的,在大多数情形下,正是忘记了相互作用,所以阻碍了我们看清最简单的事物。例如,很多人都不是把存储和算法的相互作用和不断发展的关系当作程序设计方法,而是把诸如顺序、循环和选择等程序流程控制结构当作程序设计方法,认为任何程序都离不开这些结构,因此它们是方法。可是这种适用于任何情形的方法在像字符串匹配这样的算法设计中,其作用却微乎其微,甚至无用武之地,因为用C++实现仅是一条函数调用语句,用C实现需要模块化设计,用机器语言实现就要熟悉计算机组成和工作过程了。
  5) 实践。实践是不断遇到问题和解决问题的过程,是认识的源泉,或者说不断遇到问题和解决问题的过程是改造世界的过程,人首先是改造世界的主体,然后才是认识世界的主体,这是实践主体性。因此,“必须把人的全部实践、人的需要,包括到对事物的完美的定义中去”。“凡是把理论导致神秘主义方面去的神秘东西,都能在人的实践中以及对这个实践的理解中得到合理的解决”。用Stroustrup的话讲:C++的每一步演化和发展都是由于实际问题所引起的。它的任何概念都不是卓越的个人苦思冥想的结果。虽然有不少语言是为了证明一个观点而设计的,但却是C++成为系统设计的主流语言。
  具体、全面、过程、相互作用和实践,这些虽然不是逻辑方法的全部,但就我们目前的学习来说,已经足够了。我们知道,C++标准模板库的出现,特别是常用的string、vector、list和适配器这些常用的部分,使学习C++和学习数据结构的顺序发生冲突:学习数据结构需要C++,而C++中又包含着数据结构,它们互为前提。合理地解决这个问题,需要综合运用逻辑方法。先考虑C++编译器这个中介,它更多地是把C++代码转换为C代码,然后利用C编译器把C代码转换为机器代码。如果了解从C++到C的转换过程,就不会抱怨C++编译器暗中“做手脚”。再考虑C++标准模板库,string、vector、list和适配器在很长时间里一直属于C描述的数据结构,这不是一个可以转过头说个“不”就可丢弃的程序设计实践。C++标准模板库告诉我们,这里包含着很多对C++的必然性的思考,我们的任务就是把它们精炼出来,和C++的描述对比,用前者到后者的转换过程来表达这个思考,这不是用三两句话就可以表达出来的。科学成就在本质上是积累的结果,科学是继承性最强的文化形态之一,而不用逻辑方法,积累是不可能的。
二、丛书的内容
  运用上述逻辑方法,我们进行了长期的包括C、C++和数据结构在内的教学实践,收效显著。现在我们把积累的经验和对逻辑方法更系统、深入的理解及运用都融入到一套程序设计系列教材中。这套教材包括:《C语言程序设计》、《C++语言程序设计》(基于C,作为第2门程序设计课教材)、《数据结构:C++语言描述)》、《C++语言程序设计》(从过程化到面向对象,作为第1门程序设计课教材)、《Java语言程序设计》和《C和C++程序设计中的100个难题》。高校教师可根据自己学校的情况选用。
  我们选择C、C++和Java,是因为它们不仅是系统设计的主流语言,而且也代表着程序设计的发展;我们选择数据结构,是因为它不仅代表着程序设计的主要方法,而且STL的出现,使数据结构和程序语言达到了几近完美的结合。它们结合在一起,为我们认识、学习、运用和丰富逻辑方法提供了广阔的空间。
  上述逻辑方法的思想,大多引自我们编写的《马克思恩格斯哲学原著英汉对照选读》一书。编写这本书的目的是为了更系统地掌握辩证唯物主义思想,加强我们教学的原则性和系统性。这本书的第2版正在准备中,新版书可以作为这套程序设计课程群教材的教师参考书。
三、本书的脉络
  本书以程序设计的发展过程为对象,以程序设计的基本矛盾的运动为主线,把程序设计的需要作为原则,用程序设计的实例来贯穿。
  什么是程序?程序是在某种存储模式上实现的算法,即程序=存储模式+算法。所谓存储模式是指数据和对数据的基本操作的存在形式。所谓算法是指可以用基本操作来表示的求解问题的有穷序列。算法好比一台机器,构造再复杂,从力学上看,也不过是简单机械力的不断重复。最先提出这个思想的人是图灵,他提出,应该用机器保留一些最简单的操作,然后将一个复杂的计算分解为这些操作。实现这个思想的代表人物是冯·诺依曼,他用固化在硬件中的机器指令表示简单操作。这些机器指令的集合构成的系统成为第一个程序语言—机器语言。从此,存储模式都用程序语言来表示,程序也就成为用某种程序语言实现的算法,例如机器语言程序、C语言程序、C++语言程序、Java语言程序等。
  什么是程序设计?程序设计就是程序设计方法。“纵观短暂的计算机发展史,存储和算法这两个方面一直存在,发展演化的只是它们之间的关系,这个关系就是程序设计方法”。这个关系的发展经历了这样几个阶段:基于机器指令系统存储模式的过程化程序设计、基于基本类型存储模式的类型化程序设计、基于复合类型存储模式的过程化程序设计、基于抽象类型存储模式的程序设计、基于类存储模式的对象化程序设计、基于继承和动态绑定的面向对象的程序设计、基于标准模板库的泛型程序设计。其中,基于抽象类型的高级程序设计就是数据结构。机器语言(或者汇编语言)、C语言和C++语言与这个过程是对应的。
  什么是程序设计的基本矛盾?程序设计的基本矛盾是存储和算法。从基于机器指令系统的过程化程序设计到基于标准模板库的泛型程序设计的一系列相互连接的发展阶段,都是由这个矛盾推动的。
  基于上述基本思想,本书的内容安排如下:
  第1章简述基于机器指令系统存储模式的过程化程序设计,主要内容有:
  1) 一个求和程序,说明存储模式与计算机组成及工作过程的联系。
  2) 一个方程求解的两种程序设计方法,说明存储模式和算法的相互依赖关系。
  3) 综合分析存储模式和算法的矛盾,并给出通向下一阶段的途径。
  第2章~第4章讲授基于基本类型存储模式的类型化程序设计,主要内容有:
  1) 从数值算法的基本需要出发,介绍各种固有基本类型存储模式的特点。
  2) 操作符表达式与基本类型的统一。
  第5章~第7章讲授基于指针与数组复合类型的过程化程序设计,主要内容有: 
  1) 从非数值算法的基本需要出发,描述数组和指针应有的特点。
  2) 从地址到指针的类型化过程。
  3) 数组的两种定义格式和对应的两个方面的特征—数组变量和数组指针。
  4) 数组和指针的相互依存关系。
  5) 函数与操作符表达式的统一:函数是操作符表达式的逻辑延伸。
  6) 函数调用和赋值操作的统一:函数调用过程可以概括为三步,每一步都是赋值操作。
  7) 递归和非递归函数的统一:递归和嵌套调用的统一;递归和递推的统一;不同层次递归和函数的统一。
  8) 过程化程序设计的规模化—模块化程序设计。
  第8章~第10章讲授基于抽象存储模式的程序设计,主要内容有:
  1) 基于系统支持的抽象存储模式—字符串。
  2) 用自定义函数代替系统提供的字符串基本操作函数。
  3) 用自定义函数补充字符串的不足。
  4) 基于自设计抽象存储模式的程序设计—Date结构。
  5) 基于系统支持的抽象类型存储模式的程序设计—文件。
  第11章从二维数组和指针出发,对各种数组和指针的概念做了综合性分析和概括。
  第12章讲授基于系统支持的抽象类型存储模式的高级程序设计和基于类存储模式的对象化程序设计,主要内容有:
  1) 顺序表。
  2) 链表。
  3) 结构串(简介)。
  4) 综合设计—文本统计。
  5) 分析C语言的局限性。
  6) 基本内容从C到C++。
  7) 顺序表从C到C++。
四、教学经验和体会
  1. 为什么学习程序设计
  为什么要学习程序设计?这是首先要向学生说明的事情。我们一般都会告诉他们:计算机已经深入到我们的生活,并不断影响和改变着我们的生活,学习程序设计可以更深入地理解和更有效地应用计算机。这样回答是没有什么问题的,但是还远远不够,学习程序设计更是为了学习逻辑方法,提高科学素质,尽快完成从中学到大学的角色转变。
  逻辑方法要求把事物的发展过程当作对象,深入研究它的发展规律,这种方法在中学是不学的,而在大学是重点学习的方法。要学好逻辑方法必须将实验和专业课程结合起来学习,计算机的广泛应用,使程序设计特别适合于这个专业课程角色。当然,不能说只要学习程序设计就能学会逻辑方法,只有深入到程序设计的内在结构中去研究它的发展规律,才能达到我们的学习目的。
  科学素质是指分析和处理复杂问题的能力。所谓复杂,是指包含着很多必然联系的因素。所谓能力,是指能够认识到并把握住这些因素之间必然的联系。要提高这种能力,就要从解决实际的复杂问题的过程中学习。“C++的设计就是为了使较大的程序能够以一种合理的方式构造出来”,本教材实现了从C到C++的无缝连接。
  作为老师,不要仅仅从实用的角度或仅仅为了应试来讲授程序设计,这会使课程支离破碎,只剩雕虫小技。要讲逻辑,注重整体,前后连贯地讲授知识,使学生具备全局观、系统观,这是大学老师的义务、责任和价值。
2. 培养学习兴趣,树立学习信心
  比教学生编程技巧更重要的是培养他们学习程序设计的兴趣,树立他们的自信心。编程技巧是从模仿开始的,模仿什么和怎样模仿取决于学习什么和怎样学习,而后者就是学习方法。学习兴趣是由学习什么和怎么学习来决定的、能够提高学习者认知能力和自身价值的、可持续的知识积累过程。自信心是对这个过程的认同。而这个过程与程序设计的发展过程是统一的。
  我们之所以欣赏计算机的美,不只是因为它具有令人感叹的人类智慧的美,更是因为我们通过比较全面而深刻地认识它内在的变化规律,能够比较全面而深刻地挖掘出自己的潜能,最终欣赏到自身的美。
3. 因材施教
  本书如果作为计算机专业的教材,总学时数不少于80,那么每一章中的深入讨论部分和第12章都应该讲。
  本书如果作为非计算机专业的必修课教材,总学时数不少于60,深入讨论部分、8.5节和第11章可以省略或要求自学,第12章可以作为综合设计的实训内容。
  如果总学时数少于60,就把重点放在第5章、第6章和第8章的前四节。
4. 多媒体教学
  本书有配套的多媒体软件,既助学又助教,使结构、算法、代码、运行过程和结果同时展现、数据自由输入、运行过程步步跟踪。它适应了传媒时代的要求,扩展了学生自主学习的空间,解决了算法复杂抽象、学生难以理解、教师难以讲解的难题,加强了师生的切磋交流,为教师前后横向对比、全面具体、综合系统、深刻展示思想方法地授课搭建了平台。本书配套的学生用助学软件、教师用教学软件以及源代码均可从华章网站(www.hzbook.com)下载。另外,该多媒体软件是基于Authorware应用软件的编程特性开发的,需要有很好的程序设计基础和综合能力,它从一个方面时时彰显着学习程序设计的意义(如下图所示)。
5. 实验
  程序设计类课程注重实验,可是实验课时普遍不足,甚至可能因为缺少教师而使教师难以关照每一个学生。多媒体课件可以在一定程度上代替教师讲解很多实验中遇到的问题,而且可以把学生分组,每组由优秀的学生担任组长,遇到问题时,先对比课件,集体讨论(如下图所示)。
6. 考试
  考试要突出系统性和逻辑性知识,树立学生的全局观和发展观,切忌偏题、怪题、随意编造题。指针和函数是C语言的核心内容,也是在程序语言中不断发展的核心概念,因此考试要围绕这两点系统地展开。题目可以公开,在几套题中随机选取,概念题笔试,程序题上机编写和调试,其中有常规题和自选题。就像体操和跳水比赛一样,动作和难度系数公开,有规定动作和自选动作。下面是一套针对计算机专业的期末考题:
  1) 笔试部分—举例说明或论述下面的概念或题目:
   地址和指针的关系。
   数组变量和数组指针。
   数组和指针相互依存。
   数组变量指针和数组指针。
   二维数组变量、二维数组指针、行数组变量和行数组指针的区别和联系。
   二维数组、一维数组、二维指针变量、一维指针、指针的指针、一级和二级指针的区别和联系。
  2) 编程部分—上机编写和测试下列算法:
   用自定义函数代替系统提供的字符串基本操作函数,并编写应用程序检验。
   用自定义函数补充字符串的基本操作函数,并编写应用程序检验。
五、致谢
  感谢武警医学院贾冬梅老师,她对这本教材仔细校对了两次,不仅指出很多文字上的错误,而且提出不少建设性的意见,使我几次在内容和布局上做了调整。
  感谢天津师范大学的刘志红老师,她不仅是课程改革团队的主要成员、教学课件的制作者、课程的主讲教师,而且十年来,她的学生评教成绩一直很优秀,名列前茅。要知道,我们的课程包括C、C++和数据结构,讲授两个学期,每届学生有几百人,在这样的教学规模下,能够有如此的成绩,不仅对我,而且对我们周围很多从事计算机教育的老师,都是一种鼓舞。我们所遵循的逻辑方法不仅经过她的教学实践证明是普遍受学生欢迎的,而且也通过她的实践得到不断的完善。
  限于作者水平,书中难免有不足或不当之处,恳请读者、同行批评指正。
作  者

上架指导

计算机\程序设计

封底文字

培养程序设计能力是一项系统的工程。作者以逻辑方法进行了长期的程序设计类课程的教学实践,收效显著,并将其心得融入本书中。本书以程序设计的发展过程为对象,以程序设计的基本矛盾的运动为主线,把程序设计的需要作为原则,用程序设计的实例来贯穿,使读者以哲学的眼光理解程序设计,更高效地提升程序设计能力。
本书特点:
注重规律,按照程序设计方法的连续发展阶段而编写。本书简单介绍了机器指令系统和机器语言程序设计;系统讲授了基本类型和类型化程序设计、复合类型和过程化程序设计;选讲了抽象类型和高级程序设计;初步讲授了类和对象化程序设计。
承上启下。本书每一章节的内容都是在克服前一章节的局限性和继续其优点之后引入的。
实用性强。本书从需要出发,用实例说明问题,使读者具有身临其境的创新体验,在函数、指针、数组和字符串的表述上都有所创新,有助于提高读者的逻辑能力,从而分析和解决一些疑难问题。此外,本书还实现了C和C++的“无缝对接”,使读者可以自然而然、轻松愉快地继续学习C++。
本书配套助学多媒体软件使结构、算法、代码、运行过程和结果同时展现,数据自由输入,运行过程步步跟踪。
本书为教师提供教学课件,有需要者可登录华章网站(www.hzbook.com)下载。

图书目录

出版者的话
编委会
丛书序言
前言
教学建议

第1章 机器语言简介 1
1.1 计算机组成及工作过程 1
1.2 计算机硬件和软件 4
1.3 机器语言程序 5
1.4 汇编语言 8
1.5 存储和算法的深入探讨 9
习题 10
第2章 基本数据类型 11
2.1 变量与字面值常量 11
2.2 整型 17
2.3 字符型 18
2.4 实型 21
2.5 基本数据类型的深入探讨 22
习题 23
第3章 操作符和表达式 24
3.1 表达式 24
3.2 关系操作符 25
3.3 逻辑操作符 25
3.4 自增自减操作符 27
3.5 赋值和复合赋值操作符 27
3.6 条件操作符 28
3.7 逗号操作符 29
3.8 复合表达式 29
3.9 内部类型转换 29
3.9.1 赋值兼容性 29
3.9.2 表达式计算中的类型转换过程 30
3.9.3 强制类型转换 30
习题 31
第4章 程序流程控制 32
4.1 选择结构 32
4.1.1 if-else语句 32
4.1.2 switch-case语句 36
4.2 循环结构 37
4.2.1 for语句 38
4.2.2 while语句 39
4.2.3 do-while语句 42
4.2.4 循环嵌套 43
4.3 其他流程控制语句 44
4.3.1 break语句 44
4.3.2 continue语句 45
习题 45
第5章 指针和数组 49
5.1 指针 49
5.1.1 间接引用和指针 49
5.1.2 指针的算术运算 52
5.1.3 指针的其他基本操作 53
5.1.4 void型指针 53
5.2 数组 53
5.2.1 数组和数组指针 54
5.2.2 变量和长度为1的数组 56
5.2.3 数组和指针的相互依存 57
5.3 指针和数组的应用设计举例 58
5.3.1 数组元素求和 58
5.3.2 选择最小元素 59
5.3.3 选择排序 59
5.3.4 顺序查找 61
5.4 指针和数组的深入探讨 61
5.4.1 指针、数组、表达式和左值 61
5.4.2 数组变量指针和数组指针 62
5.4.3 指针的深入探讨—类型与bit 62
习题 63
第6章 函数 65
6.1 函数定义与调用 65
6.2 值传递和指针传递 69
6.3 返回值与指针传递 70
6.4 函数声明(原型) 70
6.5 函数应用设计举例 72
6.5.1 判断质数 72
6.5.2 求最大公约数 73
6.5.3 选择排序 73
6.5.4 起泡排序 74
6.5.5 数制转换 75
6.5.6 顺序查找 76
6.5.7 折半查找 77
6.5.8 划分数组元素 77
6.5.9 删除重复数据 79
6.6 函数调用与变量的存储类别 80
6.6.1 自动局部变量 80
6.6.2 静态局部变量 83
6.6.3 外部变量 84
6.6.4 寄存器变量 85
6.7 动态空间管理 85
6.7.1 动态空间的申请与释放 86
6.7.2 筛法求质数 88
6.7.3 Josephus问题 89
6.8 函数指针 90
6.9 递归 91
6.10 输入/输出函数 94
6.10.1 printf和scanf 94
6.10.2 getchar和putchar 98
6.11 函数的深入探讨 100
6.11.1 作为函数退出点的return语句 100
6.11.2 自变量指针不能作为返回值 100
6.11.3 函数表达式和左值 101
6.11.4 移动下标与移动指针 101
6.11.5 数组和指针参数 102
习题 102
第7章 模块化程序设计 105
7.1 全局外部函数 105
7.2 静态外部函数 106
7.3 全局外部变量 107
7.4 静态外部变量 108
7.5 const限定修饰符 109
7.5.1 const型变量 109
7.5.2 间接const型指针和函数 109
7.5.3 const型指针 111
7.5.4 全const型指针 111
7.6 编译预处理 111
7.6.1 无参宏指令 111
7.6.2 带参宏指令 112
7.6.3 条件编译指令 114
7.6.4 文件包含指令 115
7.7 模块化应用设计举例—数组的输入/输出、排序和查找 116
习题 118
第8章 字符串 119
8.1 字符串常量和字符串赋值 119
8.2 字符串基本操作函数声明 121
8.3 字符串基本操作函数实现 122
8.4 字符串应用设计举例 125
8.4.1 判断回文 125
8.4.2 删除空格字符 126
8.5 字符串基本操作函数的补充 127
8.5.1 求子串 127
8.5.2 子串插入 128
8.5.3 子串删除 130
8.5.4 字符查找 131
8.5.5 子串查找 132
8.6 字符串的深入探讨 133
8.6.1 特殊字符串 133
8.6.2 再论字符串常量 134
习题 134
第9章 结构、联合、枚举 135
9.1 结构 135
9.1.1 结构定义 135
9.1.2 结构变量和typedef名字 136
9.1.3 结构变量的初始化和赋初值 136
9.1.4 结构数组 137
9.1.5 结构的嵌套 139
9.1.6 结构返回值和指针传递 140
9.2 联合 141
9.3 枚举 142
9.4 结构应用设计举例 143
9.4.1 模拟洗牌 143
9.4.2 Date结构 145
9.4.3 三天打鱼,两天晒网 148
习题 149
第10章 流与文件 152
10.1 文件指针 152
10.2 文件的打开与关闭 153
10.3 文件的读写 155
10.3.1 字符的读写 155
10.3.2 字符串的读写 157
10.3.3 无格式读写 158
10.3.4 格式读写 160
10.4 文件的随机访问 161
习题 162
第11章 二维数组和指针 163
11.1 二维数组与二维数组指针 163
11.2 二维数组与一维数组 168
11.3 指针数组与二级指针变量(指针的指针) 171
11.4 指针数组与二维数组 173
11.5 二级指针指向的动态数组空间 174
11.6 以二级指针为形参的main函数 175
11.7 二维数组和指针应用设计举例—马鞍点 176
11.8 二维数组和指针的深入探讨—一级和二级指针与一维和二维指针 178
习题 178
第12章 高级综合程序设计 180
12.1 顺序表 180
12.1.1 顺序表结构 180
12.1.2 顺序表方法的实现 182
12.1.3 删除顺序表重复数据 185
12.2 单向链表 187
12.2.1 单向链表结构 187
12.2.2 单向链表方法的实现 189
12.2.3 逆置 192
12.3 结构串 194
12.3.1 结构串结构 194
12.3.2 结构串方法的实现 196
12.4 综合设计—文本统计 197
12.5 C语言高级程序设计的深入探讨—展望C++ 201
12.6 从C到C++的基本内容 203
12.6.1 变量和类型 203
12.6.2 输入/输出 205
12.6.3 内联函数 207
12.6.4 操作符重载 208
12.6.5 函数重载 209
12.6.6 引用型 211
12.6.7 提取符和插入符重载 214
12.6.8 默认参数 215
12.7 顺序表从C到C++ 216
12.7.1 C顺序表结构和C++顺序表类 216
12.7.2 C++顺序表类的实现 220
12.7.3 new和delete操作符 221
12.7.4 复制构造函数和复制赋值操作符函数 222
12.7.5 构造函数与初始化 223
习题 224
附录A 命名规则 225
附录B 常用的ANSI C标准库函数 226
附录C 语言操作符的优先级与结合性 231
附录D Visual C++ 6.0环境介绍 232
参考文献 239

教学资源推荐
作者: [美] 埃里克·伽玛(Erich Gamma) 理查德·赫尔姆(Richard Helm) 拉尔夫·约翰逊(Ralph Johnson) 约翰·威利斯迪斯(John Vlissides) 著
作者: (美)布莱恩·R. 霍尔(Brian R.Hall) 凯文·J.斯隆卡(Kevin J.Slonka)著
作者: 苏小红 蒋远 单丽莉 李东 编著
参考读物推荐
作者: [德] 彼得?普林茨(Peter Prinz),托尼?克劳福德(Tony Crawford)著
作者: (美)Zigurd Mednieks,Laird Dornin,G. Blake Meike,Masumi Nakamura 著
作者: [瑞士]路易斯·汤斯顿(Lewis Tunstall),[瑞士]莱安德罗·冯·韦拉(Leandro von Werra),[法]托马斯·沃尔夫(Thomas Wolf) 著