C语言程序设计教程(第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-26 05:08:11

点击下载

作者:张敏霞,孙丽凤,等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C语言程序设计教程(第3版)

C语言程序设计教程(第3版)试读:

前言

计算机程序设计基础是高等学校各专业开设的一门必修计算机基础课程,课程的重点在于培养学生的程序设计思想和程序设计能力,以适应当今社会对人才的需求。C语言由于自身的简洁、紧凑和灵活性的特点,以及具备其他高级语言所不具备的低级语言的特性,而使得它成为一种在计算机软件设计和计算机程序设计教学中备受欢迎的程序设计语言。

本书集结了众位编者多年的教学经验和应用C语言的体会,根据教育部高教司非计算机专业计算机教学指导委员会提出的高等学校计算机基础课程教学基本要求,在广泛参考有关资料的基础上编写而成。

本书内容分为基础篇、提高篇和实验篇。

基础篇分成6章,主要内容包括程序设计及C语言基础知识,顺序、选择、循环结构程序设计,以及编译预处理等,使学习者初步建立起利用C语言进行简单程序设计的思想,学会进行简单程序设计。相对于第2版,本书增加了编译预处理的内容,让学习者尽早理解文件包含和宏定义的思想及其在程序设计中的应用。

提高篇分成6章,主要内容包括数组等构造型数据类型、指针类型、函数、位运算以及文件的操作等,使学习者理解并体会C语言模块化的编程思想以及对数组、指针类型的应用,学会使用构造型数据类型和指针类型处理问题,学会对文件进行操作。相对于第2版,本书调整了部分章节的顺序,首先介绍数组和指针这两种新的数据类型,接着介绍函数的内容,在“函数”一章中突出介绍模块之间信息的传递。

实验篇设计了9个综合性实验项目以开拓学习者的思路,激发学习者的学习兴趣。

同时,本书在编写时兼顾了全国计算机等级考试的要求。

本书在结构组织上符合学习逻辑,内容循序渐进,每个知识点的介绍都以引起学生的学习热情和兴趣为出发点,以提高学生的程序设计思想和能力为目标,既注重理论知识,又突出实用性。书中例题丰富,注重实用,且均在Visual C++6.0环境下调试通过。各章配有丰富的习题,以帮助读者深入理解教材内容,巩固基本概念,达到培养良好的程序设计能力和习惯的目的。

本书可作为高等学校本科、高职高专计算机专业及相关专业的程序设计的入门教材,也可作为全国计算机等级考试的辅导教材,还可以供广大程序设计初学者自学使用。

本书具有以下特点:

① 突出算法理解,重视实际操作。

② 加强对学生程序设计思想和实际编程能力的培养,以适应信息社会对人才的需求。

③ 提供多样式的学习环境。本书同时提供丰富的教学资源,包括课程学习网站(http://211.64.192.109/jpkc)、程序源代码、配套教学电子课件及习题指导与参考答案,以上资源向使用本书作为教材的教师免费提供,请通过华信教育资源网www.hxedu.com.cn索取。

④ 注重可读性。本书的编写小组由具有丰富教学经验的、多年来一直从事计算机基础教育的一线资深教师组成,内容组织合理,语言使用规范,符合教学规律。

本书的编写得到了青岛理工大学各级领导的关心和支持,在此一并表示深深的感谢。

由于作者水平有限,书中难免有误漏之处,敬请专家、教师和广大读者批评指正。

编者基础篇第1章 程序设计及C语言概况

本章主要介绍程序设计的基本概念、算法描述及结构化程序设计方法、C语言的起源与发展、C语言的特点、简单的C语言程序和在Visual C++6.0环境下C语言程序的开发过程。通过本章的学习,读者可对程序设计的基本概念和C语言有一个大致的了解。1.1 程序设计的基本概念

1.1.1 程序和程序设计语言

什么是程序?怎样设计程序?这往往是计算机语言初学者首先遇到的问题。有人以为计算机是“万能”的,只要把任务告诉计算机,计算机就会自动完成一切,并给出正确结果。其实,这是一种误解,要让计算机按照人的意志来完成某项任务,首先要编制该项任务的解决方案,再将其分解成计算机能够识别并可以执行的基本操作指令,并把这些指令按一定的规则组织排列起来存放于计算机内存储器中,当给出执行命令后,计算机按照规定的流程依次执行存放在内存储器中的指令,最终完成所要实现的目标任务。人们把这种计算机能够识别并可以执行的指令序列称为程序。也就是说,程序是人与计算机进行“交流”的工具,它用我们常说的程序设计语言来描述。

程序设计语言是计算机能够理解和识别的语言。它通过一定的方式向计算机传送操作指令,从而使计算机能够按照人们的意愿进行各种操作处理。任何一种程序设计语言都有一定的使用规则,通常称之为语法规则。要学习程序设计语言,必须注意学习它的语法规则,就像学习汉语要学习汉语语法一样。而学习程序设计语言的目的就是为了设计计算机程序。

程序设计语言的种类很多,大体上经过了由低级语言到高级语言的发展过程,目前广泛使用的有C、Pascal、C++、Java、Delphi等高级语言,这些高级语言采用的都是接近于人们熟悉的数学语言和自然语言的表达形式,使人们的学习和使用更加容易和方便。我们把由高级语言编写的程序称为源程序。显而易见,用高级语言编写的源程序,计算机不能直接识别并执行,因为计算机只能识别和执行二进制数形式的指令或数据,因此,必须有一个工具先将源程序转换成计算机能够识别的二进制数形式的程序,我们把这种二进制数形式表示的程序称为目标程序,而承担转换的工具称为语言处理程序。每种程序设计语言都有与它对应的语言处理程序。语言处理程序对源程序的处理方式有编译方式和解释方式两种,相应的转换工具分别称为编译程序和解释程序。编译方式是指将源程序输入计算机中后,用相应的编译程序将整个源程序转换成目标程序,然后再通过装配连接程序形成可执行程序,最后运行可执行程序得到结果。目标程序和可执行程序都是以文件的方式存放在磁盘中的,再次运行该程序,只需直接运行可执行程序,不必重新编译和连接。解释方式是指将源程序输入到计算机中后,用相应的解释程序将其逐条解释,边解释边执行,得到结果,而不保存解释后的机器代码,下次运行该程序时还要重新解释执行。采用编译方式,程序的运行速度快,效率高。因此,目前常用的高级语言除BASIC语言采用解释方式外,大部分采用编译方式。

1.1.2 程序设计

对于初学者来说,往往把程序设计简单地理解为只是编写一个程序,这是不全面的。程序设计是指利用计算机解决问题的全过程,它包含多方面的内容,而编写程序只是其中的一部分。利用计算机解决实际问题,通常先要对问题的性质与要求进行深入分析并确定求解问题的数学模型或方法,然后考虑数据的组织方式和算法,并用某一种程序设计语言编写程序,最后调试程序,使之运行后能产生预期的结果,这个过程称为程序设计。程序设计的基本目标是实现算法和对初始数据进行处理,从而完成对问题的求解。

有些初学者,在没有把所要解决的问题分析清楚之前就急于编写程序,结果编程思路混乱,很难得到预期的效果。因此,为了用计算机解决一个实际问题,作为设计人员,从拿到任务到得出正确结果,往往要经过以下6个设计阶段。

① 分析问题。即分析问题需求,也就是弄清楚该问题有哪些已知数据,程序运行需要输入什么数据,需要输出什么结果,需要进行哪些处理等。

② 确定处理方案。如果是数学问题,就要根据该问题的数学解法,考虑所用的数学公式或相关函数;如果是工程问题,就要先建立该问题的数学模型,把工程问题转化成数学问题,以便用计算机解决。对同一个问题可以用不同的方案来处理,不同的方案决定了不同的处理步骤,效率也有所不同。

③ 确定操作步骤。根据选定的处理方案,具体列出让计算机如何进行操作的步骤。这种规定的操作步骤称为算法,而这些操作步骤之间的执行顺序就是控制结构。通常使用流程图来描述算法,把算法思想表达清楚,比较简单的问题可直接进入编写程序阶段。

④ 根据操作步骤编写源程序。用计算机语言编写的操作步骤就是计算机程序。

⑤ 运行调试程序。将计算机程序输入计算机中,经过编译、连接和运行,如果程序是正确的,应该能得到预期的结果。如果得不到正确的结果,应检查程序是否有错误,改正后再调试运行,直到得出正确的结果为止。

⑥ 整理输出结果,写出相关文档。

图1.1所示为程序设计的一般过程。图1.1 程序设计的一般过程

图1.1中,前两个步骤类似于人们解决问题的一般过程,即分析问题,然后确定一种处理方案。后4步则是程序设计的环节,其中最关键的是第③步“确定操作步骤”,或称算法设计。只要算法是正确的,编写程序就不会太困难。对于一个具体问题,编程者应该具备设计算法和正确使用已有算法的能力。1.2 算法

1.2.1 算法及算法的特性

算法是对具体问题求解步骤的一种描述。做任何事情都必须事先想好执行的步骤,然后按步骤进行操作,才能避免产生错乱。对同一个问题,可以有不同的解题方法和步骤。有的方法需要的步骤很少,而有些方法需要的步骤则较多。一般来说,希望采用过程简单明了和思路清晰正确的方法。因此,为了有效地解题,一个算法应具有下列5个特性。

① 有穷性。一个算法必须在执行有限个操作步骤之后结束,且每步都可以在有穷时间内完成。

② 确定性。算法中的每条指令必须有确切的含义,不会产生二义性。

③ 可行性。算法中描述的操作在计算机中都是可以实现的。

④ 输入。一个算法应有零个或多个输入。

⑤ 输出。一个算法应有一个或多个输出。

1.2.2 算法的描述工具

为了使算法表达得更清晰,更容易实现算法的编写,在程序设计时通常使用专门的算法表达工具对算法进行描述。对于复杂的问题,可以先用算法表达工具对算法进行描述,再进行编程,算法的最终实现应该是计算机程序。算法的评价标准涉及很多方面,但正确性和清晰易懂性永远是一个好算法的基本条件。

计算机算法的表达工具通常有以下4种。

1.用自然语言表示算法

用自然语言表示算法就是把算法的各个步骤用人们所熟悉的自然语言依次表示出来。但要注意,用自然语言所表示的每个操作步骤必须是计算机能够实现的。【例1.1】 求两个整数m与n的和,用自然语言求解该问题的步骤如下。图1.2 例1.1算法

步骤1:输入整数m和n。

步骤2:求和sum=m+n。

步骤3:输出两数之和sum。

以上3个步骤都是在计算机中可以实现的,所以是一个正确的算法描述。用自然语言表示算法,人们比较容易理解,但书写较烦琐,而且在某些场合,由于自然语言含义的不确切性,容易引起歧义,造成误解;另外,对比较复杂的问题,用自然语言又难以表达准确。因此,较少采用自然语言表示复杂算法。

2.用流程图表示算法

用流程图表示算法就是用一些大家共识的专用图形符号和带有箭头的流程线来表示算法。用图形符号表示算法必须有一组统一规定的、含义确定的专用符号。表1.1所示为传统流程图所用的基本符号。图1.2所示为例1.1中求两个整数m与n之和的传统流程图算法。表1.1 传统流程图所用的基本符号表

可见,用流程图来表示算法,直观形象,绘制简单方便,流程清晰,各种操作一目了然,而且不会产生“二义性”。缺点是,占用面积大,由于使用流程线指出各框的执行顺序,且对流程线的方向没有任何限制,可以随意转向,往往使人弄不清楚流程的思路。

针对上述问题,1973年由美国计算机科学家I.Nassi和B.Shneiderman提出了结构化程序设计流程图,又称N-S流程图。N-S流程图保留了传统流程图可以形象直观地表示算法的优点,去掉了流程线,即不允许流程任意转移,只能从上到下顺序进行,算法的每步都用一个矩形框来描述,把这些矩形框按执行的次序连接起来就是一个完整的算法。这种流程图规定了几种基本结构作为构造算法的基本单元,将在1.3节中结合3种基本结构来介绍。

3.用伪代码表示算法

所谓伪代码是指用介于自然语言和程序设计语言之间的一种代码来描述算法。它的表示形式比较自由灵活,而且由于与程序设计语言比较接近,因此可以比较容易地转换成计算机程序。伪代码无统一的语法,只要自己或别人能看懂就行。

4.用程序设计语言表示算法

用自然语言和用图形符号所表示的算法有一个共同的缺点就是计算机都不能识别和执行。只有用计算机能理解和执行的程序设计语言把算法表示出来,然后把程序输入计算机中并执行,计算机才能按照预定的算法去解决问题。1.3 结构化程序设计方法

结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。结构化程序设计的原则是:采用自顶向下、逐步求精的方法;程序结构模块化,每个模块只有一个入口和一个出口;使用3种基本控制结构描述程序流程。其中,模块化是结构化程序设计的重要原则。所谓模块化就是把一个大型的程序按照功能分解为若干相对独立的、较小的子程序(即模块),并把这些模块按层次关系进行组织。按照结构化程序设计的原则,一个程序只能由顺序结构、选择结构和循环结构这3种基本结构组成。

人们解决复杂问题普遍采用自顶向下、逐步求精和模块化的方法,在这种设计方法的指导下开发出来的程序,具有清晰的层次结构,容易阅读和维护,软件开发的成功率和生产率可极大提高。因此,使用结构化方法设计出的程序等于数据结构加算法。

已经证明,任何复杂的算法都可以由顺序、选择、循环这3种结构组合而成。所以,这3种控制结构称为程序的3种基本控制结构。

1.顺序结构

顺序结构如图1.3所示,图(b)是N-S流程图。其中A和B是顺序执行的关系,即先执行模块A操作,再执行模块B操作。

图1.2就是例1.1中求两个整数m与n之和的传统流程图结构。它只需顺序结构就能解决问题。

2.选择结构

选择结构又称为分支结构,如图1.4所示,图(b)是N-S流程图。其中,P代表一个条件,当条件P成立时(或称为“真”时),执行模块A,否则执行模块B。注意,只能执行A或B之一,两条路径汇合在一起结束该分支结构。通过下面的例子,读者可以了解如何用自然语言、N-S流程图描述分支结构。图1.3 顺序结构图1.4 选择结构【例1.2】 求a、b两个整数中较小的数。

用自然语言求解该问题的步骤如下。

步骤1:输入整数a和b。

步骤2:进行判断,如果a

步骤3:输出两个数中较小的数min。

用N-S流程图求解该问题的过程如图1.5所示。图1.5 例1.2算法

3.循环结构

循环结构又称为重复结构,有两种循环形式。一种是当型循环结构,如图1.6所示。其中,P代表一个条件,当条件P成立(为“真”)时,反复执行模块A操作,直到P为“假”时才停止循环。另一种是直到型循环结构,如图1.7所示。先执行模块A操作,再判断条件P是否为“假”,若P为“假”,再执行A,如此反复,直到P为“真”为止。图1.6 当型循环结构图1.7 直到型循环结构

下面通过例题,使读者了解如何用自然语言、N-S流程图描述循环结构。【例1.3】 计算1+2+3+4+…+100。

用自然语言求解该问题的步骤如下。

步骤1:定义变量sum用来存放和值,并将初值0赋给sum,使sum的值为0;定义变量k,用来存放每项的值,并将1赋给k。

步骤2:判断k的值是否小于或等于100,如果是,则继续执行步骤3,否则转到步骤5,退出循环。

步骤3:将sum与k的和赋给sum。

步骤4:将k的值增1,返回步骤2重复执行。

步骤5:输出和值sum。

用N-S流程图求解该问题的过程如图1.8所示。

可以看到,3种基本控制结构共有的特点是:有一个入口,有一个出口;结构中每一部分都有被执行到的机会,也就是说,每一部分都有一条从入口到出口的路径通过它(至少通过一次);没有死循环(无终止的循环)。

结构化程序要求每个基本控制结构具有单入口和单出口的性质是非常重要的,这是为了便于保证和验证程序的正确性。在设计程序时,一个结构一个结构顺序地写下来,整个程序结构如同砌墙一样顺序清楚,层次分明;在需要修改程序时,可以将某个基本控制结构单独取出来进行修改,由于其具有单入口单出口的性质,不会影响到其他的基本控制结构。可以把每个基本控制结构看作一个算法单位,整个算法则由若干个算法单位组合而成。这样的算法称为结构化算法。而这样设计出的程序清晰易读,可理解性好,容易设计,容易验证其正确性,也容易维护。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们的思路,有利于软件的工程化开发,提高编程工作的效率,降低软件的开发成本。图1.8 例1.3算法1.4 C语言的初步知识

1.4.1 C语言的起源与发展

C语言诞生于1972年,由美国电话电报公司(AT&T)贝尔实验室的D.M.Ritchie设计,并首先在一台使用UNIX操作系统的DEC PDP-11计算机中实现。

C语言是在B语言的基础上发展起来的,早在1970年,美国贝尔实验室的K.Thompson就以BCPL语言(Basic Combined Programming Language)为基础,设计出一种既简单又接近于硬件的B语言,并用它编写了第一个UNIX操作系统。而BCPL语言是英国剑桥大学的Matin Richards于1967年基于CPL语言(Combined Programming Language)提出的一种改进语言。CPL语言又是英国剑桥大学于1963年根据ALGOL 60 推出的一种接近硬件的语言。由此可见,C语言的根源可以追溯到ALGOL 60,其演变过程如下:

ALGOL 60(1960年)→CPL(1963年)→BCPL(1967年)→B(1970年)→C(1972年)

C语言问世以后,在应用中多次进行了改进。1973年贝尔实验室的K.Thompson和D.M.Ritchie用C语言将UNIX系统(即UNIX第5版)重写了一遍,增加了多道程序设计功能,使整个系统,包括C语言的编译程序都建立在C语言的基础上。第5版UNIX系统(UNIX V5)奠定了UNIX系统的基础。到1975年,UNIX第6版问世。随着UNIX的巨大成功和被广泛移植到各种机器上,C语言也被人们所接受,并移植到大型、中型、小型和微型机上,它很快风靡全世界,成为世界上应用最广泛的计算机程序设计语言之一。

1978年又推出了UNIX第7版,以该版本中的C语言编译程序为基础,B.W.Kernighan和D.M.Ritchie合作(被称为K&R)出版了“The C Programming Language”一书。该书介绍的C语言被称为标准C,这本书成为后来被广泛使用的C语言的基础。1983年,美国国家标准化协会(ANSI)对C语言的各种版本做了扩充和完善,推出了新的标准,被称为ANSI C,它比原来的标准C有了很大的改进和发展。1987年,ANSI又公布了87 ANSI C新版本。当前流行的各种C语言编译系统都是以87 ANSI C为基础的。在微机上使用的C语言编译系统多为Microsoft C、Turbo C、Borland C和Quick C等,它们略有差异,但按标准C语言书写的程序,基本上都可运行。读者若要了解不同版本的编译系统的特点和规定可参阅有关手册。目前,全国计算机等级(二级C语言)考试中采用的C语言编译系统是Visual C++6.0(简称VC)。Visual C++6.0是一个集程序编辑、编译、连接和运行为一体的可视化集成开发环境,是计算机界公认的最优秀的应用开发工具之一。

1.4.2 C语言的特点

C语言之所以成为世界上应用最广泛、最受人们喜爱的计算机高级语言之一,与它本身所具有的突出的优点是分不开的。C语言的主要特点概括如下。

① 语言简洁、紧凑,使用方便、灵活。C语言一共只有32个关键字,9种控制语句。程序书写形式自由,主要用小写字母表示。

② 支持结构化程序设计。C语言具有结构化的控制语句,以函数作为程序的模块单位,这使得它可以很方便地实现这种构造。

③ 运算符丰富。C语言除了拥有一般高级语言都有的运算符外,还拥有不少独特的运算符,可以实现其他高级语言不能实现的运算,增强了C语言的运算功能。

④ 数据类型丰富。C语言能方便地实现各种复杂的数据结构,具有很强的数据处理能力。

⑤ 较强的编译预处理功能。C语言的编译预处理功能,为开发规模较大的程序提供了方便,极大地提高了程序开发的效率。

⑥ C语言的可移植性好。C语言本身只需稍加修改便可用于各种型号的计算机和各类操作系统,因此,用C语言编写的程序也可以很方便地用于不同的系统,这也是C语言得以广泛应用的原因之一。

⑦ C语言本身既有一般高级语言的优点,又有低级(汇编)语言的特点。C语言可以允许直接访问内存地址,可以进行位(bit)运算,也可以直接对机器硬件进行操作。因此,既可以用它来编写大型系统软件,也可以用它编写各种应用软件,许多以前只能用汇编语言处理的问题,现在可以改用C语言处理了。

⑧ 语法限制不太严格,程序设计自由度大。C语言由于放宽了语法检查,使程序员有较大的自由度。例如,对数组下标越界不做检查,要由程序设计人员自己保证其正确性。因此,用C语言编写程序,对程序设计人员的要求相应地要高一些。

上述C语言的特点,在初学时也许还不能深刻理解,待学完C语言之后就会有比较深的体会和感受。

1.4.3 C语言程序的构成

下面通过两个简单的C语言程序,使大家能够对C语言程序有一个最基本的认识。【例1.4】 求两个整数m与n的和。

程序中,m和n分别表示两个整数,sum表示两个整数的和。

程序代码如下:

以上程序由一个称为主函数的main()函数构成。C语言规定必须用main作为主函数名,其后的一对圆括号“()”中间可以是空的,但这一对圆括号不能省略。主函数后面是函数体,由一对花括号“{}”

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载