《第5章 C语言编程基础.ppt》由会员分享,可在线阅读,更多相关《第5章 C语言编程基础.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 C语言编程基础语言编程基础C语言是语言是Linux系统中最常用的程序设计语言。系统中最常用的程序设计语言。Linux系系统中的大多数软件提供了统中的大多数软件提供了C语言接口和源代码,供用户扩展语言接口和源代码,供用户扩展和改进软件的功能,或基于这些软件构成新软件。正因为如和改进软件的功能,或基于这些软件构成新软件。正因为如此,在开源软件开发过程中可以很容易学习到他人的开发经此,在开源软件开发过程中可以很容易学习到他人的开发经验。验。GNU项目为项目为C语言开发提供了丰富的工具,充分利用现语言开发提供了丰富的工具,充分利用现有的代码资源和这些开发工具可将学习到的知识付诸实践,有的代
2、码资源和这些开发工具可将学习到的知识付诸实践,从而更快速地掌握从而更快速地掌握C语言开发技术。语言开发技术。5.1 程序设计语言的发展程序设计语言的发展程序设计语言是用来描写计算机程序的逻辑语法结构。程序设计语言是用来描写计算机程序的逻辑语法结构。它已成为一种学科,同时也是程序设计者之间的交流方式。它已成为一种学科,同时也是程序设计者之间的交流方式。过去,程序设计语言是针对特定的计算机设计,程序员针对过去,程序设计语言是针对特定的计算机设计,程序员针对计算机的不同结构设计特定算法或者数据结构。随着计算机计算机的不同结构设计特定算法或者数据结构。随着计算机技术的发展,很多程序设计语言已能够运行在
3、多种计算机平技术的发展,很多程序设计语言已能够运行在多种计算机平台上,并能在不同平台之间移植。正是因为如此,程序员才台上,并能在不同平台之间移植。正是因为如此,程序员才会试图使程序代码更容易阅读。在过去的几十年间,大量的会试图使程序代码更容易阅读。在过去的几十年间,大量的编程语言被发明、被取代、被修改或组合在一起。编程语言被发明、被取代、被修改或组合在一起。5.1.1 机器语言机器语言电子计算机由复杂的逻辑电路所组成,它能够电子计算机由复杂的逻辑电路所组成,它能够“认识认识”的仅仅是的仅仅是“0”和和“1”所代表二进制数字信号。最初的计算所代表二进制数字信号。最初的计算机语言,也就是以二进制数
4、字所组成的逻辑序列,称为机器机语言,也就是以二进制数字所组成的逻辑序列,称为机器语言。每个二进制字符称为位(语言。每个二进制字符称为位(bit),),计算机最小的存储单计算机最小的存储单元是元是8个位所组成的比特(个位所组成的比特(Byte)。)。机器语言难于阅读,并机器语言难于阅读,并只能针对特定的计算机编写,代码无法移植。只能针对特定的计算机编写,代码无法移植。5.1.2 汇编语言汇编语言为了减轻程序设计的劳动强度,计算机科学家设计了一为了减轻程序设计的劳动强度,计算机科学家设计了一些简洁的英文缩写来替代用于控制或表明数据类型的二进制些简洁的英文缩写来替代用于控制或表明数据类型的二进制逻辑
5、序列。例如,逻辑序列。例如,“ADD”表示两个变量相加,表示两个变量相加,“IN”表示表示读取端口数据,于是诞生了汇编语言。读取端口数据,于是诞生了汇编语言。5.1.3 高级语言高级语言高级语言的发展也经历了从早期语言到结构化程序设计高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到面向对象的转变。相应的,软件的开发语言,从面向过程到面向对象的转变。相应的,软件的开发也由最初的个体手工作坊式封闭生产,发展为产业化、流水也由最初的个体手工作坊式封闭生产,发展为产业化、流水线式工业化生产。随着程序设计语言的进步,程序设计方法线式工业化生产。随着程序设计语言的进步,程序设计方法随之也
6、愈加丰富。随之也愈加丰富。高级语言的下一个发展目标是面向应用,也就是说:只高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。行处理,这就是非过程化的程序语言。5.2 C语言的特点语言的特点C语言,是一种通用的、程序式的编程语言,广泛用于语言,是一种通用的、程序式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。力强和较高的移植性等特点,在程序
7、员中备受青睐。C语言语言是由是由UNIX的研制者丹尼斯的研制者丹尼斯里奇(里奇(Dennis Ritchie)和肯和肯汤普逊(汤普逊(Ken Thompson)在在1970年研制出的年研制出的B语言的基础上语言的基础上发展和完善起来的。发展和完善起来的。5.2.1 C语言是中级语言语言是中级语言C语言通常称为中级语言,这是因为它有着与汇编语言语言通常称为中级语言,这是因为它有着与汇编语言类似,能直接访问计算机底层资源的能力,同时它又具备了类似,能直接访问计算机底层资源的能力,同时它又具备了高级语言的各种优点。作为中级语言,高级语言的各种优点。作为中级语言,C允许对位、字节和允许对位、字节和地址
8、这些计算机功能中的基本成分进行操作。地址这些计算机功能中的基本成分进行操作。C语言程序非语言程序非常容易移植,甚至可以设计出能同时运行在常容易移植,甚至可以设计出能同时运行在Linux系统和系统和UNIX、Windows等操作系统上的软件。等操作系统上的软件。5.2.2 C语言是结构化语言语言是结构化语言结构化语言所使用的设计方法为模块化设计方法,每个结构化语言所使用的设计方法为模块化设计方法,每个子问题求解的步骤被定义为模块。在子问题求解的步骤被定义为模块。在C语言中,函数就是模语言中,函数就是模块化的体现。函数之间是相互独立的,函数内的数据只能通块化的体现。函数之间是相互独立的,函数内的数
9、据只能通过接口进行传递。过接口进行传递。C语言程序中,数据与代码是分离的,数语言程序中,数据与代码是分离的,数据在各个函数之间通过接口传递。因此,设计良好的函数能据在各个函数之间通过接口传递。因此,设计良好的函数能够在多个程序间反复使用,构成了代码复用的基础。够在多个程序间反复使用,构成了代码复用的基础。5.2.3 C语言是程序员的语言语言是程序员的语言程序设计语言中,有许多是针对非程序员所设计的语言,程序设计语言中,有许多是针对非程序员所设计的语言,大多数解释性语言都是非程序员的语言,例如大多数解释性语言都是非程序员的语言,例如BASIC、FOXPRO。这一类语言虽然容易学习,但是所生产的程
10、序执这一类语言虽然容易学习,但是所生产的程序执行效率低、可靠性差,不能访问计算机底层的资源。与其形行效率低、可靠性差,不能访问计算机底层的资源。与其形成鲜明对比的是成鲜明对比的是C语言,由于程序生成、修改和现场测试自语言,由于程序生成、修改和现场测试自始至终均由真正的程序员进行,因而它实现了程序员的期望:始至终均由真正的程序员进行,因而它实现了程序员的期望:很少限制,语法自由,具备块结构和独立的函数,以及紧凑很少限制,语法自由,具备块结构和独立的函数,以及紧凑的关键字集合。用的关键字集合。用C语言编程,程序员可以获得高效机器代语言编程,程序员可以获得高效机器代码,其效率几乎接近汇编语言代码。码
11、,其效率几乎接近汇编语言代码。5.3 C语言的程序结构语言的程序结构任何一种程序设计语言都具有特定的语法规则和规定的任何一种程序设计语言都具有特定的语法规则和规定的表达方法。一个程序只有严格按照语言规定的语法和表达方表达方法。一个程序只有严格按照语言规定的语法和表达方式编写,才能保证编写的程序在计算机中能正确地执行,同式编写,才能保证编写的程序在计算机中能正确地执行,同时也便于阅读和理解。时也便于阅读和理解。5.3.1 基本程序结构基本程序结构基本程序结构就是从上至下顺序执行的程序,基本程序结构就是从上至下顺序执行的程序,C语言程语言程序必须有且只有一个主函数,程序从主函数开始执行,直到序必须
12、有且只有一个主函数,程序从主函数开始执行,直到主函数结束。主函数结束。C语言程序为函数模块结构,所有的语言程序为函数模块结构,所有的C语言程序都是由语言程序都是由一个或多个函数构成。一个或多个函数构成。C语言程序的函数可分为编译器提供语言程序的函数可分为编译器提供的标准函数和由用户自己定义的函数。的标准函数和由用户自己定义的函数。5.3.2 函数库和链接函数库和链接函数的集合称之为函数库,遵守函数的集合称之为函数库,遵守ANSI C标准的编译器标准的编译器所提供函数组成的函数库称之为所提供函数组成的函数库称之为ANSI C标准函数库。编写标准函数库。编写程序时用到的函数许多都可以在标准函数库中
13、找到,他们是程序时用到的函数许多都可以在标准函数库中找到,他们是可以简单地组合起来的程序构件。编写了一个经常要用的函可以简单地组合起来的程序构件。编写了一个经常要用的函数之后,也可将其放入自定义的库中备用。数之后,也可将其放入自定义的库中备用。编译器编译源代码时以函数为单位进行编译,并记忆函编译器编译源代码时以函数为单位进行编译,并记忆函数的名字。随后,编译器以源文件中的顺序去查找函数间的数的名字。随后,编译器以源文件中的顺序去查找函数间的关系,并且在可执行文件内部实现函数间的可访问性,该过关系,并且在可执行文件内部实现函数间的可访问性,该过程称之为程称之为“链接链接”。5.3.3 开发一个开
14、发一个C语言程序语言程序程序开发是一个科学的过程,开发一个程序开发是一个科学的过程,开发一个C语言程序通常语言程序通常可概括为以下四个步骤:可概括为以下四个步骤:1程序设计程序设计2编写源代码编写源代码3程序测试程序测试4程序运行程序运行5.3.4 C语言的关键字语言的关键字关键字是已被关键字是已被C语言标准作为命令、数据类型或者固定语言标准作为命令、数据类型或者固定函数名的字母组合。关键字不能被用做变量名或函数名。表函数名的字母组合。关键字不能被用做变量名或函数名。表5.1列举了列举了C语言的语言的32个关键字,他们遵循个关键字,他们遵循C语言的语法使用,语言的语法使用,形成了形成了C程序设
15、计语言。程序设计语言。autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregistershortsignedsizeofstaticreturnstructswitchtypedefunionunsignedvoidvolatilewhile5.4 算法算法关于计算机程序的定义,有一种经典的表述是程序等于关于计算机程序的定义,有一种经典的表述是程序等于数据结构加上算法。这句话可以解释为,数据结构是将事物数据结构加上算法。这句话可以解释为,数据结构是将事物抽象成为可运算的数据形式输入到
16、计算机中,而算法是对这抽象成为可运算的数据形式输入到计算机中,而算法是对这些数据计算的方法。例如求某个学生的平均分,那么数据结些数据计算的方法。例如求某个学生的平均分,那么数据结构由课程名称和分值组成,求平均分的算法是将分值的总和构由课程名称和分值组成,求平均分的算法是将分值的总和除以课程总数。对于一些特殊的问题,例如排序、解方程、除以课程总数。对于一些特殊的问题,例如排序、解方程、编码等,出现了许多适合计算机运算的算法,这些算法甚至编码等,出现了许多适合计算机运算的算法,这些算法甚至专门针对于某个程序设计语言。由此可见,程序设计的关键专门针对于某个程序设计语言。由此可见,程序设计的关键之一,
17、是解题的方法与步骤,是算法。之一,是解题的方法与步骤,是算法。5.4.1 流程图与算法的结构化描述流程图与算法的结构化描述流程图可用来描述事务的处理过程,因此是最早引入计流程图可用来描述事务的处理过程,因此是最早引入计算机算法设计领域的图示方法。基本流程图的形状如图算机算法设计领域的图示方法。基本流程图的形状如图5.1所所示。示。1顺序结构顺序结构2选择结构选择结构 3循环结构循环结构5.4.2 用用N-S图描述算法图描述算法除了传统的流程图以外,还有很多种图形可以用来描述除了传统的流程图以外,还有很多种图形可以用来描述程序的结构。程序的结构。N-S图就是其中的一种,它由矩形组成,一个图就是其
18、中的一种,它由矩形组成,一个程序模块是最外围的矩形外框,程序中的每个步骤都是一个程序模块是最外围的矩形外框,程序中的每个步骤都是一个内嵌的小矩形,如图内嵌的小矩形,如图5.6所示。所示。5.4.3 用用PAD图描述算法图描述算法PAD图(图(Problem Analysis Diagram)是国际上专业的程序员是国际上专业的程序员广泛使用的一种程序流程表示法。与其他图形相比,广泛使用的一种程序流程表示法。与其他图形相比,PAD图更容图更容易描述扁平化的程序结构。特别是一些应用管理类软件,其中都易描述扁平化的程序结构。特别是一些应用管理类软件,其中都会有很多扁平化的分支语句,这些语句用会有很多扁
19、平化的分支语句,这些语句用PAD描述更为清晰。描述更为清晰。5.5 软件工程概览软件工程概览软件工程是计算机科学的一个重要分支,所涉及的范围软件工程是计算机科学的一个重要分支,所涉及的范围非常广泛。包括软件开发技术、软件工程环境、工程经济学非常广泛。包括软件开发技术、软件工程环境、工程经济学和工程管理等许多知识领域。本节主要介绍软件工程的基本和工程管理等许多知识领域。本节主要介绍软件工程的基本任务和常用的软件项目开发模型,以及如何通过软件工程指任务和常用的软件项目开发模型,以及如何通过软件工程指导导C语言编程。其中,朴素软件工程思想是一套在教学中总语言编程。其中,朴素软件工程思想是一套在教学中
20、总结出的软件开发规律,它的主要目的是指导编程语言课程设结出的软件开发规律,它的主要目的是指导编程语言课程设计,也可用于少数开发者参与的软件项目。计,也可用于少数开发者参与的软件项目。5.5.1 认识软件工程认识软件工程软件工程存在于各种应用中,存在于软件开发的各个方面。软件工程存在于各种应用中,存在于软件开发的各个方面。而程序设计只包含了程序设计和编码的反复迭代的过程,它是软而程序设计只包含了程序设计和编码的反复迭代的过程,它是软件开发的一个阶段。软件工程力图对软件项目的各个方面做出指件开发的一个阶段。软件工程力图对软件项目的各个方面做出指导,从软件的可行性分析直到软件完成以后的维护工作。导,
21、从软件的可行性分析直到软件完成以后的维护工作。1用分阶段的生命周期计划严格管理2坚持进行阶段评审3实行严格的产品控制4采用现代程序设计技术5结果应能清楚地审查6开发人员应少而精7实践中不断改进软件工程5.5.2 瀑布模型及其改进瀑布模型及其改进瀑布模型是由温斯顿瀑布模型是由温斯顿罗伊斯(罗伊斯(Winston Royce)在在1970年最初提年最初提出的软件开发模型。瀑布模型将软件开发过程定义为出的软件开发模型。瀑布模型将软件开发过程定义为6个步骤,分别是问个步骤,分别是问题定义、需求分析、设计原型、实现与单元测试、集成与系统维护、发布、题定义、需求分析、设计原型、实现与单元测试、集成与系统维
22、护、发布、运行与维护。运行与维护。5.5.3 迭代发布模型迭代发布模型迭代发布模型是一种与传统软件工程开发相反的软件开迭代发布模型是一种与传统软件工程开发相反的软件开发过程,它弥补了传统开发方式中的一些缺点,具有更高的发过程,它弥补了传统开发方式中的一些缺点,具有更高的成功率和生产率。成功率和生产率。5.5.4 朴素软件工程思想朴素软件工程思想朴素软件工程思想将迭代发布模型简化为四个步骤,然后反朴素软件工程思想将迭代发布模型简化为四个步骤,然后反复循环这四个步骤直到软件生命周期结束。这四个步骤分别是:复循环这四个步骤直到软件生命周期结束。这四个步骤分别是:1确定项目视图与范围确定项目视图与范围
23、2软件设计软件设计3编码编码4发布发布项目需求(1)项目背景,用于说明问题产生的原因。(2)用户需求,列出用户所需求的软件产品面貌。(3)提供给用户的价值,说明解决所面对问题的价值。项目视图的解决方案(1)项目视图陈述,描述如何通过软件解决用户的问题。(2)主要特性,列出软件的主要功能和技术。(3)假设和依赖环境,列出解决问题的假设条件,以及所依赖的各种环境。范围和局限性(1)首次发行的范围,即本次迭代过程所要解决的问题。(2)随后发现的范围,留在将来解决的问题。(3)局限性和专用性,确定解决方案局限的硬件、软件环境,以及适用于哪一部分用户。5.6 小结小结本章介绍了本章介绍了C语言基础知识和程序设计知识,将多变的语言基础知识和程序设计知识,将多变的程序结构总结成三种基本结构,同时引入流程图的概念,流程序结构总结成三种基本结构,同时引入流程图的概念,流程图能将任何复杂的程序抽象为程序员间通用的符号语言。程图能将任何复杂的程序抽象为程序员间通用的符号语言。另外,本章介绍了算法的概念和软件工程知识,将程序设计另外,本章介绍了算法的概念和软件工程知识,将程序设计和软件开发作为一门工程学对待。这些内容与实际的软件开和软件开发作为一门工程学对待。这些内容与实际的软件开发工作完全一致,需要读者深入的理解与掌握。发工作完全一致,需要读者深入的理解与掌握。
限制150内