华中科技大学光电子学院C语言第一章.ppt
第一章第一章C语言的程序结构语言的程序结构1.C语言概述语言概述一一.计算机语言及程序计算机语言及程序1.计算机语言计算机语言计算机能够理解的用于与计算机之间通信的语言计算机能够理解的用于与计算机之间通信的语言计算机语言分类计算机语言分类低级语言低级语言机器语言:用机器语言:用0,1代码表示语代码表示语言成分的语言言成分的语言;可直接识别可直接识别汇编语言:用符号表示语言成分汇编语言:用符号表示语言成分的语言;不能直接识别的语言;不能直接识别高级语言:近似于自然语言(英语)和数学高级语言:近似于自然语言(英语)和数学公式公式描述的语言:如描述的语言:如C,PASCAL等等专用语言:解决特定的应用问题的语言:专用语言:解决特定的应用问题的语言:如如CAD语言(绘图)等语言(绘图)等12.程序程序程序:用计算机语言描述计算问题的语句(指令)的程序:用计算机语言描述计算问题的语句(指令)的有序集合。有序集合。程序处理过程程序处理过程利用语言编写源程序利用语言编写源程序问题分析问题分析确定算法(画逻辑结构确定算法(画逻辑结构的流程图)的流程图)编写程序编写程序源程序上机过程源程序上机过程编辑源程序:用编辑程序编辑编辑源程序:用编辑程序编辑源程序源程序产生源程序文件产生源程序文件编译程序:利用编译程序对源编译程序:利用编译程序对源程序进行翻译程序进行翻译产生目标程序产生目标程序连接装配目标程序连接装配目标程序产生产生执行程序执行程序运行可执行程序运行可执行程序C语言属于计算机高级语言。用语言属于计算机高级语言。用C语言编写的程序称为语言编写的程序称为C语言源程序语言源程序2二二.C语言的特点语言的特点1具有丰富的数据类型和运算符具有丰富的数据类型和运算符数据类型多:说明语言表达能力强,描述现实世界数据类型多:说明语言表达能力强,描述现实世界的事物广的事物广类型类型基本数据类型:字符类型基本数据类型:字符类型,整数类型整数类型,浮点数据类型浮点数据类型构造的数据类型:通过基本类型构造的数据类型构造的数据类型:通过基本类型构造的数据类型如:数组,指针,结构和联合类型如:数组,指针,结构和联合类型运算符多运算符多:说明语言数据处理能力强,具有汇编语言对位,字节:说明语言数据处理能力强,具有汇编语言对位,字节,地址操作的能力和宏汇编技术如:地址操作的能力和宏汇编技术如:define运算符运算符算术运算符算术运算符关系运算符关系运算符逻辑运算符逻辑运算符位运算符:具有汇编语言处理的功能位运算符:具有汇编语言处理的功能条件和赋值运算符条件和赋值运算符32.提供了比较强的控制流程语句提供了比较强的控制流程语句语句结构语句结构顺序结构:表达式语句,复合语句顺序结构:表达式语句,复合语句条件结构:条件结构:if,switch语句语句循环结构:循环结构:while,do-while,for等等语句语句3.综合了其他高级语言的优良程序结构综合了其他高级语言的优良程序结构吸吸取取了了ALGOL语语言言的的分分程程序序结结构构:在在“”复合语复合语句中可定义变量,构成分程序结构。句中可定义变量,构成分程序结构。吸吸取取了了FORTRAN语语言言的的模模块块结结构构:即即C语语言言中中每每一一个个函函数数都都是是独独立立的的,并并可可单单独独编编译译。对对于于大大程序程序的组织极为有利。的组织极为有利。吸吸取取了了PASCAL语语言言的的函函数数递递归归的的结结构构:函函数数可可以以自自己调用自己己调用自己44.代码质量高:目标程序占用内存少,运行速度快。代码质量高:目标程序占用内存少,运行速度快。5.可移植性好:不同机器上的可移植性好:不同机器上的C编辑程序的代码编辑程序的代码是公共的是公共的C语言不足:运算符优先级太多,数据类型检验太弱,语言不足:运算符优先级太多,数据类型检验太弱,转换比较随便,所以不太安全。转换比较随便,所以不太安全。C语言主要应用于:编写应用程序和系统程序语言主要应用于:编写应用程序和系统程序52.C程序的基本结构程序的基本结构一一C程序的总体结构程序的总体结构例:求两个数中最大的数例:求两个数中最大的数main()/*主函数主函数*/inta,b,c;/*定义变量定义变量*/scanf(“%d%d”,&a,&b);/*从从键键盘盘上上接接受受数数据据到到a,b中中*/c=max(a,b);/*调用调用max函数函数*/printf(“max=%dn”,c);/*输出最大数输出最大数*/intmax(intx,inty)/*子函数子函数max*/intz;if(xy)z=x;elsez=y;return(z);/*返回返回z值到主函数值到主函数*/6一个一个C源程序只有一个主函数,其名字规定为源程序只有一个主函数,其名字规定为main。一个一个C源程序可能有多个或个子函数,其名字由用户用源程序可能有多个或个子函数,其名字由用户用标识符表示(如上面的标识符表示(如上面的max)。函数之间的位置关系:任意的并列关系,函数中不能嵌函数之间的位置关系:任意的并列关系,函数中不能嵌套函数定义。套函数定义。函数之间的调用关系:主函数可以调用子函数;子函数函数之间的调用关系:主函数可以调用子函数;子函数之间可互相调用,但不能调用主函数。之间可互相调用,但不能调用主函数。C程序的执行,总是从主函数的第一条可执行语句开始。程序的执行,总是从主函数的第一条可执行语句开始。一个函数可完成一个独立的功能,可以单独编译,这一个函数可完成一个独立的功能,可以单独编译,这样便于实现程序的模块化。样便于实现程序的模块化。一个一个C程序可以存放在一个文件中(扩展名为:程序可以存放在一个文件中(扩展名为:.c),也也可可以以函数的形式存放于多个文件中。以以函数的形式存放于多个文件中。函数的类型:用户自定义函数和库函数函数的类型:用户自定义函数和库函数。7二函数的结构二函数的结构一般定义形式:一般定义形式:函数类型说明函数类型说明函数名(形参类型说明函数名(形参类型说明形参表)形参表)/*函数头部函数头部*/变量类型说明;变量类型说明;语句部分;语句部分;函数结构:函数头和函数体两部分组成。函数结构:函数头和函数体两部分组成。/*函数体函数体*/1.函数头部函数头部函数类型说明:说明函数值和类型,函数不求值或整型函数类型说明:说明函数值和类型,函数不求值或整型值,或不返回值时值,或不返回值时,可用可用void说明说明函数名:用标识符表示,其后的函数名:用标识符表示,其后的“()()”不能省。不能省。形参类型说明:对自变量类型的说明形参类型说明:对自变量类型的说明形参表:为函数的自变量形参表:为函数的自变量;多个形参用多个形参用“,”号隔开;若号隔开;若无无形参可省或写上形参可省或写上void8.函数体函数体由由“”括起来,变量类型说明和语句部分组成。括起来,变量类型说明和语句部分组成。变量类型说明:对变量代表的数据类型进行说明。变量类型说明:对变量代表的数据类型进行说明。语句部分:由个或多个语句组成序列。他们是数据语句部分:由个或多个语句组成序列。他们是数据操作者。语句用操作者。语句用“;”结束。结束。注注:类类型型说说明明置置于于语语句句之之前前,即即符符合合“先先说说明明,后后使使用用”的原则。的原则。除除函函数数名名,“()”“”不不能能省省,其其他他的的部部分根分根据需要确定有无,即:最小据需要确定有无,即:最小C函数函数如:如:temp()9三注释三注释“/*/”是注释符号,其间是注释的内容。是注释符号,其间是注释的内容。注释的作用:便于阅读程序。注释的作用:便于阅读程序。位置:注释可置于程序的任何地方位置:注释可置于程序的任何地方,他不能被机器执行他不能被机器执行四四.程序的书写格式程序的书写格式一个语句可写在多行上一个语句可写在多行上,多个语句也可以写在一行上。多个语句也可以写在一行上。约约定定:按按语语法法单单位位的的层层次次,利利用用“缩缩进进排排出出”的的格格式式书书写写程序。程序。103.C语言的字符集及单词语言的字符集及单词一语言的三要素一语言的三要素语法:组成单词,语句及语言成分相关的规则,语法的语法:组成单词,语句及语言成分相关的规则,语法的合法性由编译程序检查。合法性由编译程序检查。语义:表达式及语句的操作含义。语义错误由人工检查。语义:表达式及语句的操作含义。语义错误由人工检查。语用:语句及相关成分的使用,由人工构思和安排。语用:语句及相关成分的使用,由人工构思和安排。学好语言的关键,应从这三个方面学习和理解。学好语言的关键,应从这三个方面学习和理解。语言的组成:字符集语言的组成:字符集单词单词语句语句程序程序11二二C语言的字符集语言的字符集语言的合法字符取自语言的合法字符取自ASCII码表中的字符:码表中的字符:个小写英文字母:个小写英文字母:个大写英文字母:个大写英文字母:个十进制数码:个十进制数码:其其他他字字符符:,!,(,),(,),“,等共个。,等共个。注:不属于注:不属于ASCII表字符都是非法字符,(除非特殊环表字符都是非法字符,(除非特殊环境境处理,如汉字操作多系统支持,可用汉字)处理,如汉字操作多系统支持,可用汉字)如:如:等。等。12三单词三单词单词:组成语句的基本语法单位。单词:组成语句的基本语法单位。语言中的单词语言中的单词标识符标识符关键字关键字常量,变量及类型说明常量,变量及类型说明运算符及表达式(第二章)运算符及表达式(第二章)1.标识符标识符作用:表示常量名,变量名,类型名,函数名,由用户自行定义。作用:表示常量名,变量名,类型名,函数名,由用户自行定义。组成:以字母(个大小写英文字母)或下划线组成:以字母(个大小写英文字母)或下划线”_”开头,以开头,以后跟字母,数字串(包括空串或下划线),一般:后跟字母,数字串(包括空串或下划线),一般:串长串长为好。(长度虽不限,但前个字符有效)为好。(长度虽不限,但前个字符有效)例:例:xy,xyz,_SP124,code_x,ab124都是合法的标识符都是合法的标识符34x,x#y,a,b,1,3都是非法的标识符都是非法的标识符13注:标识符最好按意取名如:注:标识符最好按意取名如:name,sex等,不能等,不能与关键字和系统函数名同名与关键字和系统函数名同名:大小写英文字母书写的标识符有区别的。:大小写英文字母书写的标识符有区别的。宏定义量用大写字母宏定义量用大写字母下划线开头的标识符一般在内部使用下划线开头的标识符一般在内部使用其他情况用小写字母开头的标识符其他情况用小写字母开头的标识符2.关键字和特定字关键字和特定字关键字:关键字:(保留字保留字)由编译程序预先定义,具有固定由编译程序预先定义,具有固定含义的标识符。含义的标识符。如:类型名:如:类型名:int,char,short,long等等语句名:语句名:if,while,else,for等等特定字:预处理程序识别的特定含义的标识符。特定字:预处理程序识别的特定含义的标识符。如:如:define,include,undef,ifdef,line,endif,ifndef;7个个注:在定义标识符时,避免与关键字或特定字重名。注:在定义标识符时,避免与关键字或特定字重名。14语言数据类型语言数据类型语言数据类型语言数据类型基本类型基本类型整型整型int(整型整型)short(短整型短整型)long(长整型长整型)signed(带符号的整型带符号的整型)unsigned(无符号整型无符号整型)字符型:字符型:char浮点型浮点型(实型)(实型)单精度型:单精度型:float双精度型:双精度型:double枚举类型:枚举类型:enum构造类型构造类型数组数组结构结构联合联合指针类型指针类型15数据类型的重要性:数据类型的重要性:1.类型不同,数据的存贮特性不同和取值范围不同。2.类型不同,施加于数据的操作特性不同,即不同类型的数据,则施加的运算是是不同的3.数据类型是描述现实世界所要处理的对象4.基本数据类型的说明基本数据类型的说明程序的数据分为两大类:变量和常量程序的数据分为两大类:变量和常量(1).变量及说明变量及说明随着程序的执行,不断改变的量称为变量随着程序的执行,不断改变的量称为变量a.变量的组成变量的组成:变量是一个四元组:变量是一个四元组即由名字即由名字,属性属性,引用和值组成的动态改变量。引用和值组成的动态改变量。引16其中:其中:变量名:由标识符命名,是变量的语法标识变量名:由标识符命名,是变量的语法标识值:变量的值指当前时刻变量值的大小值:变量的值指当前时刻变量值的大小属属性性:变变量量值值的的类类型型,事事先先用用类类型型区区分分符符进进行行显显示示说说明明引引用用:指指变变量量的的值值在在内内存存中中被被存存贮贮的的区区域域(含含有有临临时时性性存贮或固定性的存贮特性)存贮或固定性的存贮特性)程序中的变量在使用前必须说明其类型;程序中的变量在使用前必须说明其类型;说明的地方说明的地方函数之前函数之前函数的参数说明部分函数的参数说明部分函数体中说明部分函数体中说明部分变量的动态性质变量的动态性质:由变量的作用域和生存期体现出来由变量的作用域和生存期体现出来.变量的作用域变量的作用域:指变量说明的有效的程序部分指变量说明的有效的程序部分.变量的生存期变量的生存期:指与变量相联系的存贮程序执行时间指与变量相联系的存贮程序执行时间.17b变量说明变量说明变量说明一般形式:变量说明一般形式:类型说明符变量名类型说明符变量名1,变量名,变量名2,变量,变量n;整型说明整型说明:例例:intx,y,z;说说明明了了x,y,z是是互互补补相相同同名名的的变变量量,类类型型均均为为整整型,型,根根据据机机器器的的不不同同的的分分配配2个个字字节节或或4个个字字节节单单元元空空间间其其 初初 值值 不不 确确 定定,取取 值值 范范 围围:2个个 字字 节节.3276832767shortinta,b=5;shorta,b=5;说明变量说明变量a,b为短整型,固定被分配为短整型,固定被分配2个字节单元。个字节单元。其中其中b单元存有初值为单元存有初值为5,a初值不确定,初值不确定,取值范围:取值范围:-3276832767longintc,d;longc,d;说说明明变变量量c,d为为长长整整型型,各各被被固固定定分分配配4个个字字节节单单元元,取值范围:取值范围:-21亿亿21亿亿unsignedintp1,p2;unsignedp1,p2;p1,p2为为无无符符号号整整型型,被被机机器器定定义义为为2个个字字节节或或4个个字节,取值范围字节,取值范围06553518signedintn1,n2;signedn1,n2;n1,n2为带符号整型,取值同为带符号整型,取值同int注:注:shortint和和longint为不视机器而定字节数。固定分配各位为不视机器而定字节数。固定分配各位2个个字节和字节和4个字节。个字节。int:视机器而定为视机器而定为2个字节或个字节或4个字节。个字节。signed和和unsigned修饰各类整型:修饰各类整型:unsignedshortintsignedlongint浮点型说明浮点型说明:例:例:floaty;y为浮点型的变量,长度为为浮点型的变量,长度为4个字节,取值范围为:个字节,取值范围为:约约|3.4e-38|3.4e+38|(7位有效数字位有效数字)doublex;x为双精度浮点型的变量,长度为为双精度浮点型的变量,长度为8个字节:个字节:取值范围:取值范围:|1.7e-308|1.7e+308|(15位有效数字位有效数字)19字符型说明:字符型说明:例:例:charz,z1;z,z1为字符型变量占为字符型变量占1个字节单元;个字节单元;取值范围取值范围:ASCII表中(或其他字符集中)表中(或其他字符集中)可印字符的序号值,即无符号可印字符的序号值,即无符号0255,带符号:带符号:-128127注意:注意:变量说明的实质变量说明的实质1.使使机机器器按按类类型型给给变变量量预预先先分分配配内内存存单单元元,变变量量名名是是单元单元地址的形式表示地址的形式表示2.变变量量一一经经类类型型说说明明其其取取值值范范围围和和施施加加的的运运算算就就被被确确定定20(2).常量常量程序执行中不变的量程序执行中不变的量,常量的类型可由书写形式隐含的给出常量的类型可由书写形式隐含的给出.整形常量整形常量浮点型常量浮点型常量常量常量字符型常量字符型常量符号常量符号常量枚举型常量枚举型常量a.整形常量整形常量:4种形式种形式(精确的数精确的数)十进制整数十进制整数(0-9十个数码和十个数码和+,-号组成号组成)如如:0,-123,13,18等等八进制整数八进制整数(0-7八个数码和八个数码和+,-号组成号组成,)如如:011,-0123,013等等;但但,如如:018是错误的是错误的.十六进制整数十六进制整数(0-f十六个数码和十六个数码和+,-号组成号组成,且以且以0 x开头开头)如如:0 x123,-0 xab,0 x13a等等.长整型数长整型数:以以L或或UL结尾的整数结尾的整数.如如:123L,047UL,0XabL.21b.浮点型常量:小数形式的指数形式(不精确的数)浮点型常量:小数形式的指数形式(不精确的数)小小数数形形式式:0.0,0.1,.01,50.,即即小小数数点点两两边边至至少少一一边边有有数字数字指数形式:由整数,小数和指数形式:由整数,小数和E或或e后按带符号或不带符号后按带符号或不带符号整次幂组成整次幂组成.如:如:-5.110写成指数浮点数写成指数浮点数:-5.1e-3如如:.1e+02,3.1E+3,2.e-5注:尾数必须有(整数部分或小数部分),注:尾数必须有(整数部分或小数部分),指数必须是整数指数必须是整数如:如:E+3,2e-3.0(错误)错误)注意:注意:1.浮点常数的类型为浮点常数的类型为double2.单单精精度度浮浮点点型型(float)表表示示:在在常常数数后后写写上上f或或F如如:123.5f高精度浮点常数表示(高精度浮点常数表示(longdouble):):在常数后写上在常数后写上L或或l如:如:1.3e+3L3.C语语言言中中无无分分数数的的概概念念,如如;如如1/3不不是是常常数数,是是表表达式。达式。-31322c.字符型常量:字符常量和字符串常量字符型常量:字符常量和字符串常量1)字字符符常常量量:由由单单引引号号()括括起起来来的的单单个个可可印印字字符符组成组成如如:A,*,/,B,3等等字符常量的存贮值为该字符在字符常量的存贮值为该字符在ASCII表中的表中的序号值:如序号值:如A序号值为序号值为65转转义义字字符符表表示示:单单引引号号括括起起来来的的以以”开开头头的的字字符符序序列列用来表示不可印字符或作了特殊使用的字符用来表示不可印字符或作了特殊使用的字符如:如:n:表示回车符(表示回车符(ASCII码码10):单引号符,由于单引号作了字符括号,因此:单引号符,由于单引号作了字符括号,因此要显示时,必须用要显示时,必须用”:双引号符,由于双引号作了字符串括号:双引号符,由于双引号作了字符串括号,因此因此要显示时,必须用要显示时,必须用”:斜杠符,由于斜杠符作了转移表示符,因此斜杠符,由于斜杠符作了转移表示符,因此要显示时,必须用要显示时,必须用xxx:其中其中xxx为三位为三位8进制数进制数,或为或为x后两位后两位16进制数进制数,表表示示ASCII码码的字符的字符,如如A,或表示或表示101或或x41232)字字符符串串常常量量:由由一一对对双双引引号号括括起起来来的的(“”)字字符符序序列列如:如:“a”,“abc”,“123”注:字符串常量与字符常量有区别注:字符串常量与字符常量有区别如如:a与与“a”,“a”由由a和和0组组成成,即系统自动对即系统自动对字符串增加结字符字符串增加结字符0即空字符即空字符字符串变量的类型为字符型的数组类型字符串变量的类型为字符型的数组类型字符变量的类型为字符变量的类型为char如:如:chari=“a”(错误错误)charj=a(正确正确)24d.符号常量符号常量用符号表示常量称为符号常量用符号表示常量称为符号常量符号常量定义的方式:符号常量定义的方式:用用#define宏定义宏定义用用const定义定义用用枚举型定义枚举型定义1)用用#define宏定义宏定义形式:形式:#define标识符标识符常量表达式常量表达式如:如:#definePI3.14159#defineSI2.0*PI注:常量符号必须大写,每个常量符号只能用一个注:常量符号必须大写,每个常量符号只能用一个#define定义。其后无分号,定义。其后无分号,#define由由C预处理,他不是预处理,他不是C语句,且他必须放语句,且他必须放在源程序开始处在源程序开始处。252)用用const定义定义形式:形式:const类型标识符类型标识符标识符标识符=常量表达式常量表达式;如:如:constintmax=100;constcharTURE=1;FALSE=0;注注:用用#define定定义义的的符符号号常常量量不不分分配配内内存存单单元元,在在预预处理时,用数代替符号常量,用处理时,用数代替符号常量,用const定义的符号定义的符号常量,因为常量,因为const是常量说明语句,所以给对应的是常量说明语句,所以给对应的符号分配内存单元,并将常数赋给该单元,且该符号分配内存单元,并将常数赋给该单元,且该单元的常量是不可更改的。单元的常量是不可更改的。263)枚举类型枚举类型一个枚举类型是一个枚举类型是int常量的集合常量的集合枚举常量的定义枚举常量的定义一般形式:一般形式:enum枚举名枚举名标识符标识符=常量表达式常量表达式,标识符,标识符=常常量表达式量表达式,.;例:例:enumXNO,YES;X为枚举类型名;为枚举类型名;NO,YES为枚举常量名为枚举常量名其值为其值为0,1enumYA=3,B=4,C=5;y为枚举型型为枚举型型,A,B,C枚举常量为枚举常量为int型型值分别为值分别为3,4,5enumP=1,N,M,H,I,K;无枚举类型名,且枚举常量名为无枚举类型名,且枚举常量名为P,N,M,H,I,K,其值分别为其值分别为1,2,3,4,5,6注:注:1.枚举符号表(枚举符号表()中没有)中没有“=”指定值时,则,系统规定从指定值时,则,系统规定从左往右给枚举常量依次代替左往右给枚举常量依次代替0,1,2,3,整形值整形值.(如例如例1).2.若枚举符号表中从某个枚举常量名开始没有指定值若枚举符号表中从某个枚举常量名开始没有指定值,则未则未指定值的枚举常量名的值依指定的值开始依次加指定值的枚举常量名的值依指定的值开始依次加1(如例如例3).3.定义中所有标识符不能重名定义中所有标识符不能重名27枚举变量的说明枚举变量的说明:一般形式:一般形式:enum枚举名枚举名枚举表枚举表变量名表变量名表;例例:enumPIA,B,CS,S1,S2,S3=B;其中其中A,B,C为枚举常量其值分别为枚举常量其值分别0,1,2;S,S1,S2,S3,为枚举变量其值取自为枚举变量其值取自表中的常数值表中的常数值0,1,2;S3取值为取值为1注:注:1.枚举常量名枚举常量名A,B,C和枚举变量名和枚举变量名S,S1,S2,S3不同,则前者不能被赋值,后者可以被赋值。不同,则前者不能被赋值,后者可以被赋值。2.同类型枚举变量之间可以相互赋值;枚举常量可以同类型枚举变量之间可以相互赋值;枚举常量可以赋给同一类型枚举变量。赋给同一类型枚举变量。3.一个枚举值是一个一个枚举值是一个int整数整数。28练习题:练习题:1.判断下列标识符,那些合法,那些不合法判断下列标识符,那些合法,那些不合法x3,3x,p5q,abcd,ex9.5,2.下列数据那些是整数下列数据那些是整数,浮点数,字符,字符串常数,那浮点数,字符,字符串常数,那些是非法常数(合法常量指出类型)些是非法常数(合法常量指出类型)256,0377,2.50,1e+06,2.2e5,e5,”“,0.0,0,0,”1234”,12,A,-5