第1章C语言概述.docx
《第1章C语言概述.docx》由会员分享,可在线阅读,更多相关《第1章C语言概述.docx(39页珍藏版)》请在课桌文档上搜索。
1、第1章C语言概述本章要点 C语言的发展及特点 C语言程序的格式 C语言程序的构成 C语言程序的基本要求0C语言程序的编译和运行0算法概述1.1 C语言的发展及特点C语言是一种面向过程的通用程序设计语言。它以表达简明、使用灵活、结构化的流程控制、丰富的数据结构和操作集合、良好的程序可移植性和较高效率的目标代码为特征。C语言不仅具有高级语言的要素,还兼有低级语言的功能,因此既可用于编写系统程序,也可用于编写不同领域的应用程序。本节主要介绍C语言的发展及特点。1.1.1 C语言的发展C语言是美国贝尔实验室的DennisM.Ritchie于1972年设计实现的。C语言是在B语言的基础上发展起来的,它的
2、根源可以追溯到ALGoL60。ALGoL60是1960年由国际计算机委员会设计的一种面向过程的结构化程序设计语言,用它编写的程序具有可读性和可移植性好的特点。但是,它不能直接对硬件进行操作,不宜用来编写系统程序。系统程序主要用汇编语言编写,而汇编语言是面向机器的程序语言,用它编写的程序可读性和可移植性都比较差。为此,人们开始考虑设计一种集高级语言和低级语言功能于一身的语言,以便用它来编写可读性和可移植性都比较好的系统程序。1963年,英国剑桥大学和伦敦大学首先将ALGOL60发展成CPL(CombinedProgrammingLanguage,组合程序设计语言)。该语言已比较接近于硬件,但规模
3、较大,实用性不强。1967年,剑桥大学的MartinRichards将CPL改制成BCPL(BasicCombinedProgrammingLanguage,基本组合编程语言)。BCPL比CPL大为简化,既具有结构化程序设计语言的特点,也能直接处理与硬件相关的数据,被软件人员用作系统程序的描述语言。1970年,美国贝尔实验室的KenThompson将BCPL修改为B语言(BoiIingCPLdowntoitsbasicgoodfeature),并用B语言开发了第一个由高级语言实现的UNIX操作系统,在DEC公司的PDP-7小型机上运行。1972年,DennisM.Ritchie将B语言修改设计
4、成C语言。C语言既保持了BCPL和B语言的精练和接近于硬件的特点,也克服了它们过于简单、数据无类型等缺点。1973年,KenThompson和DennisM.Ritchie又合作将1969年用汇编语言编写的UNIX操作系统改用C语言编写,C语言代码占90%以上,只保留了少量汇编语言代码,这样就使得UNIX操作系统向其他类型的机器上移植变得相当简单。到了20世纪70年代中期,UNIX操作系统和C语言作为软件设计师的得力工具传遍了贝尔实验室,接着又传遍了所有的美国大学校园。随着西欧和日本相继宣布加入UNIX和C语言的行列,UNlX和C语言开始风靡世界。1978年,以UNIX第7版中的C编译程序为基
5、础,BrainW.Kemighan和DennisM.RitChie合著了影响深远的名著TheCProgrammingLanguage(C程序设计语言)。这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,称为K&RC语言。在其后的十几年中,适用于不同机种和不同操作系统的C编译系统相继问世,从而把C语言的应用推向了更加广泛普及的阶段。1983年,美国国家标准局ANSl制定了C语言标准。这个标准不断完善,并从1987年开始实施,称为ANSlCo1988年,Kernighan和RitChie修改了经典著作TheCProgrammingLanguage,按ANSIC标准重新编写了该书。现在一般称A
6、NSlC为新标准或现代C,K&RC为旧标准或传统C。1990年ISe)通过了C程序设计语言的国际标准,称之为标准C。此后陆续出现的各种C语言版本,如MiCrOSOftC5.0/9.0、TurboC2.0/3.0、QuickC等都是与ANSIC兼容的版本。它们的语法和语句功能是一致的,差异表现在各自的标准函数库中所收纳的函数种类、格式和功能上,尤其是图形函数库的差异更大一些。由于C语言源程序本质上是一个文本文件,因此常见的文件编辑软件都可以用来编辑C语言源程序。如:DoS环境下的Edit,WindoWS环境下的记事本、写字板、EditPlus,以及TUrboC、WinTC、VisualC+集成开
7、发环境等。使用常用的编辑软件来编辑C语言源程序时,在存盘时应采用纯文本的方式保存文件。在C语言的基础上,1983年贝尔实验室又推出了C+语言。C+语言进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C语言是C+的基础,C+语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进一步学习C+语言会更容易、更便利,并能达到事半功倍的效果。1.1.2 C语言的特点c语言是近年来较流行的高级程序设计语言之一,许多大型软件均是用C语言编写的,如UNIX操作系统。C语言同时具有汇编语言和高级语言的双重特性。具体来说,C语言具有以下特点。(1)具有结构化的控制语句(如ifelse语句、while语
8、句、dowhile语句、switch语句、for语句)。用函数作为程序的模块单位,便于实现程序的模块化,其基本思想是将一个大的程序按功能分割成一些模块,使每一个模块都成为功能单一、结构清晰、容易理解的函数。(2)语言简洁,结构紧凑,使用方便灵活。C语言一共有32个关键字和9条控制语句,且源程序书写形式自由。(3)运算类型丰富、数据处理能力强。C语言是一种表达式语言,共有42个运算符,如自增运算符(+)、自减运算符(一)、取地址运算符(&)和间接运算符(*)等,用这些运算符可书写简洁而功能很强的表达式,从而提高软件的生产率。由于C语言的运算类型极其丰富,从而使得表达式的类型灵活多样,在其他高级语
9、言中难以实现的运算,在C语言中都能很容易地实现。(4)可直接访问物理地址,实现对硬件操作和底层系统软件的访问。C语言包含地址运算、位运算和指针运算等功能,可以直接对硬件进行操作,实现汇编语言的多数功能,并能通过参数传递实现对系统软件的底层调用。(5)语言生成的代码质量高。对于一个应用程序来说,如果生成的目标代码(可执行程序)质量低,则系统开销大、无实用性。许多实验表明,针对同一个问题用C语言编写程序,其生成代码的效率仅比汇编语言编写的代码低10%20%,但编程相对容易,而且程序可读性好,易于调试、修改和移植,运行速度快。(6)可移植性好。所谓可移植性是指从一个系统环境下不加或稍加改动就可搬到另
10、一个完全不同的系统环境中运行。C语言编译程序的大部分代码是公共的,基本上可以不做任何修改,就能运用于各种不同型号的计算机和各种操作系统环境中。C语言还有其他优点,可在学习和实践中体会。当然,C语言也和其他语言一样,存在一些不足之处,如某些运算符优先顺序与习惯不完全一致;类型转换比较随便等。尽管如此,相比之下,C语言仍是优秀的程序设计语言之一。1.2 C语言程序的格式、构成及其基本要求C语言程序是由各种基本符号按照C语言的语法规则构成的语句组成的。下面通过两个例子说明C程序的格式、构成及其基本要求。例1.1计算两个给定的整数的和。程序代码如下:#includemain()inta,b,sum;/
11、*定义三个变量*/a=8;/为变量a赋值b=10;sm=a+b*3;printf(,sum=%dn,sum);程序第一行的#include是文件包含行,它表示本程序中所用到的某些常量或宏定义在头文件stdio,h中进行了定义。程序第二行的main是主函数名,后面必须有一对圆括号()。第三行开始的左花括号“和最后一行的右花括号“广括起来的部分称为函数体,中间包含了若干行语句。其中第四行int开头的变量是变量定义语句,定义了整型变量a、b和SUm。第五行、第六行和第七行是赋值语句,首先给变量a赋值8,给变量b赋值10,再计算a与b的3倍之和并赋给sum。最后用printf开头的函数调用语句输出su
12、m的值。第四行的/*定义三个变量*/”和第五行的为变量a赋值是注释语句,用于提高程序的可读性。程序运行结果如下:sum=38例1.2求矩形的面积。程序代码如下:!includeintarea(intxzinty)求面积的函数intz;z=x*y;return(z);/通过return语句将z的值带回到主函数main中的调用处int a,b,c;scanf (,%d,省d, &a, &b);c=area(a,b);printf (,area=%dn,z c)main()/输入数据,分别赋值给变量a、b调用函数,得到矩形的面积,赋值给变量C输出矩形的面积程序运行结果如下:3,4area=121.2
13、.1 C语言程序的格式C语言中的书写格式相当自由,一行可以写多条语句,一条语句也可以分成多行写。注意:所有的c语句都必须以分号“;结束。只有一个分号而没有前面的语句体,称为空语句,在C语言中是合法的语句。语句中大写字母和小写字母代表不同的含义。例如变量A和变量a代表不同的变量。为了增加程序的可读性,应避免在一行中连续书写多条语句。提倡按照程序的逻辑结构使用缩进的书写形式,以明确地表示程序的层次性和逻辑性。1.2.2 C语言程序的构成C语言程序的基本结构是函数,一个或多个C函数组成一个C程序,若干C语句构成一个C函数,若干基本单词形成一个C语句。C语言中使用的函数有两类,一类是系统定义的函数,如
14、Prinlf和SCanf函数等,称为标准库函数,可以直接在程序中使用;另一类是用户自己定义的函数,如main和max函数等,必须由用户自己编写源程序代码。每个函数均由函数首部和函数体两部分组成。其一般结构如下:函数类型函数名(函数形参表)/*函数首部*/变量定义和声明语句3可执行的操作语句;1 .函数首部函数首部用于说明函数名、函数类型、函数参数名及参数的类型,其中函数后面有一对圆括号,参数和参数类型就写在圆括号中。例如,例1.2中的函数,其函数首部:intarea(intx,inty)其中,函数名是area,它的类型由最前面的int指出,说明area是一个整型函数。圆括号中用逗号分开的是两个
15、参数X和y,各用int说明是整型参数。也有一些函数不带参数,即函数名后面是一对空的圆括号,如main函数。2 .函数体函数首部下面用花括号括起来的部分称为函数体,通常包括变量定义和声明语句以及可执行的操作语句两部分。1)变量定义和声明语句变量定义和声明语句由变量定义、自定义函数声明、外部变量声明等语句组成。其中变量定义是主要的,其作用是指出函数内使用的变量名和变量类型,系统据此为变量分配相应的存储空间,用于存放变量的值。如例Ll中有:inta,b,sum;它定义了三个变量a、b和sum,它们的类型是整型into系统将根据定义的类型为它们各分配两个字节的存储空间,存放各自的值。而在例1.2中有i
16、ntz;inta,b,c;前一行是在area中定义的整型变量z,它只能在area函数中使用;后一行是在main函数中定义的整型变量,它们只能在main函数中使用。系统会为它们各分配两个字节的存储空间,存放它们的值。2)可执行的操作语句可执行的操作语句用于产生可以被计算机执行的操作指令。功能不同的C程序函数中可以执行的语句条数也不等,但是可执行语句必须位于变量定义语句的后面。如在例Ll中有:a=8;它是一个赋值语句,其作用是将常量8赋给整型变量a,即将8存放到系统为a分配的内存空间中。又如在例1.2中有:z=x*y;1.2.3 C语言程序的基本要求(1)在整个程序文件中,函数可以出现在任意位置。
17、主函数(即main函数)不一定出现在程序的开始处,但不管主函数位于程序中的何处,程序运行时总是从主函数开始。(2)每个程序行中的语句数量任意,既允许一行内写几条语句,也允许一条语句分几行书写,但每条语句都必须以分号结束。有时也可以在程序中的适当位置加进一个或多个空行,使程序结构更加清晰。(3)注释的位置任意,注释可以出现在程序的任何地方,既可以单独占一行或几行,也可以出现在某语句的开头或结尾处。如果注释占有几行,则每一行都要以/*”开头,以*/”结尾,*”和/”之间不能有空格。另外一种风格的注释是”,它只能用在一行中。注释不是C语言的正式语句,它对程序的编译和运行没有影响,使用注释的唯一目的是
18、增强程序的可读性。1.3 C语言程序的编译和运行C语言是一种编译型的程序设计语言。一个C语言程序要经过编辑、编译、连接和运行4个步骤,才能得到运行结果。1 .编辑编辑是指输入C语言源程序并进行修改,最后以文本文件的形式存放在磁盘上。文件名由用户自己选定,扩展名一般为.C。2 .编译编译是把C语言源程序翻译成可重定位的二进制目标程序。编译过程由编译程序完成,编译程序自动对源程序进行句法和语法检查。当发现错误时将错误类型和错误在程序中的位置显示出来,以帮助用户对源程序进行修改。如果未发现错误,就自动形成目标代码,并对目标代码进行优化后生成目标文件。目标文件的主名与源程序的主名相同,但扩展名为.ob
19、j”。3 .连接连接也称链接或装配,是用连接程序将编译过的目标程序和程序中用到的库函数连接装配在一起,形成可执行的目标程序。它是一个与源文件主名相同,扩展名为“.exe的可执行文件。4 .运行运行是将可执行的目标文件投入运行,以获取程序的运行结果。在操作系统平台上,可以直接执行扩展名为.exe的文件。如果执行后没有得到预定的结果,说明程序中还存在逻辑错误或算法错误,此时必须重复前面的步骤,对源程序进行修改,重新编译、连接,直到得出正确的运行结果。1.4 算法1.4.1 算法的概念一个程序应包括以下两方面内容。(1)对数据的描述。在程序中要指定数据的类型利数据的组织形式,即数据结构(DataSt
20、ructure)O(2)对操作的描述。即操作步骤,也就是算法(AIgorithm)。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。打个比方,厨师做菜肴,需要有菜谱。菜谱上一般应包括:配料,指出应使用哪些原料;操作步骤,指出如何使用这些原料按规定的步骤加工成所需的菜肴。作为程序设计人员,必须认真考虑和设计数据结构和操作步骤。因此,著名的计算机科学家沃思(NikikIaUSWirth)提出了一个公式:程序=数据结构+算法对同一个问题,可以有不同的解题方法和步骤。例如,求1+2+3+100,有人可能先用1+2,再加3,一直加到100;而有的人可能采用100+(l+99)+(49
21、+51)+50=5050fi方法和步骤。当然还有其他的方法。有的方法只需很少的步骤,有些方法则需要较多的步骤。一般来说,人们都希望采用简单的和运算步骤少的方法。因此,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量。本书介绍的算法只限于计算机算法。例如,计算100个数的累加和,或将100个学生的成绩按高低分次序进行排列。计算机算法分为:数值运算算法和非数值运算算法。数值运算算法的目的是求数值解,例如求方程的根,求一个几何图形的面积等,都属于数值运算范围。非数值运算包括的面很广,最常见的是应用于事务管理领域,如图书检索、人事管理等。由于数值运算有现成的模型,可以运用数值分析方法,因此
22、对数值运算的算法研究比较深入,算法比较成熟。而非数值运算的种类繁多,要求各异,难以规范化,因此只对一些典型的非数值运算算法做出了比较深入的研究。其他的非数值运算问题,往往要对特定的问题重新设计算法。1.4.2 算法的特性一个算法应该具有以下几个特性。(1)有穷性O个算法应该包含有限的操作步骤,而不能是无限的,否则程序会陷入死循环。(2)确定性。算法中的每一个步骤都应当是确定的,不应该是含糊或模棱两可的,即算法中的每一个步骤应是十分明确无误的。(3)有0个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。例如,判断一个数据是否是素数,此时只输入一个数,而计算两个数的最小公倍数时,应该
23、输入两个数。一个算法也可以没有输入。例如,求己知数据的累加和,显然不需要再输入任何数据就可以完成该算法。(4)有1个或多个输出。算法是为了求解,该“解就是输出。例如,求最小公倍数的算法,最后打印出的公倍数就是输出。但算法的输出不一定就是计算机打印输出,一个算法得到的结果就是算法的输出。没有输出的算法是没有意义的。(5)有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。1.4.3 算法的表示方法算法可以用各种描述方法来进行描述,最常用的是伪代码和流程图。伪代码是一种近似高级语言但又不受语法约束的语言描述方式。流程图是描述算法最常用的工具,传统的流程图由几种基本框、流程线及连接点组成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 概述

链接地址:https://www.desk33.com/p-847057.html