C语言程序设计ppt课件 第2章.ppt
《C语言程序设计ppt课件 第2章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计ppt课件 第2章.ppt(102页珍藏版)》请在三一办公上搜索。
1、2022/11/16,华中科技大学计算机学院,1,C语言程序设计,The C Programming Language,华中科技大学计算机学院曹计昌,2022/11/16,华中科技大学计算机学院,2,第2章 数据类型、运算符和表达式,C程序是一个字符序列,字符序列先被分解为称之为记号(token)的词法元素,再根据语法规则检查这些记号组合是否合法。 本章首先介绍词法元素和语法规则的概念,然后详尽地讨论组成C程序的基本元素,包括基本数据类型、常量和变量、运算符、表达式等。,2022/11/16,华中科技大学计算机学院,3,2.1 字符及词法元素,2.1.1 字符集C源程序由字符序列构成,其字符集
2、为:1. 英文字母:az 和AZ2. 数字字符:093. 特殊字符:! “ # % & ( ) * + , - . / : ; = ? _ | 4.空白字符:空格、换行符、水平制表符(HT)、 垂直制表符(VT)、换页符(FF),2022/11/16,华中科技大学计算机学院,4,三字符序列,以两个连续问号开头(教材表2-1)。所有的三字符序列都要用相应的单个字符替换,这种替换发生在其他任何处理之前。 例如, int a?(4?)=?;被替换成 int a4=0;,2022/11/16,华中科技大学计算机学院,5,2.1.2 词法元素,词法元素称为记号.记号是程序中具有语义的最基本组成单元记号共
3、分5类: 标识符、关键字、常量、运算符、标点符号.编译器从左至右收集字符,总是尽量建立最长的记号,即使结果并不构成有效的C语言程序。相邻记号可以用空白符或注释语句分开。,2022/11/16,华中科技大学计算机学院,6,词法元素(记号)分析举例,例2.1 sum=x+y 分解成sum、=、x、+和y 共5个记号。例2.2 int a,b=10 ; 分解成int、a、,、b、=、10和 ; 共7个记号例2.3 x+y 分解成x、+、+、+、y 共5个记号,2022/11/16,华中科技大学计算机学院,7,2.2 语法规则生成式-描述语法结构的式子,C的语法规则:由C语言字符集中的单个或多个字符按
4、照确定的规则组成语义上关联的记号,再由记号根据确定的规则构成语句乃至整个程序文本,这些规则被称为C的语法规则。 一个简单的描述语法的式子: := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9用文字叙述:数字可以是字符0,或者字符1,或者字符9。这种描述语法结构的式子被称为生成式。,2022/11/16,华中科技大学计算机学院,8,生成式形式化定义需要提供的4方面信息:,(1) 终结符,C语言字符集中的符号。(2) 非终结符,表示语法单位,在定义中将被利用相应的生成式进一步展开。(3) 生成式规则,每条规则确定一个结构的各个成分,生成式以一个非终结符作为它的左部,而
5、后是符号:=,然后取自终结符和非终结符集合的一个串作为右部。(4) 开始符号,代表语法定义的主结构,任何语法定义过程都从某个非终结符开始。开始符号的生成式总是写在最前面。如: := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9以上4个部分构成了一个语言的文法。而用于描述文法的生成式很多,Backus-Naur(巴科思劳尔)范式(BNF)就是这样的一种生成式,,2022/11/16,华中科技大学计算机学院,9,2.2 语法规则,如何描述计算机语言的语法规则? 2.2.1 BNF (Backus-Naur Form)范式BNF:巴科斯范式是由 John Backus
6、和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则。,2022/11/16,华中科技大学计算机学院,10,BNF范式的符号,尖括号( )内包含的为必选项。 竖线( | )表示在其左右两边任选一项,相当于“OR”的意思。:= 是“被定义为”的意思。,2022/11/16,华中科技大学计算机学院,11,BNF范式示例,标识符的BNF范式 := | := | := _| := a|b|c|d|z := A|B|C|D|Z := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9,20
7、22/11/16,华中科技大学计算机学院,12,2.2.2 EBNF (略),EBNF是BNF的一种扩充。EBNF中符号有: :括起来的部分重复0次或多次。 :括起来的部分出现0次或1次。( ):表示结成一组。标识符的EBNF范式 : := ,2022/11/16,华中科技大学计算机学院,13,2.2.3 语法图-另一种表示语法的常见方式,语法图是另一种表示文法的常见方式,对应于每个非终结符有一个子图,图中每条路径对应于该非终结符的一个生成式,路径上的是生成式右端的终结符和非终结符。终结符用弧形框表示,非终结符用矩形框表示 标识符的语法图,2022/11/16,华中科技大学计算机学院,14,2
8、.3 标识符、关键字及分隔符,2.3.1 标识符 标识符是用来标识用户定义的常量、变量、数据类型和函数等名字的符号。其命名规则:以一个字母(az, AZ)或下划线( _ )开头,后面可跟字母、下划线或数字(09)例: K,_id , month, time1 20_sum , not#me,2022/11/16,华中科技大学计算机学院,15,注意事项,大小写字母表示不同意义。不能使用类似 int 和 void 这样的C关键字为自己的对象命名,也要避免使用C程序库中函数和常量的名称,例如 scanf 。良好的编程风格是选择有助于记忆且有一定含义的标识符,这样可增强程序的可读性和程序的文档性。,2
9、022/11/16,华中科技大学计算机学院,16,2.3.2 关键字,是被系统赋予特定含义并有专门用途的标识符,不能作为普通标识符,但可以作为宏名。见教材表2.2,2022/11/16,华中科技大学计算机学院,17,2.3.3 分隔符,分隔符统称为空白字符(包括空格符、制表符、换行符、换页符及注释符),在语法上仅起分隔单词的作用。当程序中两个相邻的单词之间如果不用分隔符就不能区分开时则必须加分隔符(通常用空格符)。例如,int x,y;不能写成 intx,y; 能写成 int x , y ;,2022/11/16,华中科技大学计算机学院,18,2.4 基本数据类型,2.4.1 数据类型的分类,
10、2022/11/16,华中科技大学计算机学院,19,2.4.2 基本类型的名字,本小节介绍字符型、整型、浮点型 (表2.4 ),char,int,float,unsigned,signed,short (short , unsigned short ),float,double,long double,long(long , unsigned long ),unsigned,signed,2022/11/16,华中科技大学计算机学院,20,2.4.3 字符类型char,char的存储长度是一字节 。多数系统中char与signed char同(-128127). 字符数据以ASCII码存储在内
11、存中 。在不要求大整数的情况下,可用字符型代替整型 。,2022/11/16,华中科技大学计算机学院,21,2.4.4 整型类型,int型值存储在一个机器字中 .假设字长为2B,int取值范围为-3276832767, unsigned取值范围为0 65535 下面的代码是否正确 #define BIG 30000void main(void) int x,y,z; x=y=BIG; z=x+y; /* 整数溢出 */ ,2022/11/16,华中科技大学计算机学院,22,程序员必须时刻保证整数表达式的值在合理范围内。引入short和long的目的是为了提供各种满足实际要求的不同长度的整数。i
12、nt通常反映特定机器的自然大小,short一般为2B,long一般为4B。因此,当关心存储时,用short;当需要较大的整数值时,用long。,2022/11/16,华中科技大学计算机学院,23,2.4.5 浮点类型,一个浮点数N可表示为:-10.0=-0.101*24=,符号区1b,指数区8b,尾数区23b,1,00000100,10100 0,2022/11/16,华中科技大学计算机学院,24,尾数所占的位数决定值的精度,指数所占的位数决定值的范围。float占4字节,其中符号1b,指数8b,尾数23b,其精度大约为7位,范围约10-3810+38。double占8字节,其中符号1b,指数
13、11b,尾数52b,其精度大约为15位,范围约为10-30810+308。很多编译器将long double处理为double,在某些系统中,它占用10或12B。很少被使用。,2022/11/16,华中科技大学计算机学院,25,浮点数的表示的近似性,浮点数的表示可能只是近似的。其值与表示法之间的差称为“可表示误差”。计算也可能造成可表示误差。不能使用=和!=运算符比较浮点数据。可以用两个数值之差同一个预定的小正数epsilon比较的方法解决这个问题。如: x=0 可以用 abs(x-0)0.000001表示,2022/11/16,华中科技大学计算机学院,26,浮点数溢出的处理,下溢时,有些系统
14、指数域全为0,尾数域非0,有些系统简单地用0表示。上溢后,用称为“无穷大”的特殊位模式表示,即指数域全为1,尾数域0。有些系统中将输出+Infinity或-Infinity。见p34 图2.4,2022/11/16,华中科技大学计算机学院,27,2.5 常量与变量,2.5.1 文字常量 1. 整型常量有三种表示方法(通过前缀字符区分):十进制:无前缀八进制:前缀为0十六进制:前缀为0 x或0X时。例如,31可写成037,也可写成0 x1f或0X1F,2022/11/16,华中科技大学计算机学院,28,整型常量可以带有后缀,用以指定其类型:,字母u或U表示unsigned字母l或L表示long字
15、母ul或UL表示unsigned long字母ll或LL表示long long (C99)字母ull或ULL表示unsigned long long (C99)无后缀时,表示int当常量值超出指定类型的范围时,其实际类型取决于数值大小、前缀等,确定类型的规则很复杂,在标准化前的C语言、C89和C99中各不相同,2022/11/16,华中科技大学计算机学院,29,2. 浮点型常量,有两种表示方式:(1)带小数点的十进制数形式(可以小数点开头,也可以小数点结尾)如23.7,14.,.126(2)指数形式(科学计数法)将指数部分跟在尾数部分后面。尾数部分的书写规则与第一种相同,但可以没有小数点,指数
16、部分e(E)n,代表10n。如 45e-3 = 4510-3, .15e5 = 0.15105。,2022/11/16,华中科技大学计算机学院,30,浮点类型的后缀,浮点类型可以使用后缀来指定其类型无后缀:表示double,后缀f或F:表示float,后缀l或L:表示long double。,2022/11/16,华中科技大学计算机学院,31,3. 字符常量,(1)用单引号包含的一个字符是字符常量(2)只能包含一个字符,例,a, A, 1abc 、“a”,2022/11/16,华中科技大学计算机学院,32,转义序列,有些以开头的特殊字符称为转义序列转义序列有两种形式,一种是“字符转义序列”,即
17、反斜线后面跟一个图形符号,用于表示字符集中的非图形符号和一些特殊的图形字符。 n 换行 t 水平制表符 反斜杠 单引号“ 双引号 0 空字符 ? 问号,2022/11/16,华中科技大学计算机学院,33,转义序列,转义序列的另一种是“数字转义序列”,即ooo( ooo 表示13个八进制数字)或xhh ( hh表示12个十六进制数字)例如,A、101 和x41 字符A; 11、011、x9和x09 水平制表符HT,2022/11/16,华中科技大学计算机学院,34,4. 字符串常量,写成用一对双引号括住0至多个字符的形式。 stringn /* 包含7个字符的字符串 */ /* 包含0个字符的空
18、字符串*/字符串中的单引号可以用图形符号表示,但双引号和反斜线必须用转义序列表示。例如:340 /* 表示5个字符的字符串:340 */“c:tc” /* 表示4个字符的字符串 */“c:tc” /* 表示5个字符的字符串 */,2022/11/16,华中科技大学计算机学院,35,续行符,如何将一个较长的字符串写成多行?有两种方法:(1)行连接:在前一行的末尾输入续行符() 再换行。Hello,how are you /* 换行后应紧靠行首 */(2)字符串连接:将字符串分段,分段后的每个字符串用双引号括起来。Hello, how are you /* 换行后不必紧靠行首*/,2022/11/
19、16,华中科技大学计算机学院,36,a与 “a”的区别,a与 “a”有何区别 ?a : 字符常量,占1 B内存空间 “a” : 字符串常量,占2B内存空间“a”存储时,系统自动在后面补上0( 空字符,ASC11值为0,作为字符串结束标志)字符串的存储长度比字符串的实际长度大1,2022/11/16,华中科技大学计算机学院,37,2.5.2 符号常量,用一个标识符表示一个常量.C语言中有三种定义符号常量的方法:(1) 用#define指令(2) 用const声明语句(3) 用枚举类型(在2.9节介绍),2022/11/16,华中科技大学计算机学院,38,1用#define定义符号常量,#defi
20、ne是一种编译预处理指令,格式为: #define 标识符 常量,符号常量(一般用大写,以区分变量),2022/11/16,华中科技大学计算机学院,39,例2.5 打印华氏和摄氏温度对照表, 温度转换公式为:=(5/9)(-32),#include #define LOWER 0 /* 表的下限 */#define UPPER 300 /* 表的上限 */#define STEP 20 /* 步长 */void main(void) int fahr; for(fahr=LOWER;fahr=UPPER;fahr=fahr+STEP) printf(%3d:%10.2fn , fahr, (5
21、.0/9)*(fahr-32) );,2022/11/16,华中科技大学计算机学院,40,2用const定义符号常量,const是关键字,称为类型限定符。格式为: const 类型名 标识符=常量;例如: const double PI=3.14159; const int DOWN=0 x5000;/* 下光标键的扫描码 */ const int YES=1,NO=0;,2022/11/16,华中科技大学计算机学院,41,用const和#define定义的符号常量的区别?,const声明的标识符是一个只读变量,编译时系统会根据定义的类型为该标识符分配存储单元,并把对应的常量值放入其中,该值不
22、能再被更改,此后,程序中每次出现该标识符都是对所代表存储单元的访问。#define定义的标识符没有对应的存储单元,只是在编译之前由预处理程序进行简单的文本替换。,2022/11/16,华中科技大学计算机学院,42,2.5.3 变量定义,变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。,2022/11/16,华中科技大学计算机学院,43,变量的声明与初始化,要求对所有用到的变量作定义,也就是“先定义,后使用” 。形式: 类型名 变量表;如:int total,average;变量在声明时可以同时赋一个初值(称为变量的显示初始化),每个
23、变量必须分别显示初始化。如:int count=0,sum=0; char alert=a, c ;int count=0,sum=0;(不能 int count=sum=0;),2022/11/16,华中科技大学计算机学院,44,2.6 运算符和表达式,运算符是运算的符号表示,执行对运算对象(称为操作数)的各种操作。单个的操作数(包括常量、变量和函数调用)是表达式,由运算符和操作数组成的有意义的计算式子便是表达式,如:sqrt(b*b-4*a*c)x=x*PI/180fabs(an)=EPS,2022/11/16,华中科技大学计算机学院,45,2.6.1 C运算符简介,学习每一种运算符都应掌
24、握以下四点:(1)运算符的运算功能 (2)操作数的个数和类型要求 单目(或一元)运算符 双目(或二元)运算符 三目(或三元)运算符 运算符都对操作数的类型有规定,比如%的操作数不能为浮点型。,2022/11/16,华中科技大学计算机学院,46,(3)运算符的优先级和结合性(4)运算所得结果的类型运算的结果是一个具有确定类型的值,这个类型称为表达式值的类型。尤其当两个不同类型的操作数进行运算时,会引起数据类型的转换,特别要注意结果值的类型。,2022/11/16,华中科技大学计算机学院,47,2.6.2 运算符的优先级和结合性,当表达式中包括多个运算符时,C语言会先按优先级规则解释表达式的意义。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计ppt课件 第2章 语言程序设计 ppt 课件
链接地址:https://www.31ppt.com/p-1375814.html