C语言程序设计ppt课件-第2章.ppt
《C语言程序设计ppt课件-第2章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计ppt课件-第2章.ppt(102页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022-8-1华中科技大学计算机学院1C C语言程序设计语言程序设计The C Programming Language华中科技大学计算机学院华中科技大学计算机学院曹计昌曹计昌2022-8-1华中科技大学计算机学院2第第2 2章章 数据类型、运算符和表达式数据类型、运算符和表达式 C程序是一个程序是一个字符序列字符序列,字符序列先被分,字符序列先被分解为称之为解为称之为记号记号(token)的词法元素,再根)的词法元素,再根据语法规则检查这些据语法规则检查这些记号组合记号组合是否合法。是否合法。 本章首先介绍词法元素和语法规则的概本章首先介绍词法元素和语法规则的概念,然后详尽地讨论组成念,然
2、后详尽地讨论组成C程序的基本元素,程序的基本元素,包括基本数据类型、常量和变量、运算符、表包括基本数据类型、常量和变量、运算符、表达式等。达式等。 2022-8-1华中科技大学计算机学院32.1 2.1 字符及词法元素字符及词法元素 2.1.1 字符集字符集C源程序由字符序列构成,其源程序由字符序列构成,其字符集字符集为:为:1. 英文字母英文字母:az 和和AZ2. 数字字符数字字符:093. 特殊字符特殊字符:!:! “ # % & ( ) * + , - . / : ; = ? _ | 4.空白字符空白字符:空格、换行符、水平制表符(:空格、换行符、水平制表符(HT)、)、 垂直制表符(
3、垂直制表符(VT)、换页符()、换页符(FF) 2022-8-1华中科技大学计算机学院4三字符序列三字符序列 以两个连续问号开头(教材表以两个连续问号开头(教材表2-1)。所有的)。所有的三字符序列都要用相应的单个字符替换,这三字符序列都要用相应的单个字符替换,这种替换发生在其他任何处理之前。种替换发生在其他任何处理之前。 例如,例如, int a?(4?)=?;被替换成;被替换成 int a4=0; 2022-8-1华中科技大学计算机学院52.1.2 2.1.2 词法元素词法元素n词法元素称为记号词法元素称为记号.n记号是程序中具有语义的最基本组成单元记号是程序中具有语义的最基本组成单元n记
4、号共分记号共分5类:类: 标识符、关键字、常量、运算符、标点符号标识符、关键字、常量、运算符、标点符号.n编译器编译器从左至右收集字符,总是尽量建立最从左至右收集字符,总是尽量建立最长的记号长的记号,即使结果并不构成有效的,即使结果并不构成有效的C语言程语言程序。序。相邻记号可以用空白符或注释语句分开相邻记号可以用空白符或注释语句分开。2022-8-1华中科技大学计算机学院6词法元素词法元素( (记号记号) )分析举例分析举例n例例2.1 sum=x+y 分解成分解成sum、=、x、+和和y 共共5个记号。个记号。n例例2.2 int a,b=10 ; 分解成分解成int、a、,、,、b、=、
5、10和和 ; 共共7个记个记号号n例例2.3 x+y 分解成分解成x、+、+、+、y 共共5个记号个记号 2022-8-1华中科技大学计算机学院72.2 2.2 语法规则语法规则生成式生成式- -描述语法结构的式子描述语法结构的式子 nC的语法规则的语法规则:由由C语言字符集中的单个或多个字符语言字符集中的单个或多个字符按照确定的规则组成语义上关联的记号,再按照确定的规则组成语义上关联的记号,再由记号由记号根据确定的规则构成语句乃至整个程序文本根据确定的规则构成语句乃至整个程序文本,这些这些规则被称为规则被称为C的语法规则的语法规则。 n一个简单的描述语法的式子:一个简单的描述语法的式子: :
6、= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9n用文字叙述:数字可以是字符用文字叙述:数字可以是字符0,或者字符,或者字符1,或者字符或者字符9。n这种描述语法结构的式子被称为生成式。这种描述语法结构的式子被称为生成式。 2022-8-1华中科技大学计算机学院8生成式形式化定义需要提供的生成式形式化定义需要提供的4 4方面信息:方面信息:n(1) 终结符终结符,C语言字符集中的符号。语言字符集中的符号。n(2) 非终结符非终结符,表示语法单位,在定义中将被利用相应的生,表示语法单位,在定义中将被利用相应的生成式进一步展开。成式进一步展开。n(3) 生成式规则生成
7、式规则,每条规则确定一个结构的各个成分,生成,每条规则确定一个结构的各个成分,生成式以一个非终结符作为它的式以一个非终结符作为它的左部左部,而后是符号,而后是符号:=,然后取自,然后取自终结符和非终结符集合的一个串作为终结符和非终结符集合的一个串作为右部右部。n(4) 开始符号开始符号,代表语法定义的主结构,任何语法定义过程,代表语法定义的主结构,任何语法定义过程都从某个非终结符开始。都从某个非终结符开始。开始符号的生成式总是写在最前面开始符号的生成式总是写在最前面。如如: := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9n以上以上4个部分构成了一个语言的文法。
8、而用于描述文法的生成个部分构成了一个语言的文法。而用于描述文法的生成式很多,式很多,Backus-Naur(巴科思劳尔巴科思劳尔)范式(范式(BNF)就是这就是这样的一种生成式,样的一种生成式, 2022-8-1华中科技大学计算机学院92.2 2.2 语法规则语法规则 n如何描述计算机语言的语法规则?如何描述计算机语言的语法规则? n2.2.1 BNF (Backus-Naur Form)范式)范式BNF:巴科斯范式是由巴科斯范式是由 John Backus 和和 Peter Naur 首先引入的用来描述计算机语首先引入的用来描述计算机语言语法的符号集。言语法的符号集。现在,几乎每一位新编程语
9、言书籍的作现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法者都使用巴科斯范式来定义编程语言的语法规则。规则。 2022-8-1华中科技大学计算机学院10BNFBNF范式的符号范式的符号n尖括号尖括号( )内包含的为必选项。内包含的为必选项。 n竖线竖线( | )表示在其左右两边任选一项,相当表示在其左右两边任选一项,相当于于“OR”的意思。的意思。n:= 是是“被定义为被定义为”的意思。的意思。2022-8-1华中科技大学计算机学院11BNFBNF范式示例范式示例n 标识符的标识符的BNF范式范式 n := | := | n := _|n := a|b|c|d|z :=
10、 A|B|C|D|Zn := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 92022-8-1华中科技大学计算机学院122.2.2 EBNF (2.2.2 EBNF (略略) )nEBNF是是BNF的一种扩充。的一种扩充。EBNF中符号有:中符号有:n :括起来的部分重复:括起来的部分重复0次或多次。次或多次。n :括起来的部分出现:括起来的部分出现0次或次或1次。次。n( ):表示结成一组。:表示结成一组。n标识符的标识符的EBNF范式范式 :n := 2022-8-1华中科技大学计算机学院132.2.3 2.2.3 语法图语法图- -另一种表示语法的常见方式另一种
11、表示语法的常见方式n语法图是另一种表示文法的常见方式,对应于语法图是另一种表示文法的常见方式,对应于每个非终结符有一个子图,图中每条路径对应每个非终结符有一个子图,图中每条路径对应于该非终结符的一个生成式,路径上的是生成于该非终结符的一个生成式,路径上的是生成式右端的终结符和非终结符。终结符用弧形框式右端的终结符和非终结符。终结符用弧形框表示,非终结符用矩形框表示表示,非终结符用矩形框表示 n标识符的语法图标识符的语法图az, Az, _09,a.z,A.z, _2022-8-1华中科技大学计算机学院142.3 2.3 标识符、关键字及分隔符标识符、关键字及分隔符 n2.3.1 标识符标识符
12、n标识符是用来标识用户定义的常量、变量、数标识符是用来标识用户定义的常量、变量、数据类型和函数等名字的符号。据类型和函数等名字的符号。其命名规则其命名规则:n以一个字母以一个字母(az, AZ)或下划线或下划线( _ )开头,开头,后面可跟字母、下划线或数字后面可跟字母、下划线或数字(09)例:例: K,_id , month, time1 20_sum , not#me 2022-8-1华中科技大学计算机学院15n大小写字母表示不同意义。大小写字母表示不同意义。n不能使用类似不能使用类似 int 和和 void 这样的这样的C关键字为关键字为自己的对象命名,也要避免使用自己的对象命名,也要避
13、免使用C程序库中函程序库中函数和常量的名称,例如数和常量的名称,例如 scanf 。n良好的编程风格是选择有助于记忆且有一定含良好的编程风格是选择有助于记忆且有一定含义的标识符,这样可增强程序的可读性和程序义的标识符,这样可增强程序的可读性和程序的文档性。的文档性。 2022-8-1华中科技大学计算机学院162.3.2 2.3.2 关键字关键字n是被系统赋予特定含义并有专门用途的标识符,是被系统赋予特定含义并有专门用途的标识符,不能作为普通标识符,但可以作为宏名。不能作为普通标识符,但可以作为宏名。n见教材表见教材表2.2 2022-8-1华中科技大学计算机学院172.3.3 2.3.3 分隔
14、符分隔符n分隔符统称为空白字符分隔符统称为空白字符(包括空格符、制表符、包括空格符、制表符、换行符、换页符及注释符换行符、换页符及注释符),在语法上仅起分,在语法上仅起分隔单词的作用。隔单词的作用。n当程序中两个相邻的单词之间如果不用分隔符当程序中两个相邻的单词之间如果不用分隔符就不能区分开时则必须加分隔符(通常用空格就不能区分开时则必须加分隔符(通常用空格符符)。n例如,例如,int x,y;不能写成;不能写成 intx,y; 能写成能写成 int x , y ;2022-8-1华中科技大学计算机学院182.4 2.4 基本数据类型基本数据类型n2.4.1 数据类型的分类数据类型的分类复数类
15、型复数类型 2022-8-1华中科技大学计算机学院192.4.2 2.4.2 基本类型的名字基本类型的名字n本小节介绍字符型、整型、浮点型本小节介绍字符型、整型、浮点型 (表表2.4 )charintfloatunsignedsigned short (short , unsigned short )floatdoublelong double long(long , unsigned long )unsignedsigned2022-8-1华中科技大学计算机学院202.4.3 2.4.3 字符类型字符类型charcharnchar的存储长度是一字节的存储长度是一字节 。n多数系统中多数系统中
16、char与与signed char同同(-128127). n字符数据以字符数据以ASCII码存储在内存中码存储在内存中 。n在不要求大整数的情况下,可用字符型代替整在不要求大整数的情况下,可用字符型代替整型型 。2022-8-1华中科技大学计算机学院212.4.4 2.4.4 整型类型整型类型nint型值存储在一个机器字中型值存储在一个机器字中 .n假设字长为假设字长为2B,int取值范围为取值范围为-3276832767, unsigned取值范围为取值范围为0 65535 n下面的代码是否正确下面的代码是否正确 #define BIG 30000void main(void) int x
17、,y,z; x=y=BIG; z=x+y; /* 整数溢出整数溢出 */ 2022-8-1华中科技大学计算机学院22n程序员必须时刻保证整数表达式的值在合理范程序员必须时刻保证整数表达式的值在合理范围内。围内。n引入引入short和和long的目的是为了提供各种满足的目的是为了提供各种满足实际要求的不同长度的整数。实际要求的不同长度的整数。int通常反映特通常反映特定机器的自然大小,定机器的自然大小,short一般为一般为2B,long一般为一般为4B。因此,当关心存储时,用。因此,当关心存储时,用short;当需要较大的整数值时,用当需要较大的整数值时,用long。2022-8-1华中科技大
18、学计算机学院232.4.5 2.4.5 浮点类型浮点类型n一个浮点数一个浮点数N可表示为:可表示为:-10.0=-0.101*24=xbmN符符号号区区1b指指数数区区8b尾尾数数区区23b 10000010010100 02022-8-1华中科技大学计算机学院24n尾数所占的位数决定值的精度,指数所占的位数决尾数所占的位数决定值的精度,指数所占的位数决定值的范围。定值的范围。nfloat占占4字节,其中符号字节,其中符号1b,指数,指数8b,尾数,尾数23b,其精度大约为其精度大约为7位,范围约位,范围约10-3810+38。ndouble占占8字节,其中符号字节,其中符号1b,指数,指数1
19、1b,尾数,尾数52b,其精度大约为,其精度大约为15位,范围约为位,范围约为10-30810+308。n很多编译器将很多编译器将long double处理为处理为double,在某些,在某些系统中,它占用系统中,它占用10或或12B。很少被使用。很少被使用。 2022-8-1华中科技大学计算机学院25浮点数的表示的近似性浮点数的表示的近似性n浮点数的表示可能只是近似的。其值与表示浮点数的表示可能只是近似的。其值与表示法之间的差称为法之间的差称为“可表示误差可表示误差”。n计算也可能造成可表示误差。不能使用计算也可能造成可表示误差。不能使用=和和!=运算符比较浮点数据。运算符比较浮点数据。n可
20、以用两个数值之差同一个预定的小正数可以用两个数值之差同一个预定的小正数epsilon比较的方法解决这个问题。比较的方法解决这个问题。n如如: x=0 可以用可以用 abs(x-0)0.000001表表示示2022-8-1华中科技大学计算机学院26浮点数溢出的处理浮点数溢出的处理n下溢时,有些系统指数域全为下溢时,有些系统指数域全为0,尾数域非,尾数域非0,有些系统简单地用有些系统简单地用0表示。表示。n上溢后,用称为上溢后,用称为“无穷大无穷大”的特殊位模式表示,的特殊位模式表示,即指数域全为即指数域全为1,尾数域,尾数域0。有些系统中将输。有些系统中将输出出+Infinity或或-Infin
21、ity。n见见p34 图图2.42022-8-1华中科技大学计算机学院272.5 2.5 常量与变量常量与变量n2.5.1 文字常量文字常量 n1. 整型常量整型常量有三种表示方法(通过前缀字符区分):有三种表示方法(通过前缀字符区分):十进制:无前缀十进制:无前缀八进制:前缀为八进制:前缀为0十六进制:前缀为十六进制:前缀为0 x或或0X时。时。例如,例如,31可写成可写成037,也可写成,也可写成0 x1f或或0X1F2022-8-1华中科技大学计算机学院28整型常量可以带有后缀,用以指定其类型:整型常量可以带有后缀,用以指定其类型:n字母字母u或或U表示表示unsignedn字母字母l或
22、或L表示表示longn字母字母ul或或UL表示表示unsigned longn字母字母ll或或LL表示表示long long (C99)n字母字母ull或或ULL表示表示unsigned long long (C99)n无后缀时,表示无后缀时,表示intn当常量值超出指定类型的范围时,其实际类型取决当常量值超出指定类型的范围时,其实际类型取决于数值大小、前缀等,确定类型的规则很复杂,在于数值大小、前缀等,确定类型的规则很复杂,在标准化前的标准化前的C语言、语言、C89和和C99中各不相同中各不相同 2022-8-1华中科技大学计算机学院292. 2. 浮点型常量浮点型常量 有两种表示方式:有两
23、种表示方式:(1)带小数点的十进制数形式(可以小数点开头,也)带小数点的十进制数形式(可以小数点开头,也可以小数点结尾)可以小数点结尾)如如23.7,14.,.126(2)指数形式(科学计数法)指数形式(科学计数法)将指数部分跟在尾数部分后面。尾数部分的书写规将指数部分跟在尾数部分后面。尾数部分的书写规则与第一种相同,但可以没有小数点,指数部分则与第一种相同,但可以没有小数点,指数部分e(E)n,代表,代表10n。如如 45e-3 = 45 10-3, .15e5 = 0.15 105。 2022-8-1华中科技大学计算机学院30浮点类型的后缀浮点类型的后缀n浮点类型可以使用后缀来指定其类型浮
24、点类型可以使用后缀来指定其类型n无后缀:表示无后缀:表示double,n后缀后缀f或或F:表示:表示float,n后缀后缀l或或L:表示:表示long double。2022-8-1华中科技大学计算机学院313. 3. 字符常量字符常量 (1)(1)用单引号包含的一个字符是字符常量用单引号包含的一个字符是字符常量(2)(2)只能包含一个字符只能包含一个字符a, A, 1a, A, 1abcabc 、“a”a”2022-8-1华中科技大学计算机学院32转义序列转义序列有些以有些以开头的特殊字符称为转义序列开头的特殊字符称为转义序列转义序列有两种形式,转义序列有两种形式,一种是一种是“字符转义序列
25、字符转义序列”,即,即反斜线后面跟一个图形符号反斜线后面跟一个图形符号,用于表示字符集中的,用于表示字符集中的非图形符号和一些特殊的图形字符。非图形符号和一些特殊的图形字符。 n 换行换行 t 水平制表符水平制表符 反反斜杠斜杠 单引号单引号“ 双引号双引号 0 空字符空字符 ? 问号问号 2022-8-1华中科技大学计算机学院33转义序列转义序列n转义序列的另一种是转义序列的另一种是“数字转义序列数字转义序列”,即,即ooo( ooo 表示表示13个八进制数字)个八进制数字)或或xhh ( hh表示表示12个十六进制数字)个十六进制数字)n例如,例如,A、101 和和x41 字符字符A; 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 ppt 课件
限制150内