




已阅读5页,还剩90页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章,基本数据类型和运算符及表达式,第2页,主要内容,常量与变量 整型数据 实型数据 字符型数据 运算符和表达式 数据类型的转换 程序案例 小结,第3页,2-1 常量与变量,常量和符号常量 变量,第4页,常量,所谓常量,是指在程序运行过程中其值保持不变的量。如程序中的具体数字、字符等。常量被区分为不同的类型。,第5页,符号常量,用一个标识符代表一个常量,称为符号常量,即标识符形式的常量。,第6页,2-1-2 变量,变量的概念 变量的定义 变量的初始化,第7页,变量的概念,C语言中的变量是指在一个程序运行过程中,其值能被改变的量。 一个变量应该有一个名字作为标识,变量名的命名规则也就是相关标识符的命名规则。,第8页,变量的定义,在C语言中,所有变量必须在使用之前给予说明。也就是“先定义,后使用”,说明主要是指出变量的类型。 变量定义的一般格式为: 数据类型标识符 变量名1,变量名2,变量名n;,第9页,变量的存储,第10页,变量的初始化,在定义变量时同时初始化变量 int a=8; /*指定a为整型变量,初值为8*/ float f=8.24; /*指定f为实型变量,初值为8.24*/ char c=a; /*指定c为字符型变量,初值为a*/ 给被定义变量的部分赋初值 int a,b,c=-6; 它表示指定a、b、c均为整型变量,而只对c进行初始化,且c的初值为-6。,第11页,变量的初始化,对几个变量赋给同一个初值 若对几个变量赋同一个初值,不能写成: int a=b=c=6; 而应写成: int a=6,b=6,c=6; 初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋给初值的,相当于有一个赋值语句。,第12页,2-2 整型数据,整型常量 整型变量,第13页,2-2-1 整型常量,十进制的整型常量:十进制数允许出现的数字是0-9共10个阿拉伯数字,并以非0数字开头。如456、-789、0等。 八进制的整型常量:以0开头的整型常量是八进制整型常量。 十六进制的整型常量:以0x开头的整型常量是十六进制整型常量。,第14页,2-2-2 整型变量,整型变量的分类 整型数据在内存中的存放形式 整型变量的定义 整型数据的溢出,第15页,整型变量的分类,基本整型,以int表示。 短整型,以short int表示,或以short表示。 长整型,以long int表示,或以long表示。,第16页,整型变量的表示方法,第17页,C语言整型变量数值的表示范围,第18页,整型数据在内存中的存放形式,数据在内存中是以二进制形式存放的。如果定义了一个整型变量i,系统就给变量i分配相应的存储单元。,第19页,整型变量的定义,定义变量一般要在程序块的首部进行,以免在编译中出现变量未定义的错误。变量定义的位置决定了被定义变量的作用域,这一概念将在以后介绍。 描述数据类型的关键字与被定义的变量之间至少要有一个以上的空格隔开,这样做的目的一是便于阅读程序,二是便于编译系统识别。 多个变量是同一数据类型时,可以用一个数据类型的关键字进行定义,但必须注意,变量间要用逗号隔开,结尾要用分号结束。 变量可以以任意顺序进行定义,不必与它们在代码块中出现的顺序相对应。 在定义short int型、long int 型和unsigned int 型变量时,可以只用short,long和unsigned进行定义。,第20页,整型变量的定义,一个整型常量,其值在-32 76832 767范围内,认为它是int型,它可以赋值给int型和short int型变量。 一个整型常量,其值若超过了上述范围,在-2 147 483 6482 147 483 647范围之内,则认为它是long int 型,可以将它赋值给一个long int 型变量。 如果C语言版本(如Turbo C)确定short int 与int 型数据在内存中占据的长度相同,则它的表数范围与int 型相同。因此,一个int型的常量也同时是一个short int 型常量,可以赋值给int 型或short int 型变量。 常量中无unsigned类型。但一个非负值的整型常量可以赋值给unsigned型的整型变量,只要它的范围不超过变量数值的表示范围即可。 在一个整型常量后面加一个字母l 或L,则认为是long int 型常量。,第21页,整型数据的溢出,第22页,2-3 实型数据,实型常量 实型变量,第23页,2-3-1 实型常量,实型常量的形式 实型常量的类型,第24页,实型常量的形式,十进制数形式 由数字09和小数点组成(注意,必须有小数点)。如3.14159、0.123、.321、21.0、0.0等。 注意:在用十进制数书写实型常量时,必须包含小数点,小数点的两边不一定要求都有数字,例如,21.0可以写成21.;而0.123可以写成.123。,第25页,实型常量的形式,指数形式 实型常量的指数形式类似于数学中的指数表示法,就是把其10的多少次幂中的10用E(e)代替。一般格式为: 尾数E(e)整数指数 如5.11027,7.21023。在C语言程序中表示为:5.1e-27,7.2e23或7.2e+23。 注意:在用指数形式书写实型常量时,e(或E)的前面和后面必须有数字,且e后面的指数必须为整数,而尾数可以是整数也可以是小数。例如,.0e0、1E0、0e5合法,而e3、2.1e3.5、.e3、e等都不是合法的指数形式。,第26页,实型常量的类型,许多编译系统将实型常量作为双精度来处理。例如,已定义一个实型变量f,有如下语句: f=3.86435*6620.87 系统将3.86435和6620.87按双精度数据存储(占64位)和运算,得到一个双精度的乘积,然后取前16位赋给实型变量f。这样做可以保证计算结果更精确,但是运算速度降低了。若在数的后面加字母f或F(如1.65f、654.87F),这样编译系统就会按单精度(32位)处理。,第27页,实型常量的类型,一个实型常量可以赋给一个float型、double型或long double型变量。根据变量的类型截取实型常量中相应的有效位数字。,第28页,2-3-2 实型变量,实型变量的分类 实型变量的定义 实型数据在内存中的存放形式 实型数据的误差,第29页,实型变量的分类,实型变量分为单精度(float型)、双精度(double型)和长双精度(long double型)3类。,第30页,实型变量,第31页,实型变量的定义,使用单精度型变量之前,必须在程序块的首部对其进行定义。定义单精度型变量的关键字是float。 定义i为长双精度实数。C编译系统将为其分配8个字节(128bit)的存储空间。,第32页,实型数据在内存中的存放形式,第33页,实型数据在内存中的存放形式,第34页,实型数据的误差,由于实型变量是用有限的存储单元存储的,因此,能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。,第35页,2-4 字符型数据,字符常量 转义序列 字符串常量 符号常量 字符型变量 字符数据在内存中的存放形式及其使用方法,第36页,2-4-1 字符常量,C语言中字符型常量是由一对单引号括起来的单个字符构成。例如:x,y,7,%,;等都是有效的字符型常量。,第37页,2-4-2 转义序列,除了以上介绍的字符常量之外,C语言还允许用一种特殊形式的字符常量,就是以一个“”开头的字符序列。,第38页,转义序列,第39页,2-4-3 字符串常量,C语言中除了允许使用字符型常量外,还允许使用字符串常量。字符串常量是用一对双引号括起来的字符序列。,第40页,2-4-4 符号常量,C语言中,常量可以用符号代替,代替常量的符号称之为符号常量。为了便于与一般标识符、变量名相区别,符号常量一般用大写英文字母序列构成,符号常量在使用之前必须预先进行定义。 其定义的一般格式是: #define 符号常量名 常量,第41页,2-4-4 符号常量,使用符号常量增强了程序的可读性。 使程序易于修改。,第42页,2-4-5 字符型变量,字符型变量是用来存放字符常量的,在一个字符变量中只能放一个字符,而不能存放一个字符串(包括若干字符)。 字符型变量和整型变量一样也需要先定义,其定义应该在程序块的首部,其关键字是“char”。 字符型变量的定义形式如下: char c1,c2;或char c1; char c2;,第43页,2-4-6 字符数据在内存中的存放形式及其使用方法,字符常量在内存中的存放形式及使用 字符串常量在内存中的存放形式,第44页,字符常量在内存中的存放形式及使用,将一个字符常量放到一个字符型变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。,第45页,字符常量在内存中的存放形式,第46页,字符串常量在内存中的存放形式,字符串常量在内存中存储时,系统自动在该字符串的末尾加一个“字符串结束标志”,这个结束标志就是0(ASCII码值为0的字符),也用NULL表示。它是一字节(8bit)的代码,因此,长度为n个字符的字符串常量,在内存中要占用n+1个字节的存储空间。,第47页,2-5 运算符和表达式,运算符的分类 运算符的优先级与结合性 算术运算符和算术表达式 增1、减1运算符及表达式 赋值运算符和赋值表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式 逗号运算符和逗号表达式 sizeof运算符,第48页,2-5-1 运算符的分类,圆括号运算符:( )。 算术运算符:+、-、*、%。 增1、减1运算符:+、-。 赋值运算符:=及其扩展赋值运算符。 关系运算符:、=、=、=、!=。 逻辑运算符:&、!。 逗号运算符:,。 求字节数运算符:sizeof。,第49页,2-5-1 运算符的分类,强制类型转换运算符:(类型)。 条件运算符:?、:。 下标运算符: 。 指针运算符:*、&。 分量运算符:、。 位运算符:、|、。,第50页,2-5-2 运算符的优先级与结合性,运算符的优先级 运算符的结合性,第51页,运算符的优先级,所谓运算符的优先级就是在一个表达式中运算符所具有的运算优先次序。优先级数字越大,表示优先级越高,越优先被执行。 在C语言中,运算符的优先顺序共分15个等级,最低为1,最高为15。处在同一级别的运算符,它们的优先级相同。,第52页,运算符的结合性,所谓运算符的结合性就是同一优先级的运算符的结合方向。自左至右的结合方向,称为“左结合性”;反之称为“右结合性”。 除单目运算符、赋值运算符和条件运算符是“右结合性”,即第14、3、2级。其他运算符都是“左结合性”。,第53页,2-5-3 算术运算符和算术表达式,算术运算符 算术表达式 算数运算符的优先级、结合性,第54页,算术运算符,C语言有如下5个算术运算符。 +:加法运算符,或正值运算符,如1+4,+8。 -:减法运算符,或负值运算符,如5-2,-9。 *:乘法运算符,如2*6。 /:除法运算符,如7/4。 %:模运算符,或称求余运算符,如5%3。,第55页,算术运算符,两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。 模运算是取整数除法的余数。,第56页,算术表达式,算术运算符和操作数结合构成算术表达式。 操作数包括常量、变量、函数等。,第57页,算数运算符的优先级、结合性,算术运算符中的“*、/、%”运算符指定优先级是第13级,它们优先于优先级小于13级的各种运算符,但它们低于优先级为第15级和第14级的运算符。而运算符+、-的优先级是第12级。也就是说在一个表达式中有加、减、乘和除运算时要先进行乘、除运算,而后进行加、减运算。,第58页,2-5-4 增1、减1运算符及表达式,增1、减1运算符 增1、减1表达式,第59页,增1、减1运算符,C语言中除了基本运算符外,还包括两个特殊的算术运算符: 增1运算符“+”,减1运算符“-”。 表达形式有4种: +操作数 操作数+ -操作数 操作数-,第60页,增1、减1表达式,由增1、减1运算符和变量构成的表达式是增1、减1表达式。 使用增1、减1操作时需注意: 增1、减1运算的操作对象只能是变量,而不允许是常量或表达式、函数调用等。 增1、减1运算符的操作数通常是整型或字符型,因为上述类型的数据操作后其值是确定的;而实型数操作前后并不能确保其差的绝对值是1。 增1、减1操作又分前置和后置操作两类,它们有质的区别。,第61页,增1、减1表达式,增1、减1运算是除了第15级以外优先级最高的运算。但是后置操作则要注意:必然先引用其值参加运算,再做后置操作。 注意增1、减1操作的副作用。 增1、减1运算一般用于如下两种场合: 计数。最常用的场合是修改循环控制变量,因为n+不论是从书写的角度还是从阅读的角度都比n=n+1来得简捷方便;且生成的目标码较之n=n+1短。 指针增1、减1操作。 在增1或减1表达式不是其他表达式的一部分时,其前置操作和后置操作的效果是一样的。,第62页,2-5-5 赋值运算符和赋值表达式,赋值运算符 复合的赋值运算符 赋值表达式,第63页,赋值运算符,赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。例如: a=10; /*把常量10赋给变量a*/ b=2; /*把常量2赋给变量b*/ x=a/b; /*将表达式a/b的值赋给x*/ 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。,第64页,复合的赋值运算符,在赋值符“=”之前加上其他运算符,可以构成复合的运算符。凡是二目运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符。 它们是: += = *= /= %= = &= = |=,第65页,复合的赋值运算符,C语言中采用这种复合运算符,一是为了简化程序,使程序精炼;二是为了提高编译效率,下面是复合赋值运算符的例子: a+=6等价于a=a+6。 a-=5等价于a=a-5。 x*=y+6等价于x=x*(y+6)。 x/=6等价于x=x/6。 x%=4等价于x=x%4。,第66页,赋值表达式,定义 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。 其一般形式为: 变量=表达式 赋值表达式可以嵌套,并可以放在任何可以放置表达式的地方。例如: a=(b=5) 赋值表达式也可以包含复合的赋值运算符 其一般形式为: 变量 双目运算符=表达式,第67页,赋值表达式,先进行“x*=x-2”的计算,此式子相当于x=x*(x-2),因为赋值运算符的优先级别最低,所以根据运算规则,将x=5代入此式,即得: x=x*(x2)x=5*(52)x=15 再计算x+=x*=x-2,此时即是计算x+=xx=x+xx=15+15x=30。 最后计算整个式子的值: x+=x+=x*=x-2x+=x+=xx+=xx=x+xx=30+30x=60 该赋值表达式的值是60,x的值为60。,第68页,2-5-6 关系运算符和关系表达式,关系运算符 关系表达式,第69页,关系运算符,所谓“关系运算符”实际上就是“比较运算”,即将两个数据进行比较,判断两个数据是否符合制定的条件。C语言提供了6种关系运算符。 说明:关系运算符 、=的优先级别相同,关系运算符=、!=的优先级别相同,前面4种高于后面两种。关系运算符是双目运算符,结合性方向都是从左向右,即左结合性。关系运算符优先级低于算术运算符,但它们高于赋值运算符。,第70页,关系运算符,第71页,关系表达式,关系表达式的概念 关系表达式是指,用关系运算符将两个表达式连接起来进行关系运算的式子。其一般形式为: 表达式1 关系运算符 表达式2 关系运算符两边的运算对象可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式等任意合法的表达式。 关系表达式的值逻辑值(“真”或“假”) 由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。因为关系表达式的值为“1”或“0”,所以可参与其他种类的运算,如算术运算、逻辑运算等。 关系表达式的求值过程 首先计算关系运算符两边的表达式的值,然后比较这两个值的大小。,第72页,2-5-7 逻辑运算符和逻辑表达式,逻辑运算符 逻辑表达式,第73页,逻辑运算符,C语言提供了3种逻辑运算符,分别是: &:逻辑与 :逻辑或 !:逻辑非 其中,&和运算符是双目运算符,如(x=1)&(x5)。 !运算符是单目运算符,应该出现在运算对象的左边,如!(ab)。 逻辑运算符结合方向都是从左向右,即左结合性。 逻辑运算符的运算规则。,第74页,逻辑运算符,逻辑运算就是将关系表达式用逻辑运算符连接起来,并对其求值的一个运算过程。 a&b:若a、b同时为“真”,则a&b为“真”,否则a&b为“假”。 ab:若a、b同时为“假”,则ab为“假”,否则ab为“真”。 !a:若a为真,则!a为“假”;若a为“假”,则!a为“真”。,第75页,逻辑运算符,逻辑运算符的优先级 逻辑运算符的优先级顺序是:!(逻辑非)级别最高,&(逻辑与)次之,(逻辑或)最低。 逻辑运算与算术运算、关系运算和赋值运算之间从高到低的运算顺序是:!(逻辑非)、算术运算、关系运算、&(逻辑与)、(逻辑或)、赋值运算。 根据这个优先级关系,下列表达式可以简化为: (ab)&(xy) 可写成 ab&xy (a=b)(x=y) 可写成 a=bx=y (!a)(ab) 可写成 !aab (a+b)& (x%y) 可写成 a+b&x%y,第76页,逻辑运算符的运算规则,第77页,逻辑表达式,用逻辑运算符将算术表达式、关系表达式或逻辑量连接起来的式子就是逻辑表达式。 C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。但在判断一个数据是“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。,第78页,2-5-8 逗号运算符和逗号表达式,逗号运算符 C语言提供一种特殊的运算符,即逗号“,”运算符。 逗号运算符又称为“顺序求值运算符”,其优先级为1,即最低优先级;结合方向是从左至右。操作数的类型不受限制。此运算符不进行算术转换。 2逗号表达式 用逗号表达式连接的表达式称为逗号表达式。 逗号表达式的一般形式为: 表达式1,表达式2,表达式n,第79页,2-5-9 sizeof运算符,sizeof运算符是一个单目运算符,有下面两种不同的用法,格式为: sizeof 表达式 或:sizeof(类型名) 它是以字节为单位给出操作数所占用存储空间的大小。当操作数是类型名时,必须用圆括号将其括起来;当操作数是表达式时,圆括号可以省略。,第80页,2-6 数据类型的转换,隐式类型转换 强制类型转换,第81页,2-6-1 隐式类型转换,算术转换 赋值转换,第82页,算术转换,当表达式中的运算对象不同时,系统会进行类型的自动转换。转换的基本原则是:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象转换。,第83页,算术转换规则,第84页,数据转换,第85页,赋值转换,将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。 将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中,如将35赋给float变量f,即f35,先将35转换成35.00000,再存储到f中。如果将35赋给double型变量d,即d35,则将35补足有效位数字为35.00000000000000,然后以双精度浮点数形式存储到d中。 将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(32位)中。但应注意数值范围不能溢出。,第86页,赋值转换,字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2个字节,因此,将字符数据(8位)放到整型变量低8位中。 将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。 将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的l6位送到long型低l6位中 将unsigned int型数据赋给long int型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned型数据赋给一个占字节数相同的整型变量。 int,unsigned longlong,unsigned shortshort),将unsigned型变量的内容原样送到非unsigned型变量中,如果数据范围超过相应整型的范围,则会出现数据错误。,第87页,赋值转换,将unsigned int型数据赋给long int型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned型数据赋给一个占字节数相同的整型变量。 int,unsigned longlong,unsigned shortshort),将unsigned型变量的内容原样送到非unsigned型变量中,如果数据范围超过相应整型的范围,则会出现数据错误。 将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(连原有的符号位也作为数值一起传送)。,第88页,2-6-2 强制类型转换,强制类型转换是利用强制类型转换运算符将一个表达式转换成所需数据类型的转换。强制类型转换常被称为显式类型转换。其一般形式为: (类型标识符)表达式 其功能就是把表达式结果的数据类型强制转换为圆括号中的类型。其中,类型标识符可以是int、char、float、double、long等,也可以是后面章节介绍的指针、结构体类型标识符等。注意,类型转标识符两边的圆括号不可省略,此圆括号就是C语言中的强制类型转换符。,第89页,2-7 程序案例,#include main() int a=99; int b=5; int c=11; int d=3; int result; float r;,第90页,接上,result=a-b; printf(“a-b=%dn“,result); result=b*c; printf(“b*c=%dn“,result); result=a/b; printf(“a/b=%dn“,result); result=a%b; printf(“a%b=%dn“,result); result=a%d+b/c; printf(“a%d+b/c=%dn“,result); r=(float)(a+b)/2; printf(“(float)(a+b)/2=%fn“,r); ,第91页,接上,运行结果为: a-b=94 b*c=55 a/b=19 a%b=4 a%d+b/c=0 (float)(a+b)/2=52.000000,第92页,2-8 小结,C语言的数据类型:基本类型、构造类型、指针类型和空类型。其中基本数据类型包括整型、实型(包括单精度实型和双精度实型)、字符型和枚举类型等。构造类型包括数组类型、结构体类型和共用体类型。 常量是指在程序运行过程中其值不能被改变的量。常量通常有4种类型,整型常量、实型常量、字符型常量、字符串常量。整型常量有十进制、八进制和十六进制表示。实型常量有小数和指数两种表示形式,均按double类型处理。字符常量是用单引号(即撇号)括起来的单个可视字符或转义字符。字符串常量是用一对双引号括起来的若干字符序列,存储时系统会自动在其末尾加0作为字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工地安全培训全览
- 2025年小程序开发平台口碑排行哪个平台更靠谱
- 保安知识专业培训课件
- 中国南方航空数字化和双中台方案
- 2026届吉林省德惠市九校化学高三上期末质量检测试题含解析
- 九年级语文下册第五单元19善待家园省公开课一等奖新课获奖课件
- 办事大厅重建方案(3篇)
- 餐厅单机经营方案(3篇)
- 清水家装改造方案(3篇)
- 银行生活垃圾管理方案(3篇)
- 砌体结构工程监理实施细则
- 输电线路工程监理人员质量交底资料
- GA 1205-2014灭火毯
- 社区工作者经典备考题库(必背300题)
- 2020数学花园探秘决赛三四年级A卷
- 标准工程签证单表格
- 幼儿园绘本故事:《罗伯生气了》 课件
- 开具生效证明申请书(申请开具生效证明用)
- 北师大版九年级物理全一册教案(完整版)教学设计含教学反思
- GB 9706.218-2021 医用电气设备 第2-18部分:内窥镜设备的基本安全和基本性能专用要求
- 石油专业英语(钻井)
评论
0/150
提交评论