《第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 算法的表示方法算法可以用各种描述方法来进行描述,最常用的是伪代码和流程图。伪代码是一种近似高级语言但又不受语法约束的语言描述方式。流程图是描述算法最常用的工具,传统的流程图由几种基本框、流程线及连接点组成
24、,如图1.1所示。用这些框和流程线组成的流程图来表示算法,形象直观,简单方便,但是这种流程图对于流程线的走向没有任何限制,可以任意转向,在描述复杂的算法时所占篇幅较多,费时费力且不易阅读。输入输出框连接点图1.1流程图的基本框图随着结构化程序设计方法的出现,1973年美国学者提出了一种新的流程图形式。这种流程图完全去掉了流程线,算法的每一步都用一个矩形框来描述,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述。这种流程图称为N-S流程图。本书将在下一节结合结构化程序设计中的三种基本结构来介绍这种流程图的基本结构。1.4.4 结构化程序设计结构化程序由三种基本结构组成,分别是顺序结构、选
25、择结构和循环结构。1 .顺序结构顺序结构是最简单的一种基本结构,由赋值语句、输入、输出语句构成,当执行由这些语句构成的程序时,将按这些语句在程序中的先后顺序逐条执行,没有分支,没有转移。顺序结构可用如图1.2所示的流程图表示,图1.2(a)所示为一般的流程图,图1.2(b)所示为N-S流程图。2 .选择结构选择结构也称为分支结构,当执行该结构中的语句时,程序将根据不同的条件执行不同分支中的语句,如图13所示。程序流程根据判断条件a是否成立,选择执行其中的一路分支,图1.3(a)所示为一般的流程图,图1.3(b)所示为N-S流程图。(a)(b)图13选择结构3 .循环结构循环结构是指根据各自的条
26、件,使同一组语句重复执行多次或一次也不执行。循环结构有两种形式:当型循环和直到型循环。(1)当型循环是指当判断条件成立时,重复执行某个操作,如图1.4(a)、(b)所示。a成立A(2)直到型循环是指重复执行某一操作,直到满足判断条件为止,如图1.5(a)、(b)所示。注意:无论是顺序结构、选择结构还是循环结构,它们都有一个共同特点,即只有一个入口和一个出口。在三种基本结构中,A、B操作是广义的,它们可以是一个操作,也可以是另一个基本结构或几种结构的组合。在选择结构和循环结构中都出现了条件判断框。选择结构会根据条件成立与否决定执行A操作还是B操作,执行之后流程就会脱离该结构;而循环结构则会根据条
27、件成立与否反复执行A操作。1.5 小型案例实训1 .案例说明输入两个数,输出其中的大数。2 .编程思路程序的第一行用来包含头文件。程序的第二行表示定义名字为max的函数,它有两个整型参数X和y。从第三行开始的一对花括号中是max的函数体,包含函数定义和ifelse等语句。其中,ifelse语句是一个双重分支语句,其功能是比较X和y的值。如果xy,就将X的值赋给z;否则就将y的值赋给z。这个函数的作用是将X和y中较大的值赋给变量z,并通过return语句将Z的值带回到主函数main中的调用处,赋给变量c。以main开头的是主函数,在花括号括起来的函数体中先定义变量a、b和c,再调用scanf函数
28、将键盘输入的两个数赋给变量a和b。语句“c=max(a,b);”的作用是先调用函数max,并将a和b的值传递给max函数的参数X和y,调用结束时通过max函数的变量Z将返回值赋给c,最后通过PrilHf语句输出C的值。3 .程序代码!includeintmax(intx,inty)intz;if(xy)z=x;elsez=y;return(z);main()inta,b,c;scanf(%d,%d,&a,&b);c=max(a,b);rintf(,max=%dn,c);4 .输出结果当程序运行时输入20和36两个数并按Enter键后,输出结果,如图1.6所示。28,36nax=36Pressa
29、nykeytocontinuea图16两个数比较的程序运行结果1.6学习加油站1.6.1 重点整理(1)C语言是一种兼有汇编语言和高级语言特点的新语言,于20世纪70年代初期由贝尔实验室研制。(2)C语言是一种理想的结构化语言,其特点如下。具有结构化的控制语句。语言简洁,结构紧凑,使用方便灵活。运算类型丰富、数据处理能力强。可直接访问物理地址,实现对硬件和底层系统软件的访问。语言生成的代码质量高。可移植性好。(3)功能相对独立的函数是C语言程序的基本单位。一个C语言源程序可以由多个函数组成,其中有且仅有一个名为main的主函数。不论main函数的位置在何处,C语言总是从main函数开始执行。(
30、4)任何函数都是由函数首部和函数体两部分组成的。(5)用C语言编写的程序称为C语言源程序,必须经过编辑、编译和连接,生成可执行程序后才能执行。(6)对数据处理的描述,即算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。算法可以用各种方法进行描述,最常用的是伪代码和流程图。结构化程序由三种基本结构组成,分别是顺序结构、选择结构和循环结构。(7)算法具有以下特点。有穷性。确定性。有O个或多个输入。有1个或多个输出。有效性。1.6.2 典型题解【典型题1-1】下列叙述中错误的是。A.计算机不能直接执行用C语言编写的源程序8. C语言程序经编译后,生成的扩展名为.obj的文件是一个二进制文件
31、C.扩展名为.obj的文件,经过连接程序生成的扩展名为.exe的文件是一个二进制文件D.扩展名为.obj和.exe的二进制文件都可以直接运行解析:一个C语言的源程序(扩展名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(扩展名为.obj)。目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(扩展名为.exe)后方可运行。答案:D【典型题1-2】以下叙述中错误的是。A.算法正确的程序最终一定会结束B.算法正确的程序可以有零个输出C.算法正确的程序可以有零个输入D.算法正确的程序对于相同的输入一定有相同的结果解析:根
32、据算法的5个特点可知,一个有效的算法程序必须有一个或一个以上的输出。答案:B【典型题1-3】以下叙述中错误的是。A.C语言是一种结构化程序设计语言B.结构化程序由顺序结构、分支结构、循环结构3种基本结构组成C.使用3种基本结构构成的程序只能解决简单问题D.结构化程序设计提倡模块化的设计方法解析:结构化程序设计是指在程序的构成上只使用顺序结构、选择结构(即分支)和循环结构3种结构组成的编程方式。它强调程序设计风格和程序结构的规范化,提倡清晰的结构。结构化程序设计方法的基本思路是把一个复杂问题的求解过程分阶段进行。每个阶段处理的问题都控制在容易理解和处理的范围内。结构化程序设计提倡模块化的设计方法
33、。答案:C【典型题1-4】能将高级语言编写的源程序转换为目标程序的是。A.汇编程序B.编辑程序C.解释程序D.编译程序解析:计算机不能直接识别由高级语言编写的程序,它只能接受和处理由O和1构成的二进制指令或数据。我们把由高级语言编写的程序称为源程序”,把由二进制代码表示的程序称为目标程序,如何把源程序转换成机器能够接受的目标程序,软件工作者编制了一系列软件,通过这些软件可以把用户按规定语法写出的语句翻译成二进制的机器指令,这种具有翻译功能的软件称为编译程序”。一般每一种高级语言都有与它对应的编译程序。答案:D【典型题1-5】一个算法应该具有“确定性等5个特性,下面对另外4个特性的描述错误的是O
34、A.有零个或多个输入B.有零个或多个输出C.有穷性D.可行性解析:算法的5个特性为:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。答案:B【典型题1-6】C语言中用于结构化程序设计的三种基本结构是。A.顺序结构、选择结构、循环结构B.if、switchbreakC.forwhiledo-whileD.if、for、continue解析:结构化程序由三种基本结构组成:顺序结构、选择结构和循环结构。在选择结构中,又分为if结构和SWitCh结构,在循环结构中,又分为WhiIe型、do-while型和for型循环。答案:A1.7上机实验1 .实验目的掌握在集成环境下编辑、编译、连接和运
35、行一个C语言程序的基本技术。通过运行简单的C语言程序,初步了解C语言程序的基本结构及特性。2 .实验内容(1)编写将3个字符串:Howoldareyou?wmeighteen.,“Imastudent”在同一行显示的程序。(2)编写程序,程序的运行结果如图1.7所示。HelloWorld?Pressanykeytocontinue图17实验(2)的程序运行结果(3)上机改错题:!includestdio.hmain();doublea,b,area;a=1.2;/*将矩形的两条边长分别赋给a和bb=3.6;area=a*b;计算矩形的面积并存储到变量area中printf(area=%fn,a
36、rea)/输出矩形的面积1.8习题1 .选择题(1)能将高级语言编写的源程序转换成目标程序的是OA.编辑程序B.编译程序C.驱动程序D.连接程序(2)下列4项叙述中正确的一项是。A.计算机语言中,只有机器语言属于低级语言B.高级语言源程序可以被计算机直接执行C.C语言属于高级语言D.机器语言是与所用机器无关的(3)算法具有5个特性,以下选项中不属于算法特性的是oA.有零个或多个输入B.可行性C.有穷性D.通用性(4) whiledo-while语句用于基本结构。A.顺序B.选择C.循环D.转移(5)用C语言编写的代码。A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释才能执行(
37、6) C语言中的赋值、输入输出语句可以构成基本结构。A.分支B.顺序C.循环D.选择(7)在循环结构中,可以使得同一组语句一次也不执行。A.当型循环B.直到型循环C.do-while语句D.都不能实现2.填空题(1) C语言是一种化程序设计语言。(2) C程序中语句必须以作为结束标记。第2章C语言程序设计的初步知识本章要点 标识符命名规则 常量与变量 基本数据类型 常用运算符及表达式团运算符的优先级及结合性本章难点 不同类型数据间的混合运算 运算符的优先级0自增运算符(+)、自减运算符(-)的使用2.1 C语言的数据类型在C语言中,系统提供的数据结构是以数据类型表现的,每个数据都属于一个确定的
38、、具体的数据类型。不同类型的数据在数据表示形式、合法的取值范围、占用的内存空间大小及可以参与的运算种类等方面都有所不同。C语言提供了丰富的数据类型,这些数据类型分为基本类型、构造类型、指针类型利空类型,如图2.1所示。整型字符型/单精度基本类型实型1双精度I枚举类型数组类型数据类型构造类型4结构体类型共用体类型指针类型I空类型图2.1C语言的数据类型C语言中的数据有常量与变量之分,它们分别属于上述这些类型。本章主要介绍C语言提供的基本类型中的整型、实型和字符型三种数据类型。2.2 标识符、常量和变量2.2.1 标识符标识符是由字母、数字和下划线三种字符组成的字符序列,用于标识程序中的变量、符号
39、常量、数组、函数和数据类型等操作对象的名字。绝大多数情况下,标识符由字母、下划线开头。c语言中的标识符可以分为系统定义标识符和用户定义标识符。1 .系统定义标识符系统定义标识符一般具有固定的名字和特定的含义,它可以进一步分为关键字和预定义标识符。1)关键字关键字是C语言系统使用的具有特定含义的标识符,不能作为预定义标识符和用户定义标识符使用。C语言定义了32个关键字,如表2.1所示。表2.1C语言中的关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturns
40、hortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile注意:这些关键字必须用小写字母;不允许使用关键字为变量、数组和函数等操作对象命名。2)预定义标识符预定义标识符也是具有特定含义的标识符,包括系统标准函数名和编译预处理命令等,如SCanf、Printf、define和include等都是预定义标识符。预定义标识符不属于C语言的关键字,允许用户对它们重新定义,重新定义以后将会改变原来的含义。例如当程序中出现变量定义:intdefine=10;此时define就不再表示用于定义字符常量的编译预处理命令,而是作
41、为一个变量名使用。注意:虽然预定义标识符不是关键字,但是习惯上将它们看作保留字,一般不作为用户定义标识符使用,以免造成理解上的混乱。2 .用户定义标识符用户定义标识符用于对用户使用的变量、数组和函数等操作对象进行命名。例如将一个变量命名为a,将一个数组命名为date,将一个函数命名为fun等。用户为标识符命名时要注意以下事项。(1)C语言对英文字母的大小写敏感,即同一字母的大小写被认为是两个不同的字符。例如,total与ToTAL是不同的标识符。(2)标识符必须由字母或下划线开头,并且除了字母、数字和下划线外,不能含有其他字符。(3)标识符的命名要见名知意,即通过变量名就知道变量值的含义。通常
42、以表示数据含义的英文单词(或缩写)做变量名,或以汉语拼音字头做变量名。例如,name/xm(姓名)、sexxb(性别)、age/M(年龄)、SaIarygz(工资)。(4)标识符的有效长度随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。例如,student_name和student_number的前8个字符相同,有的系统认为这两个变量是一样的而不加区别。在TC2.0中,标识符的有效长度为132个字符。2.2.2 常量常量(COnStant)是指在程序运行过程中其值不能被改变的量。常量也分为各种类型,而计算机是根据常量的书写形式识别其数据类型的。常量通常有4种类型:整型常量,如2、
43、0、-8等;实型常量,如2.3、4.66、-3.89等;字符型常量,如,s3等;字符串常量,如WhoareyoWEnglish等。也可以用一个标识符代表一个常量。例2.1用标识符代表常量。程序代码如下:#include#definePI3.main()floats,r;r=5;s=PI*r*r;printf(,%f,s);程序中用#e10自起PI3.命令行定义Pl代表常量3.,此后凡在此文件中出现的Pl都代表3.,可以和常量一样进行运算。这种用一个标识符代表的常量称为符号常量。符号常量使程序易于阅读和修改,在此程序中看到Pl就知道它代表3.。2.2.3 变量1 .变量的概念在程序运行时,其值能
44、被改变的量叫作变量(Variable)。程序运行时,计算机给每个变量分配一定量的存储空间。每个变量必须有一个类型,如整型、浮点型等,用于指明给这个变量分配多大的存储空间;每个变量还必须有一个名字,如X、y等,用于指明是哪个变量命名遵循标识符命名规则,习惯上,变量名用小写字母表示,以增强可读性。一般来说,一个变量还要有值,该值放在变量的存储空间内,程序通过变量名引用变量值,实际上是通过变量名找到其内存地址,从内存单元中读取数据。2 .变量的定义要使用变量,必须为变量命名。变量名是用户自己定义的标识符,习惯上由小写字母组成。变量定义的一般格式如下:数据类型标识符变量名1,变量名2,,变量名n;例2
45、.2变量的定义。程序代码如下:!includemain()inta;/*定义了整型变量a*/a=20;printf(,%d,a);程序中首先定义了一个整型变量a,系统会为整型变量分配两个字节的存储空间,用于存放a的值。为了便于理解,通常采用如图2.2所示的方法进行描述。变量名20变量值K为变量分配的存储单元图2.2变量的存储注意:在C语言中,要求对所有用到的变量作强制定义,也就是先定义,后使用,否则,在编译时会出现有关的出错信息。必须使用合法的标识符作为变量名,同时不能使用关键字为变量命名。系统根据变量定义的数据类型为其分配相应的内存单元,并以此为依据检查其参加的运算是否合法。注意符号常量与变
46、量的区别:两者的名字都是标识符,但符号常量的值只能通过程序前的预处理命令define定义,在程序中不能改变;而变量的值则可以在程序中通过赋值语句多次改变。3 .变量的初始化C语言允许在定义变量的同时给变量赋值,这称为变量的初始化。变量初始化的一般格式如下:数据类型标识符变量名I=初值1,变量名2=初值2,,变量名n=初值n;C语言允许在定义变量的同时初始化变量,如:inta=4;/*指定a为整型变量,初值为4*/floatf=4.56;/*指定f为实型变量,初值为4.56*/charc=,a,;/*指定C为字符变量,初值为,a,*/也可以给要定义的变量的一部分赋予初值,如:inta=l,b=-3zc;表示a、b、C为整型变量,只对a、b初始化,a的值为Lb的值为-3。如果给几个变量赋予同一个初值,不能写成:inta=b=c=3;而应写成:inta=3,b=3,c=3;初始化不是在编译阶段完成的,而是在程序运行中执行本函数时赋予初值的,相当于有一个