《C语言期末复习概要.pptx》由会员分享,可在线阅读,更多相关《C语言期末复习概要.pptx(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、C程序的组成与实现第1页/共96页C程序与源文件一个C程序由一个或多个源文件组成。一个源文件可以供多个C程序使用。源文件是一个程序的基本编译单位。一个源文件中包括:预处理指令全局声明函数定义第2页/共96页C程序与函数一个源文件主要由一个或多个函数组成。一个函数可以供多个源文件使用。一个C程序只能有一个主函数。函数是一个C程序的基本组成单位。一个函数包括:函数首部函数体第3页/共96页函数的结构类型标识符 函数名(形式参数表列)声明部分语句部分第4页/共96页函数首部类型标识符函数的类型,也是函数返回值的类型。函数名函数的标示符,也是函数的入口地址。(形式参数表列)此处为形式参数,接收实际
2、参数的单向、值传递。参数可以没有,但无论有无参数,括号均不能省略。第5页/共96页函数体函数体由花括号限定。里面可以包括声明部分和语句部分,也可以什么都没有,但花括号不能省,即空函数。声明部分定义新变量或声明已有变量和函数。语句部分执行操作,共9类语句。声明部分和语句部分可以没有,但如果有,一定要声明在前,语句在后,即变量和函数必须:先声明,再使用。第6页/共96页声明部分声明包括定义,但并非所有的声明都是定义。1.需要建立存储空间的。“定义性声明”,为叙述方便,简称“定义”。2.不需要建立存储空间的。“引用性声明”,为叙述方便,简称“声明”。第7页/共96页语句部分1.表达式语句2.函数调用
3、语句3.控制语句4.复合语句5.空语句6.return语句7.break语句8.continue语句9.goto语句第8页/共96页C程序的实现第9页/共96页二、操作数、运算符和表达式第10页/共96页常量在程序运行过程中,其值不能被改变的量称为常量。从字面形式即可判别的常量称为字面常量。如:56、12.3、a、“hello world!”。用一个标识符代表一个常量,称为符号常量。如:#define PI 3.1416。第11页/共96页变量变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。变量名是映射一个特定存储地址的标示符。变量
4、类型决定存储单元大小与数据存储形式。针对变量的操作是通过变量名找到对应地址,按变量类型在相应长度内按指定形式写入或读取的数据。第12页/共96页标识符用来对变量、符号常量、函数、数组、类型等命名的有效字符序列统称为标识符。标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。标识符不能是关键字(附录C)。标识符区分大小写,习惯上变量名使用小写字母,符号常量名使用大写字母。标识符的命名应尽量做到见名知意。第13页/共96页整型数据int 4字节。不带小数点的数值是整型数据。十进制:123、-31八进制:0123、-037十六进制:0 x12、-0 x1f第14页/共96页字符型数据
5、char 1字节。字符数据是用单撇号括起来的一个字符。如a、8、?都是字符常量。除以上形式的字符数据外,还有一种特殊形式的字符数据,就是以转义字符“”开始的字符序列。如“n”。字符型变量在内存中以ASCII码形式存储,与整数的存储形式类似。两种数据可以通用。第15页/共96页浮点型数据float 4字节。浮点型数据用来表示有小数点的实数。十进制小数形式。它由数字和小数点组成。如0.123、123.、123.0、0.0、.5。指数形式。如1.2e3、12E-4字母e或E之前必须有数字,且e后面的指数必须为整数。第16页/共96页运算符1.(),(,从左至右)2.!,-,+,-,*,&(一元,从右
6、至左)3.*,/,%(二元,从左至右)4.+,-(二元,从左至右)5.,=(二元,从左至右)6.=,!=(二元,从左至右)7.&(二元,从左至右)8.|(二元,从左至右)9.?:(三元,从右至坐)10.=,+=,-=,*=,/=,%=(二元,从右至左)11.,(,从左至右)第17页/共96页三、选择结构第18页/共96页单分支if(表达式)语句1第19页/共96页双分支if(表达式)语句1 else 语句2第20页/共96页多分支if(表达式1)语句1else if(表达式2)语句2 else if(表达式3)语句3 else if(表达式n-1)语句n-1else 语句n第21页/共96页分
7、支的嵌套if()if()语句1else 语句2elseif()语句3else 语句4第22页/共96页if语句的表达式if语句须对“表达式”求解,根据结果的真假选择相应的语句执行。表达式通常为逻辑表达式或关系表达式,也可以是其他表达式、常量或变量。表达式结果为0,则条件为假;表达式结果非0,则条件为真。第23页/共96页if语句的内嵌语句ifelse是一个完整的语句,else是if语句的一部分,但else前后的内嵌语句都要加分号。在if和else后面有且只有一条内嵌语句,如要包含多条语句,需用花括号将几条语句括起来成为一个复合语句。第24页/共96页else与if的配对else不能单独使用,并
8、且总是与1.上面的2.最近的3.未配对的if进行配对。如果if与else的数目不一样,可用花括号来确定配对关系。第25页/共96页四、循环结构第26页/共96页四个要素“起点”:循环控制变量在进入循环体前必须先赋初值。“终点”:表达式可以是任意类型。结果只有0(假)和非0(真)两种情况。“步长”:循环体中应有使循环趋于结束的语句。“循环”:如果包含一个以上的语句,应该用花括号限定,以复合语句形式出现。第27页/共96页while语句“先判断,再执行”一般形式为:while(表达式)语句1第28页/共96页dowhile语句“先执行,再判断”一般形式为:do 语句1 while(表达式);第29
9、页/共96页for语句一般形式为:for(表达式1;表达式2;表达式3)语句1相当于:for(初始条件;!终止条件;步长变化)循环语句第30页/共96页三种循环的比较使用while和do-while循环,循环变量的初始化应在进入while和do-while语句之前完成;在for循环中可由表达式1实现。使用while和do-while循环,循环体内应包含使循环趋于结束的语句;在for循环中可由表达式3实现。使用while和do-while循环,while后面的括号内应说明循环结束的条件;在for循环中可由表达式2说明。第31页/共96页三种循环的特点一般情况下,3种循环可以互相代替。while语
10、句更适合处理“当”型循环。do-while语句更适合处理“直到”型循环。for语句书写灵活,功能最强,适合处理各种循环问题。只要遵循for语句的求值顺序,参数和语句可任意省略或写入无关的内容,循环功能的实现不受影响。第32页/共96页循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。3种循环(while循环、dowhile循环和for循环)可以相互嵌套。第33页/共96页break语句使用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。使用break语句可以跳出所在的循环体,即提前结束循环,接着执
11、行循环体下面的语句。第34页/共96页continue语句使用continue语句可以结束所在循环体的本次循环,即跳过循环体中下面尚未执行的语句,直接执行下一次循环的条件判断。第35页/共96页continue、break和goto的比较continue语句只结束本次循环;break语句则结束整个循环。goto语句从深度循环的嵌套中一次跳出多层循环。第36页/共96页五、输入与输出第37页/共96页C语言的输入与输出输入输出是以计算机为主体而言的。从计算机向输出设备输出数据称为输出。从输入设备向计算机输入数据称为输入。C语言本身不提供输入输出语句。输入和输出操作是由C函数库中的函数来实现的。使
12、用“标准输入输出函数”的源程序文件在引用这些函数前必须:#include。第38页/共96页printf()输出若干个任意类型的数据。函数形式:printf(格式控制,输出表列)格式控制是用双撇号限定的字符串,包括:格式说明。由“%”和格式字符组成。普通字符。普通字符即需要原样输出的字符。输出表列是需要按指定格式输出的若干数据。可以是变量,也可以是表达式。由逗号隔开。第39页/共96页scanf()输入若干个任意类型的数据。函数形式:scanf(格式控制,地址表列)“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。第40页/共96页putchar()输出一个字符。函数形
13、式:putchar(c)参数c可以是常量也可以是变量;可以是字符型数据也可以是整型数据。第41页/共96页getchar()输入一个字符。函数形式:getchar()参数是从输入设备得到的字符。第42页/共96页puts()以第一个0做结束标志,将一个字符串输出到终端,并将0转换成n输出。函数形式:puts(字符数组名)第43页/共96页gets()以enter 作为结束标志,输入一个字符串到字符数组。函数形式:gets(字符数组名)第44页/共96页strlen函数检测字符串的长度。函数形式:strlen(字符数组名)函数值返回值为被测字符串的实际长度(不包括0在内)。第45页/共96页格式
14、符%d:十进制整数。%f:十进制实数。%c:单个字符。%s:一个字符串。第46页/共96页修饰符-:输出的数字或字符在域内向左靠拢。m:数据最小宽度n:输出的小数位数;第47页/共96页六、数组第48页/共96页数组的概念数组是具有同一类型的有序数据的集合。C语言规定只能逐个引用数组元素而不能一次引用整个数组。必须先定义数组,然后引用数组元素。数组中各元素类型相同,与数组类型一致。每个元素由统一的数组名和惟一的下标确定。下标从0开始,必须为整型常量或表达式。第49页/共96页数组的本质数组中的所有元素在内存中都是连续字节存放的,即保存在一块连续的内存区中。数组中各元素所占内存的大小为该元素所属
15、基本类型的大小。数组所占内存的大小为一个元素所占内存的大小乘以元素个数。第50页/共96页数组的定义定义一维数组的一般格式为:类型说明符 数组名常量表达式;例如:int a10;第51页/共96页数组的初始化定义时给所有元素赋值(1):int a3=1,2,3;定义时给所有元素赋值(2):int a=1,2,3;定义时给部分元素赋值:int a3=1,2;第52页/共96页字符数组的定义用来存放字符型数据的数组是字符数组。字符数组中每个元素存放一个字符。定义字符数组的一般格式为:char 数组名常量表达式例如:char c10;(数组长度10字节)第53页/共96页使用字符对数组初始化对字符数
16、组初始化时可将逐个字符赋给数组中各元素。例如:char c5=H,e,l,l,o;字符数组长度与初值个数相同时,可省略数组长度。如果初值个数小于数组长度,其余的元素自动赋为空字符(即0)。字符数组长度小于初值个数时,系统报错。第54页/共96页使用字符串对数组初始化char c=“I am happy”;花括号可省。省略数组长度,系统自动添加0作结束符。数组长度大于字符串常量的字符数个数时,多出的元素自动赋为空字符(即0)。数组长度小于字符串常量的字符数个数时,多出的字符不被存储。组长度等于字符串常量的字符个数时,本应自动添加的“0”将不被存储。第55页/共96页字符数组与字符串字符数组是元素
17、为字符变量的数组。字符串则是以0为结束字符的字符数组。字符数组是定长的,由下标控制访问。字符串是可变长的,因此必须用0来标记字符串的结束。第56页/共96页%c 与%s用%c输入输出逐个字符。用%s输入输出整个字符串。用%c输出字符,长度由循环控制变量决定。用%s输出字符串,到(不包括)0 结束。用%c输入字符,输入项是元素的地址。用%s输入字符串,输入项是数组名。用%c输出字符,输出项是元素。用%s输出字符串,输出项是数组名。第57页/共96页指针第58页/共96页相关概念地址是指内存中每个字节的具体编号。变量的地址是指特定存储单元的首字节编号。变量名是表示特定变量地址的识标符。指针就是地址
18、。变量的指针即是变量的地址。指针变量则是专门用来存放地址的变量。第59页/共96页指针变量的定义定义指针变量的一般形式为:基类型*指针变量名;使用指针变量存放内存中任意一个地址是没有意义且危险的。通常指针变量用来存放特定的某一变量的地址,使指针变量指向该特定变量。第60页/共96页指针变量与变量若:int a=1;p=&a;(设a的地址为2000)*p 表示a,1。&*p 表示p、&a,2000。*&a 表示a、*p,1。+a 表示2。(仅是a自增)+P 表示2004。*p+表示先得到a,再使p更新为2004。(*p)+表示a+(先用a,再a自增),2。第61页/共96页指针变量与数组1.p=
19、a=&a0;2.*p=a03.p+i=a+i=&ai4.*(p+i)=*(a+i)=ai第62页/共96页指针变量与数组元素*(a+i)或*(p+i)若指针p指向a数组的第i个元素,则:*(p+)=ai+;*(p-)=ai-*(+p)=a+i ;*(-p)=a-i 第63页/共96页指针变量与字符串C语言将字符串常量按字符数组存放在内存中,该数组没有名字,不能用数组名引用,只能通过指针变量引用。例如:char*string=“happy!”;(初始化)指针变量string存放的是字符串首字节地址,而不是整个字符串。第64页/共96页指针变量与字符数组定义:char a=“hello”;char
20、*p=“hello”;char a;a=“hello”;char*p;p=“hello”;输入:scanf(“%s”,a);scanf(“%s”,*p);scanf(“%s”,&a0);scanf(“%s”,p);输出:printf(“%s”,a);printf(“%s”,*p);printf(“%s”,&a0);printf(“%s”,p);第65页/共96页指针变量与字符数组名字符指针是变量,字符数组名是常量。char a=“hello”;char*p=“hello”;a=a+i;p=p+i;*a+;*p+;*(a+i);*(p+i);第66页/共96页函数第67页/共96页函数的执行程序
21、执行从主函数开始,在主函数中结束的。主函数只能被系统调用,主函数执行完后,流程返回操作系统。主函数可以调用其他函数,其他函数可以相互调用。被调函数执行完后,流程返回主调函数的调用结束处。第68页/共96页函数的调用函数语句print_start();被调函数只完成一定的操作,无返回值。函数表达式c=max(a,b);被调函数的返回值参加表达式的运算。函数参数c=max(max(a,b),c);被调函数的返回值作为另一被调函数的其中一个实参。第69页/共96页函数的返回值return语句将被调函数的返回值返回到主调函数的调用处。一个函数可以包含多条return语句。但一条return语句只能返回
22、一个值。返回值类型应与函数类型一致。如不一致,返回值自动进行类型转换。函数定义为void(空类型),被调用时不返回任何值,函数体内不得出现return语句。第70页/共96页函数的定义与声明函数的定义对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。函数的声明把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。第71页/共96页对被调函数的声明被调用的函数必须是已经存在的函数。如调用库函数,应用#include命令将所需头文件“包含”到本文件中去。如调用自定义函数,如被调函数的定义在主调函数之
23、后,应该在主调函数中对被调用的函数作声明。对函数的定义出现在主调函数之前,则调用前可以不必加以声明。第72页/共96页函数的参数在定义函数时函数名后括号中的参数为“形式参数”(简称“形参”)。在主调函数中调用一个函数,该函数名后括号中的参数为“实际参数”(简称“实参”)。实参向形参的数据传递是“单向的”、“值传递”。形参与实参的类型必须相同。实参必须是确定的值,形参必须是变量。第73页/共96页函数参数的传递实参(数值)常量、基本类型变量、数组元素形参(数值)基本类型变量实参(地址)变量地址、数组名、指针变量形参(地址)数组(数组名实际为指针变量)、指针变量第74页/共96页八、变量的作用域和
24、生存期第75页/共96页作用域 作用域作用域局部变量局部变量全局变量全局变量自动变量自动变量静态局部变量静态局部变量寄存器变量寄存器变量静态外部变量静态外部变量外部变量外部变量第76页/共96页生存期生存期生存期动态存储动态存储静态静态存储存储自动变量自动变量寄存器变量寄存器变量静态局部变量静态局部变量外部变量外部变量形式参数形式参数静态外部变量静态外部变量第77页/共96页存放位置存放位置存放位置静态存储区静态存储区动态存储区动态存储区静态局部变量静态局部变量静态外部变量静态外部变量自动变量和形式参数自动变量和形式参数寄存器变量寄存器变量外部变量外部变量CPU寄存器寄存器第78页/共96页总
25、结变量存储类别函数内函数外作用域存在性作用域存在性自动变量和寄存器变量静态局部变量静态外部变量(本文件内)外部变量第79页/共96页指针第80页/共96页相关概念地址是指内存中每个字节的具体编号。变量的地址是指特定存储单元的首字节编号。变量名是表示特定变量地址的识标符。指针就是地址。变量的指针即是变量的地址。指针变量则是专门用来存放地址的变量。第81页/共96页指针变量的定义定义指针变量的一般形式为:基类型*指针变量名;使用指针变量存放内存中任意一个地址是没有意义且危险的。通常指针变量用来存放特定的某一变量的地址,使指针变量指向该特定变量。第82页/共96页指针变量与变量若:int a=1;p
26、=&a;(设a的地址为2000)*p 表示a,1。&*p 表示p、&a,2000。*&a 表示a、*p,1。+a 表示2。+P 表示2004。*p+表示先得到a,再使p更新为2004。(*p)+表示a+,2。第83页/共96页指针变量与数组1.p=a=&a0;2.*p=a03.p+i=a+i=&ai4.*(p+i)=*(a+i)=ai第84页/共96页指针变量与数组元素*(a+i)或*(p+i)若指针p指向a数组的第i个元素,则:*(p+)=ai+;*(p-)=ai-*(+p)=a+i ;*(-p)=a-i 第85页/共96页指针变量与字符串C语言将字符串常量按字符数组存放在内存中,该数组没有
27、名字,不能用数组名引用,只能通过指针变量引用。例如:char*string=“happy!”;指针变量string存放的是字符串首字节地址,而不是整个字符串。第86页/共96页指针变量与字符数组定义:char a=“hello”;char*p=“hello”;char a;a=“hello”;char*p;p=“hello”;输入:scanf(“%s”,a);scanf(“%s”,*p);scanf(“%s”,&a0);scanf(“%s”,p);输出:printf(“%s”,a);printf(“%s”,*p);printf(“%s”,&a0);printf(“%s”,p);第87页/共96
28、页指针变量与字符数组名字符指针是变量,字符数组名是常量。char a=“hello”;char*p=“hello”;a=a+i;p=p+i;*a+;*p+;*(a+i);*(p+i);第88页/共96页结构体、共用体与枚举类型第89页/共96页结构体(struct)结构体用来表示多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组织在一个名字之下。结构体变量的成员可能属于不同的数据类型。结构体变量的大小应为各成员所属类型应占内存单元大小的总和。第90页/共96页共用体(union)共用体将几个不同类型的变量存放到同一段内存单元中。这些变量在内存中占的字节数不同,但都从同一地址
29、开始。即共用体变量的地址和它的各成员的地址都是同一地址。共用体变量的大小等于最长的成员的大小。虽然各成员使用同一内存单元,但每一瞬时只能存放一个,而不是同时存放。即每一瞬时只有最新(最后)的成员存在和起作用。第91页/共96页枚举类型(enum)枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。默认情况下,第一个枚举元素的值为0,之后的依次加1。枚举元素按符号常量处理,故称枚举常量。它们不是变量,不能在定义外对它们赋值。枚举变量令人见名知意,且取值限制在规定范围内。第92页/共96页文件第93页/共96页文件的分类在程序设计中,主要用到两种文件:1.程序文件文件的内容是程序代码。源程序文件(.c)、可执行文件(.exe)等。2.数据文件文件的内容是供程序运行时读写的数据。数据文件(.dat)、文本文件(.txt)等。第94页/共96页数据文件的分类数据在内存中都是以二进制形式存储的。根据数据在文件中的组织形式不同,数据文件可分为:1.二进制文件2.ASCII文件第95页/共96页感谢您的欣赏!第96页/共96页
限制150内