C语言程序设计pdf/doc/txt格式电子书下载
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询
书名:C语言程序设计pdf/doc/txt格式电子书下载
推荐语:
作者:卢社阶著
出版社:电子工业出版社
出版时间:2016-02-01
书籍编号:30468253
ISBN:9787121274190
正文语种:中文
字数:142120
版次:1
所属分类:教材教辅-大学
版权信息
书名:C语言程序设计
作者:卢社阶
ISBN:9787121274190
版权所有 · 侵权必究
前言
C语言程序设计是计算机课程体系中的第一门重要的基础课程,C语言也是目前较流行的程序设计语言之一。它既具有高级语言程序设计的特点,又有汇编语言的功能,具有丰富的运算符和数据类型,生成目标代码质量高,程序执行效率高,可移植性好,是当今世界上最具有影响力的程序设计语言之一,也是程序设计者应当熟练掌握的一种语言工具。
本书以解决实际问题的程序设计思想作为出发点,结合《全国计算机等级考试二级C考试大纲》和作者多年来的教学经验和软件开发实践,对C语言知识点的编排进行了细致的策划和组织,精心选择和设计了趣味性和实用性较强的案例,能有效提高读者的学习兴趣,激发读者的求知欲望。由浅入深地应用每章所涉及的知识点,强调了知识的层次性和技能培养的渐进性,学习者可以借鉴项目中的经验,最终用于开发其他项目,真正达到学以致用的目的。
本书的主要特色有以下几点。
(1)教学内容既注重基础理论又突出实用性,突出结构化程序设计的基本原理、概念和方法,突出重点,精选例题和习题,由浅入深逐步展开进行讲解。
(2)以“案例引入—理论讲解—案例学习—编程体验”的方式组织内容,符合学生的认知过程,把教师的教学思想融入书中,语言和语法的讲解完全融会贯通在程序设计以及案例中。
(3)每章精选了大量案例,详细介绍了每个案例程序的分析和设计过程,通过这些案例的讲解,使读者能够综合应用所学知识解决实际问题,不断提高分析问题、解决问题的能力。
(4)提供配套的教学资源解决方案。本书包含了大量的程序例子,并附有运行结果。凡带有程序名编号的示例都是完整的程序,这些程序及电子教案可以到湖北科技学院课程网站下载。
由于编者水平有限,书中难免出现疏漏或处理不当之处,恳请读者批评指正。
编者
第1章 初识C语言
电子计算机自从诞生以来,在人类的各个领域都取得了丰硕的成果。但计算机本身是无生命的,要使它能够运行起来,为人类完成各种各样的工作,就必须让它执行相应的程序,这些程序都是依靠程序设计语言编写出来的。
C语言就是众多程序设计语言中的一种,是国际上广泛流行的、很有发展前途的计算机高级语言。它具备方便性、灵活性和通用性等特点,同时还向程序员提供了直接操作计算机硬件的功能,既可用来编写系统软件,也可以用来编写应用软件,深受软件工作者欢迎。
本章从C语言的发展入手,从程序设计的角度,介绍了C语言程序的基本结构和开发环境等内容。
1.1 C语言历史背景
本节主要介绍C语言的发展历史、主要特点及C程序的基本结构。
1.1.1 C语言的历史
1969年“阿波罗11号”登月成功。贝尔实验室中一个叫Ken Thompson的年轻人为了能够实现遨游太空的梦想,在当时的Multics系统上写了一个叫《星际之旅》的游戏。但当时大型机的机时费很贵,每玩一次公司就要为此支付75美金,于是Thompson打起了小型机PDP-7的主意。但当时的PDP-7只有一个简陋的运行时系统,不支持多用户,为了能双人对战,Thompson找来Dennis Ritchie一起开发新的操作系统。
他们只花了一个月的时间就用汇编语言编写出了操作系统的原型。同事Peter Neumann看到后,戏称这个系统为Unics,UNIX这个名字典出于此。
1971年,第一版的UNIX已经能够支持两名用户在PDP-11上玩《星际之旅》了,但因为当时的UNIX是用汇编语言编写的,无法移植到其他机器上,所以他们决定用高级语言重新编写UNIX,可当时的高级语言无论从运行效率还是功能上都无法满足他们的需要。Thompson先是在BCPL的基础上萃取出了B语言,Ritchie又在B的基础上进行了重新设计,这才有了今天大名鼎鼎的C语言。
C语言是国际上广泛流行的、很有发展前途的计算机高级语言。它具备方便性、灵活性和通用性等特点,同时还向程序员提供了直接操作计算机硬件的功能,既可用来编写系统软件,也可以用来编写应用软件,深受软件工作者欢迎。
1983年美国国家标准化协会(ANSI)根据C语言问世以来的各种版本,对C语言的发展和扩充制定了新的标准,称为ANSI C。1987年ANSI又公布了新的标准—87 ANSI C。1990年,国际标准化组织(ISO)接受87 ANSI C为ISO C的标准。目前流行的C编译系统都是以它为基础的。
目前在微型机上使用的有Quick C、Turbo C、BORLAND C、Visual C++等多种版本。这些不同的C语言版本,基本部分是相同的,但在有关规定上又略有差异。本书结合全国计算机等级考试二级(C语言)的要求,在Visual C++的环境下运行C语言程序,也使读者在继续学习时,能更快地熟悉面向对象程序设计的环境。
1.1.2 C语言的主要特点
任何一种程序设计语言,都有其特点和主要的应用领域。在有众多程序设计语言存在的环境中,一种语言之所以能存在和发展,并具有生命力,总是有其不同于(或优于)其他语言的特点。事实证明,C语言是一种极具生命力的语言,它的特点是多方面的,主要特点归纳如下。
(1)语言简洁、紧凑,使用方便、灵活。C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分,使程序设计人员在输入源程序时,尽可能地减少工作量。
(2)C语言运算符丰富。C语言运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。
(3)C语言数据结构丰富,具有现代化语言的各种数据结构。C语言的数据类型有整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。尤其是指针类型数据,使用起来比其他语言更为灵活、多样。
(4)C语言具有结构语言的特点。它具有结构化的流程控制语句(如if-else语句、whi1e语句、do-whi1e语句、for语句),支持若干种循环结构,允许编程者采用缩进书写形式编程。因此,用C语言设计出的程序层次结构清晰。
(5)C语言程序的基本单位是函数。函数可以在程序中完成独立的任务,独立地编译成代码,以实现程序的模块化,符合现代编程风格要求,并且程序之间很容易实现共享。
(6)语法限制不太严格,程序设计自由度大。例如,对数组下标越界不作检查,由程序编写者自己保证程序的正确。对变量的类型使用比较灵活。例如,整型数据、字符型数据和逻辑型数据可以通用,一般的高级语言语法检查比较严,能检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度,因此放宽了语法检查。这样使C语言能够减少对程序员的束缚。程序员应当仔细检查程序,保证其正确,而不要过分依赖C编译程序去查错。“限制”与“灵活”是一对矛盾。限制严格,就失去灵活性;而强调灵活,就必然放松限制。一个不熟练的人员,编一个正确的C程序可能会比编一个其他高级语言程序难一些。从这个角度来说,对用C语言的人,要求对程序设计更熟练一些。
(7)C语言允许直接访问物理地址。C语言可直接对硬件进行操作,实现汇编语言的大部分功能,因此C语言既具有高级语言的功能,又具有低级语言的许多功能。C语言的这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言。有人把C称为“高级语言中的低级语言”,也有人称它为“中级语言”意为兼有高级和低级语言的特点。
(8)生成目标代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效率低10%~20%。
(9)用C语言编写的程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和操作系统。
上面只介绍了C语言最容易理解的一般特点,至于C语言内部的其他特点将结合以后各章的内容进行介绍。由于C语言的这些优点,使C语言应用面很广。许多软件都用C语言编写,这主要是由于C语言的可移植性好,硬件控制能力高,表达和运算能力强。许多以前只能用汇编语言处理的问题现在可以改用C语言来处理了。
C语言优点很多,但是它也存在一些缺点,如运算符优先级太多,数值运算能力方面不像其他的一些语言那样强,语法定义不严格等。尽管C语言目前还存在一些不足之处,但由于它目标代码质量高、使用灵活、数据类型丰富、可移植性好而得到广泛的普及和迅速的发展,成为一种受到广大用户欢迎的实用的程序设计语言,同时也是一种在系统软件开发、科学计算、自动控制等各个领域被广泛应用的程序设计语言。
1.2 程序与程序设计语言
1.2.1 程序与程序设计
程序并不是计算机程序设计中独有的概念,在日常生活中人们也常见到这个词,如一个会议的日程、一场演出的节目单等,这些程序都是由人的一项项的活动组成的,身处其中时通常需要按部就班地一步步完成一系列动作,有序地完成每一项活动也就实现了程序的目标。可以说,对这种活动过程细节动作的描述就是一个“程序”。
日常生活中的程序性活动与计算机里的程序执行类似,这一点有助于读者理解计算机的工作方式。日常生活中的程序性活动里有更多变数,许多事情并不是完全按照程序做,可以有很大的灵活性,但是计算机对程序的执行是完全严格的。计算机的工作方式有两种,一种是交互式的,即人给机器一条指令,机器就完成一个操作;另外一种是程序自动控制式的,即把计算机要完成的操作用一条条指令按序排好,其中每条指令对应计算机执行的一个基本动作,计算机一步步执行了这个指令序列,也就完成了我们希望它做的事情,而且整个指令序列执行过程中不需要人来干预。为了解决某一特定问题而用某种程序设计语言编写的指令序列称为计算机程序或程序。在执行程序前必须先排好程序,排定以时间为进程必须完成的各种操作叫做程序设计或编程,程序设计的产品就是程序。
1.2.2 程序设计语言
计算机是人们处理信息的一种重要工具,它在人的控制下,按照人的意志正确地工作。人给机器一条指令,机器就完成一个操作。如果把一系列指令输入计算机存储起来,计算机就能按照指令序列实现操作的自动化。为了与计算机交流,指挥计算机工作,就需要一种意义清晰、人使用起来方便、计算机能理解的描述方式。也就是说,需要一种适用的描述程序的语言。供人编写计算机程序的语言就是程序设计语言,也常称为编程语言。
当今使用的程序设计语言大致可以分为三类:机器语言、汇编语言和高级语言。
1.机器语言
本质上计算机只能识别“0”和“1”这样的二进制信息,在计算机内部,一切信息都以二进制编码的形式存在,计算机存储并执行的程序也不例外。机器语言的程序全部由“0”和“1”表示出来,例如,一个16位的计算机,由16个二进制数组成一条指令,这些指令叫做机器指令。16个0和1可以组成216个不同的指令或信息,这些指令的集合叫做机器语言。机器语言是计算机能直接识别和执行的唯一语言。用机器语言编写出的程序称为机器语言程序。计算机刚诞生的时候,人们只能使用机器语言编写程序。下面的机器语言程序计算a、b的和并存储在c中:
人们用这种语言编写程序很不方便,非常烦琐,工作效率极低,写出的程序难于理解,不论是阅读程序还是调试程序都非常困难。另外,机器语言是与机器有关的,特定的机器语言只能用在特定的一类机器上,不是通用的。
2.汇编语言
为了克服机器语言的缺点,人们用一些特殊的符号(即助记符)来表示机器指令,如用ADD代表“加”,用SUB代表“减”。这些助记符的使用增加了一点汇编语言的可读性。汇编语言的语句与计算机硬件操作有一一对应关系,每种汇编语言都是支持这种汇编语言的计算机所独有的。用汇编语言编写的程序需要专门的软件处理,翻译成机器语言后计算机才能执行。下面是用某种汇编语言编写的计算a、b和的程序:
汇编语言出现后计算机的用途迅速扩大,但基本上有多少种计算机就有多少种汇编语言,因此汇编语言同机器语言一样也是面向机器的,通用性较差。尽管如此,汇编语言一直被人们所使用,主要是由于其执行速度快、占用存储空间小、对硬件操作灵活等特性。
3.高级语言
为加速程序开发的进程,1954年人们创造出了第一个高级语言FORTRAN,宣告了程序设计的一个新时代的开始。FORTRAN采用了完全符号化的描述形式,用类似数学表达式的形式描述数据的计算。之后人们又提出了近千种语言,大部分为实验性语言,只有少数语言得到广泛应用。高级语言非常接近于人类的自然语言和数学语言,它的一个语句往往对应几条机器指令。用高级语言编写计算a、b的和并存储在c中的语句如下:
一般来说,高级语言不再是面向机器的语言了,而是面向过程的语言,即把解题过程的每一步用计算机语言的语句描述出来,再配上适当的语言处理程序,计算机就能执行。因此,这种语言也称为“算法语言”。高级语言有很多种,如FORTTRAN、BASIC、Pascal、C、C++、Java等,不管是哪种高级语言源程序都必须经过相应的语言处理程序翻译成机器指令才能执行。
在用高级语言进行程序设计时要注意以下三个概念。
(1)语法:每种程序设计语言都有自己的语法规则,这些规则是非常严格的。在进行编译时系统会按语法规则严格检查程序,如有不符合语法规则的地方,计算机会显示语法错误信息。
(2)语义:某一语法成分的含义。例如,C语言中用“int”定义整型变量,用“char”定义字符型变量,用“while”语句实现循环,用“+”表示加法,用“!=”表示不等运算等。在使用时必须了解每一种语法成分的正确含义。
(3)语用:正确使用语言。要善于利用语法规则中的有关规定和语法成分的含义有效地组成程序以达到特定的目的。
1.2.3 C语言程序的基本结构
在学习C语言的具体语法之前,先通过两个简单的C语言程序示例来初步了解C语言程序的基本结构。
【例1.1】有两个瓶子A和B,分别装着水和酒,要求将两个瓶子中的液体交换。
问题分析:
上例可以抽象为将两个数a和b的值交换。
程序代码如下:
程序的运行结果如图1.1所示。
图1.1【例1.1】运行结果
【例1.2】输入三个整数,求最大的数。
程序代码如下:
程序的运行结果如图1.2所示。
上面两个例子虽然都比较简单,但从中可以看出C语言程序的基本结构和书写格式。
(1)C语言程序的基本单位是函数。
图1.2【例1.2】运行结果
一个C语言源程序可以由一个或多个源文件组成,每个源文件可以由一个或多个函数组成,每个函数可以由一条或多条语句组成。程序是运行单位,文件是编译单位,每个文件可以单独编译,而函数是C语言的基本单位。每一个C语言程序都必须有且仅有一个main()函数,称为主函数。main()函数可以在程序的开头,也可以在其他位置,但不能包含在其他函数内部。它的作用是标识整个程序开始执行的位置和程序运行结束的位置。其他函数是为了实现程序的功能而设置的小模块,C语言的这种结构符合现代程序设计中模块化的要求。C语言的函数除了标准库函数外,用户还可以根据需要自己定义函数,如上面例1.2中的max函数。
(2)一个C语言函数由函数的首部与函数体两部分组成。
①函数的首部,即函数的第一行。包括函数名、函数的类型、函数属性、函数参数(形参)名、参数类型。上面例子中,第一个int为函数的类型,max为函数的名称,括号内的x、y为函数的参数(形参),用来定义x、y的int为参数的类型。一个函数名后面必须跟一对小括号(),函数的参数可以没有,如main()。
②函数体,即函数首部下面的大括号{}内的部分,如果一个函数内有多个大括号,则最外一层的一对大括号为函数体的范围。
函数体一般包括声明和执行两部分。
声明部分:在这部分中定义本函数内部所用到的一些变量,如上面例子中的max()函数中的“int z;”,main()函数中的“inta,b,c,p;”。
执行部分:由若干条语句组成,是函数功能的实现过程的描述。
在某些情况下,函数可以没有声明部分。甚至可以既无声明部分,也无执行部分。这样的函数称为空函数。
(3)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C程序没有行号。
(4)每个语句和数据定义的最后都必须有一个分号。分号是C语句的必要组成部分,是构成语句所必不可少的,即使是程序中最后一个语句也应包含分号。
(5)“/*”与“*/”之间的内容构成C语言程序的注释部分。
“/*”和“*/”之间的内容可以是一行,也可以是多行。注释部分不参与程序的编译和运行,只是起到说明作用,增强程序的可读性。一个好的、有使用价值的源程序都应当加上必要的注释。
了解了C语言程序的基本结构之后,在进行程序设计编写时,就可以先进行各个功能函数的编写,然后通过主函数的调用或函数与函数之间的调用,将整个程序组装起来,实现完整的、复杂的功能。因此,在编写程序时,读者首先不要有畏惧感,任何一个大程序都可以把它划分成大小不等的各种功能,每个功能由一个函数来实现,再将这些函数通过合理的方式组合起来,就构成了一个大型的程序。一个较完整的C语言程序大致包括头文件、用户函数说明部分、全局变量定义、主函数、若干用户自己定义编写的函数。
1.3 C语言上机过程
要把一个编写好的源程序上机实现,除了需要一定的硬件环境外,还需要软件的支持。C语言程序的上机步骤如图1.3所示。
(1)编辑。输入源程序是程序实现的第一步。计算机系统为用户提供了编辑程序,利用编辑程序可以输入源程序并对它进行修改。修改完的程序存放在磁盘上,以后需要时再调入计算机进行编译。
图1.3 C语言程序的上机步骤
(2)编译。C语言属于高级语言,它的语
法规则与汇编语言和机器语言相比更接近人类自然语言的习惯。但是,计算机能够“看”懂的唯一语言是机器指令。所以,当用户要让计算机“看”懂一个C程序时,就必须使用一种称为“编译器”的工具,将这个C程序“翻译”成计算机能理解的机器指令。
(3)链接。经过编译程序得到的目标程序是不能直接执行的(因为目标程序可能调用内部函数、外部函数、系统提供的过程库中的程序),或者一个程序有若干个程序段(子程序)是分别编译的,它们排放的先后次序与实际执行次序不一致,编译程序无法知道先执行谁后执行谁,因此需要由连接程序将所有的目标程序和系统提供的库函数、过程库等链接在一起成为一个整体,形成可执行程序。
(4)运行。在编译和链接工作成功地完成之后可以得到可执行程序,将它调入内存即可执行。
在编译和链接过程中,如果出现错误,就要修改程序,重新进行编译和链接。运行可执行程序,如果程序的运行结果不是编写者所期望的,说明源程序文件中存在着错误。可以使用调试器对可执行程序进行跟踪调试来查找错误发生的原因。
将高级语言源程序翻译成等价的机器代码的方式有两种,即编译方式和解释方式,相应的程序也有编译程序和解释程序。
①编译程序。编译程序的主要功能是将高级语言程序翻译成机器语言程序,另外它还包含查错的功能。在翻译过程中如果发现程序有错,则不生成目标程序,并向用户报告出错信息。用户必须重新调用编辑程序修改源程序,然后再次进行编译,直到无错为止,这时产生目标程序。一般高级语言如C、PASCAL、FORTRAN都采用编译方式。编译方式速度快、占用内存少。
②解释程序。解释程序也将高级语言源程序翻译成机器代码,与编译程序不同的是它是边翻译边执行,翻译一句执行一句,不产生整个程序的目标程序,当再次运行该程序时还要重复翻译的过程,所以解释方式效率低、执行时间长、占用内存多,但使用灵活方便。早期的BASIC语言采用的就是解释方式。
C语言的编译系统有多种,本书采用Visual C++7.0集成开发环境,本节介绍在此环境下如何编辑、编译、链接和运行C程序。
1.3.1 启动Visual C++7.0
启动Visual C++7.0的操作步骤如下。
(1)单击任务栏中的“开始”菜单,选择“程序”菜单项,选择该菜单项下的“Microsoft Visual Studio7.0”下的“Microsoft Visual C++7.0”,即可启动Visual C++7.0。
(2)如果是第一次启动或出现“Tip of Day”对话框,里面会显示使用Visual C++7.0的一些小技巧。单击“Next Tip”会显示下一条技巧,单击“Close”关闭小技巧对话框。如果不想下次启动Visual C++7.0时出现该对话框,则取消“Show Tips at startup”复选框,则下次启动Visual C++7.0时就不会出现这个对话框。
(3)关闭“Tips of Day”对话框后,就进入了Visual C++7.0的主窗口,如图1.4所示。主窗口主要由标题栏、菜单栏、工具栏、项目工作区窗口、程序和资源编辑窗口、信息输出窗口、状态栏等组成。
图1.4 Visual C++7.0主窗口
从图1.4中可知,主窗体主要由三个窗体组成:项目工作区窗口、程序和资源编辑窗口、信息输出窗口。其中,项目工作区窗口和信息输出窗口是可停靠窗口,也就是说这两个窗口可以放到主窗体的任意位置,将鼠标放到这两个窗口的停靠控制区,就可以拖动窗口到任意位置。
1.3.2 Visual C++7.0的菜单栏
菜单是使用Visual C++7.0的主要操作方式,所以下面就逐一地介绍Visual C++7.0的各个菜单。
1.“文件(File)”菜单
“文件”菜单是处理与文件操作相关的命令菜单,主要的菜单项有以下几个。
New:提供新建文件、项目、工作区和其他文档功能。
Open:打开已存在的文件。
Close:关闭当前打开的活动文件。
Open Workspace:打开工作区文件。
Save Workspace:保存工作区文件。
Close Workspace:关闭工作。
Save:保存当前打开文件,如果该文件是第一次编辑,则会打开“Save As”对话框。
Save As:另存当前打开的文件。
Save All:保存所有打开的文件。
Page Setup:打印页设置。
Print:打印当前文件内容。
Recent Files:最近打开的文件列表。
Recent Workspace:最近打开工作区列表。
Exit:退出系统。
2.“编辑(Edit)”菜单
Undo:撤销上次操作。
Redo:重做上次操作。
Cut:剪切。
Copy:复制。
Parse:粘贴。
Delete:删除。
Select All:选择所有内容。
Find:在当前文件中查找指定内容。查找是一个很重要的功能,下面对查找对话框做一个介绍,如图1.5所示。
图1.5“Find”对话框
Find what:输入要查找的内容。
Direction:是查找的方向。
Match whole word only:只匹配整个单词。
Match case:区分大小写。
Search all open documents:在所有打开的文档中查找。
Regular expression:按照正则式匹配文本,是指用特殊的字符序列去匹配文本字符串模式,通常称这些特殊字符为通配符,表1.1列出这些通配符及其含义。
表1.1 通配符及其含义

Find in files:在给定目录、给定类型的所有文件中查找指定的内容。
Replace:在指定的文件中替换查找到的内容。
Go to:光标移到指定的位置。
Breakpoints:在指定的位置设置断点。
3.“查看(View)”菜单
“查看”菜单是用来设置和改变窗口和工具栏的工作方式,可以设置窗口按全屏显示、打开工作区窗口、打开信息输出窗口和各种调试窗口等。
4.“插入(Insert)”菜单
“插入”菜单主要用于项目及资源的创建和添加,主要功能如下。
New class:插入新类。
New Form:新建窗体。
Resource:新建资源。
Resource copy:对选定的资源备份。
File As Text:插入文本。
New ATL Object:插入新的ATL对象。
5.“项目(Project)”菜单
管理项目和工作区,所谓项目,是指一些彼此相关联的源文件,经过编译、链接后产生为一个可执行文件的程序或者是动态链接库函数。该菜单可以把选定的项目指定为工作区中的活动项目,也可以把一些文件、文件夹、数据链接以及可重用部件添加到项目中,还可以编辑或修改项目间的依赖关系。
6.“编译(Build)”菜单
编译菜单包括用于编译、建立和执行应用程序的命令。主要的命令如下。
(1)Compile:编译源文件,在编译的时候能
....
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询