C02数据类型、运算符与表达式.ppt

上传人:tia****nde 文档编号:12805323 上传时间:2020-05-25 格式:PPT 页数:42 大小:248.50KB
返回 下载 相关 举报
C02数据类型、运算符与表达式.ppt_第1页
第1页 / 共42页
C02数据类型、运算符与表达式.ppt_第2页
第2页 / 共42页
C02数据类型、运算符与表达式.ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
1,第二章数据类型、运算符、表达式,掌握数据及数据类型、算术运算符、赋值运算符、逗号运算符、自增(减)运算符及其上述运算符组成的表达式的基本概念,熟悉运算规则(运算符的优先级和结合性)、表达式计算中的类型转换规则了解各种类型数据在计算机中的存储形式,教学目标,基本要求:能正确地将数学公式用C表达式表示,2,2.1C语言的数据类型,3,2.2常量、变量与标识符,在源程序中明确指明,在程序运行前就知道,而且在程序运行过程中不会发生变化。常量类型:整型常量,如:123、-321、0实型常量,如:12.3、2.0字符常量,如:a、b、7、#符号常量,用户自己定义的,用标识符来代表某个需要多次使用的常量,其值在其作用域内不能改变,也不能被赋值。如:PI,1.常量,4,例2.1符号常量的使用,符号常量必须先定义,后使用。定义格式为:#define常量名字符串习惯上用大写字母来标识符号常量,用小写字母来标识变量或函数。,例2.1:符号常量的使用#definePI3.14159voidmain()floatr,l,area;r=3.5;l=2*PI*r;area=PI*r*r;printf(l=%f,area=%fn,l,area);,5,2.变量,在程序运行过程中其值可以在一定范围内变化在计算机的内存中占据一定的存储单元,在相应的存储单元中存放着变量的值。变量名:用来标识一个变量的标识符,也就是变量的名字。习惯上变量名用小写字母表示,以增加其直观性和可读性。变量值:变量的值,即在变量的存储单元中存放的数值。C语言规定在程序中所有要用到的变量在使用前必须先指定其类型,称为变量定义或变量说明。,6,3.标识符,C语言中,标识符可以用作变量名、符号名、函数名和后面将要学到的数组名、文件名以及一些具有专门含义的名字。合法的标识符只能由字母、数字和下划线等三种字符组成,并且第一个字符必须为字母或下划线。在C语言的标识符中,大写字母和小写字母是两个不同的字符。对于标识符的长度,一般的计算机系统规定取前8个字符有效,如果长于8个字符,多余的字符将不被识别。有些系统允许取较长的名字,读者在取名时应当了解所用系统的具体规定。,7,标识符的分类,C语言的标识符可以分为以下三类。关键字C语言规定的一批标识符,它们在程序中都代表着固定的含义,不能另作它用。如:if,while等。预定义标识符在C语言中也都有特定的含义,如:sin。若另作它用,将使这些标识符失去系统规定的原意。用户标识符用户根据需要定义,一般用来给变量、函数、数组或文件等命名。除要遵循标识符的命名规则外,还应注意做到“见名知义”,即选择的用户标识符应具有相关含义,以增加程序的可读性。注意:如果用户标识符与关键字相同,程序在编译时将给出出错信息;如果与预定义标识符相同,系统并不报错,只是该预定义标识符将失去原定含义,代之以用户确认的含义,可能会引发一些运行时的错误。,8,2.3整型数据,整型数据包括整型常量和整型变量。,1.整型常量(1)十进制形式,如:100,0,-100(2)八进制形式,以数字0开头的八进制数,如:0157,即(157)8,其对应的十进制数值为:182+581+780,即111。八进制数中的数位符号只能有8个,即07。(3)十六进制形式,以数字字母0 x开头的十六进制数,如:0 x157表示十六进制数157,即(157)16,其对应的十进制数值为:1162+5161+7160,即343。十六进制数中的数位符号为数字字符09和英文字母AF等16个字符。C语言自动按常量的范围决定其类型。同时允许用户在整型常量后面加上字符L(或l)表示长整型数据,9,2.整型变量,整型变量可以分为基本整型、短整型、长整型和无符号整型四种。C语言规定在程序中所有要用到的变量,在使用前必须先指定其类型,即对变量进行“定义”或“说明”。基本整型的变量用类型名关键字int进行定义,定义形式如下:intk;/*定义变量k为整型变量*/intx1,x2,x3;/*定义变量x1,x2和x3均为整型变量*/一般微机都会为每个已定义的基本整型的变量在内存中开辟2个连续的存储单元,一个存储单元可以存放8位的二进制信息,一个基本整型的变量中具有16位的二进制信息,其中的最高数值位为符号位,它所能表示的数值范围为:-3276832767。,10,表2.1ANSI标准定义的整数类型,11,3.整型数据在内存中的存储形式,在计算机中,每一种数据类型的数据位数都是固定不变的,所以每一种数据类型都有它的取值范围,在进行算术运算的过程中,如果运算结果超出了它的取值范围,就会得到一个错误的运算结果,这种情况称为溢出。标准C语言的基本整型的数据都是十六位的,其中的最高位(即最左边的一位)用来存放整数的符号,若是正整数,最高位为0,若是负整数,最高位为1。因此,从最高位就立刻能判别出存储器中存放的一个整数是正整数还是负整数。例如整数5,其在内存中的二进制码为:0000000000000101。正整数的这种存储形式,称为“原码形式”的机器数。,12,所谓原码是指一个数的最高位为符号位,其余的数位均为数值位,数值位的值即为该数所对应的二进制数的值。如十进制数+5的原码为:0000000000000101;十进制数-5的原码为:1000000000000101。计算机中的数都是用补码表示的机器数。一个正数的补码和其原码的形式完全相同;而一个负数的补码也是在其原码的基础上转换出来的。转换方法分两步进行:(1)将负数的原码中的数值位按位取反,得到该数的反码。取反操作就是把1转换成0,把0转换成1。如-5的反码为:1111111111111010。(2)在所求得的反码的数值部分的最低位再加上1,即得到该数的补码。如-5的补码为:1111111111111011。,计算机中的数都是用补码表示的,13,如果要把内存中以补码形式存放的二进制数转换成十进制的整数,也要先将其补码转换成原码,转换方法同上,然后再将原码转换成十进制的整数。如-5的补码为:1111111111111011,将其数值位按位取反,得到的结果为1000000000000100,再将其数值位加上1,即得到-5的原码为:1000000000000101。由以上分析可知,由两个字节存放的最小整数是1000000000000000,它的十进制数为-32768;而-1的二进制码为1111111111111111;最大整数是0111111111111111,它的十进制数为32767。读者可按以上步骤进行换算。对于无符号的整数,其中的最高位不再用来表示符号,16个二进制位全部用来存放数值,当其16个二进制位中全部都是0时,其对应的十进制数值为0;当其16个二进制位中全部都是1时,其对应的十进制数值为65535。,补码转换成原码,14,4.整型数据的溢出,shortint型数据在内存占2个字节,则它的最大允许值为32767,如果再加上1,就会发生“溢出”。,例2.2整型数据的溢出。#includevoidmain()shortinta,b;a=32767;b=a+1;printf(%hd,%hdn,a,b);运行结果为:32767,32768,a:0111111111111111b:1000000000000000,15,5.整型常量的类型,在程序中出现一个整型常量,也应该是上述6种类别当中的一种,C语言会自动按以下5种情况分别进行处理。(1)数值在-3276832767的范围内的常量是int型。(2)超过上述范围,但在-21474836482147483647的范围内,则认为它是longint型。再超则当实型处理。(3)标准C语言的int与shortint等同。(4)整型常量没有无符号的类型。但整型常数可以直接赋值给无符号类型的整型变量,只要常数的数值不超过无符号整型变量的取值范围即可。(5)C语言允许在一个整型常数后面加上字符L(或l)表示一个长整型的数据,如100L为十进制长整型常量,0X100L为十六进制长整型常量。,16,2.4实型数据,1.实型常量十进制小数形式,如:100.0、0.5、-10.8等,注意实型常量中必须要有一个小数点指数形式,如:100e5表示100105,注意字母E(或e)之前必须有数字,且E(或e)后面的指数必须为整数,如E5、1.5e3.8、1e等都是不合法的指数形式规范化的指数形式字母E(或e)之前的小数部分,其小数点之前必须有且只能有一位非零的数值。如:3.58759E2,17,2.实型变量及其定义,C语言中的实型变量分为单精度型和双精度型两种,分别用保留关键字float和double进行定义。例如:floatx,y;/*说明变量x,y为单精度实型*/doublez;/*说明变量z为双精度实型*/,18,表2.2实型数据,19,3.实型数据在内存中的存储形式,实型数据在内存中是按照规范化的指数形式来存储的,例如:3580.358x103。如图2.2所示。,由于实型数据在内存中的存储位数是固定的,也是有限的,所以实型数据的精度不是很高,所能表示的数据范围也是有限的。而且由于实型数据的存储形式比较复杂,计算机在进行算术运算时的处理速度也比较慢。,20,4.实型数据的误差,由于用来存储实型数据的存储单元的位数有限,所以有效位数以外的其它数字位被舍去了。这种误差叫做存储误差。此外,在将十进制数转换成二进制数时,有时也会产生误差,即转换误差。,voidmain()floatx1,x2;x1=288.4;/*有效位数不多,但会产生转换误差*/x2=1234567891.0;/*有效位数太多,会产生存储误差*/printf(x1=%fn,x1);printf(x2=%fn,x2);程序的运行结果为:x1=288.399994x2=1234567936.000000,例2.3实型数据的误差,21,5.实型常量的类型,在大多数C编译系统中,将实型常量都作为双精度型来处理。例如:floata;doubleb;a=111111.111;/*最后两位小数不起作用*/b=111111.111;,22,2.5字符型数据,类型名char字符型数据存储ASCII字符集中的一个字符,占用1个字节的存储单元,实际存储的是该字符的ASCII值。字符型数据的存储形式与整数的存储形式类似,所以在C语言中可以把字符型的数据当作整型数使用,其数值范围为:-128127可以定义无符号的字符变量,其数值范围为:0255,定义形式如下:unsignedcharc;/*说明变量c为无符号字符型变量*/,23,1.字符常量,字符常量是用单引号(即撇号)括起来的单个字符,如:A、6转义字符就是一个反斜杠字符,后跟另一个普通字符或若干个数字字符,把它们作为一个整体,用来代替某一个特殊的字符,例如n代表一个“换行”符反斜杠字符的含义已经被转换为“转义字符”的标志字符,如果要在程序中用到反斜杠字符本身,则不能直接用,而应该用,类似的还有和。ddd或xhh是一个转义字符的通用形式,可以用它表示ASCII码字符集里的每一个字符。其中的三位八进制常量或两位十六进制常量为某个字符在ASCII码字符集里的编号,即ASCII码值,24,2.字符变量,字符变量用来存放字符常量,其取值范围为ASCII码字符集中的256个字符。每个字符变量在内存中只占用1个字节的存储空间,只能用来存放一个字符常量。字符变量的定义形式如下:charc1,c2;c1=a;c2=n;,25,3.字符型数据在内存中的存储形式,将一个字符型的数据存放到一个字符变量中,实际上是将该字符的ASCII码值存放到字符变量所占用的内存单元中。例如:字符变量c1的值为a,因为a的ASCII码值为97,所以变量c1的内存单元中存放着整数值97,其二进制为01100001。,26,例2.4字符型的数据当成整型数据来使用,由于在内存中存储的字符型数据就是与该字符的ASCII码值相等的整数值,也即字符型数据的存储形式与整数的存储形式类似,所以,在C语言中可以把字符型的数据当整型数据来使用。,例2.4字符型的数据可以当成整数来使用#includevoidmain()charch1,ch2,ch3,ch4,ch5;ch1=a;ch2=b;ch3=32;ch4=ch1-ch3;ch5=ch2-ch3;printf(%c,%c,ch4,ch5);程序的运行结果为:A,B,27,4.字符串常量,C语言中的字符串常量是用一对双引号括起来的字符序列。字符串常量中的字符序列可以由任意多个字符组成,如:a、ab、250、goodmorning字符串称为空串,由两个连续的双引号组成C语言规定在每一个字符串的结尾都加上一个字符0,作为字符串的结束标志应注意空串与空格组成的字符串、字符常量与单个字符组成的字符串之间的差别,28,例2.5字符串常量,voidmain()printf(%s,CHINA);程序的运行结果为:CHINA程序中字符串常量CHINA在内存中的存储形式为:,29,2.6算术运算符和算术表达式,1.基本算术运算符有:、*、/、%注意事项两个整型数据相除的结果只能为整型数值,如72的结果为3“+”或“-”用作单目运算符时只能有一个运算量,如x=-5,则+x的值还是-5,而-x的值为+5。求余运算只能在两个整型数据之间进行,如9%5的值为4,而9.5%3为非法的运算;当运算量为负数时,所得结果的符号未作明确的规定。但TURBOC系统规定了余数的符号与被除数相同。,30,2.算术表达式,用算术运算符和圆括号将函数和运算对象(如常量、变量等)按一定的规则连接起来就可以构成一个算术表达式,如:(ab)*c5.0、x*y2*sin(z)等都是算术表达式表达式都有一个值,即运算结果。应该注意表达式中运算符的优先级和结合性优先级用于决定运算中的运算顺序,即有多个运算符出现时,哪一个先计算,哪一个后计算。结合性则决定同一优先级的运算符之间的运算顺序,即是先左后右还是先右后左。P295附录C,31,3.算术运算符的优先级和结合性,(1)算术运算符的优先级“优先级”用于决定运算过程中的运算顺序,即有多个运算符出现时,哪一个先计算,哪一个后计算。(2)算术运算符的结合性“结合性”则决定同一优先级的运算符之间的运算顺序,即是先左后右还是先右后左。参见附录C,32,4.算术运算中的类型转换,在C语言中要求参加运算的两个运算量是同一数据类型,而运算结果也是该数据类型。对数据类型不一致的两个运算量,系统会进行数据类型转换,然后才进行相应的算术运算,运算的结果为其中高级别类型的数据。,33,5.强制类型转换运算符,当自动类型转换不能达到目的时,可以使用强制类型转换运算符。强制类型转换运算符就是用一对括号括起来的类型名标识符,其一般格式为:(类型名标识符)(表达式)例如:假设x为float类型,则表达式“x%3”是不合法的,因为%运算符要求其两侧的数据都必须是整型数据。可以使用表达式“(int)x)%3”达到求余数的目的,即先将实型变量x强制转换为整型值,然后再进行取余运算。,34,2.7赋值运算符与赋值表达式,变量的值在程序的运行过程中能够发生变化主要是通过对变量进行赋值来完成的。如果在程序中没有赋值操作,则变量的值也就不会发生变化。1.赋值运算符()的作用是把一个数据或表达式的值赋给一个变量。例如:x=3赋值运算符的左边只能是变量,不允许是算术表达式或常量。例如:x+1=3赋值运算符与数学中的等号不同,赋值运算符求解以后能够得到一个运算结果。,35,2.赋值表达式,由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。赋值表达式的一般形式为:变量=表达式例如:x=3*5执行过程:先将赋值运算符右边表达式的值求出来,然后将该值赋给左边的变量,被赋值变量的值就是整个赋值表达式的值。,36,3.复合的赋值运算符,复合的赋值运算符是在赋值运算符的前面加上其它的运算符组合而成的新运算符。10种复合赋值运算符分别是:*%x=5+k+;结果y的值为8,k的值为4。变量在自加自减运算符之后(+k或-k)时,先自加或自减,然后使用变量的值。如:k=3;x=+k+5;结果y的值为9,k的值为4。注意:自增自减运算只能针对简单变量而言。,38,5.赋值运算中的类型转换,系统自动将赋值运算符右边的数据类型转换成赋值运算符左边变量的类型。1.将实型数据转换为整型值时直接舍弃实数的小数部分。若其值超出整型值的范围则出错。2.将整型值转换为实型值时整数部分取整型值,小数部分的值为零。3.将双精度的实型数据转换为单精度的实型数据时截取其小数部分中前面的7位有效数字(十进制数),指数部分保持不变。超值错。,39,赋值运算中的类型转换(续),4.将整型数据转换为取值范围更大的整型数据时,对于有符号数,用其符号位的值向前扩展。对于无符号数,则用0向前扩展。,5.将整型数据转换为取值范围更小的整型数据时,按所需的位数从低位直接截取。超值错。,40,2.8逗号运算符与逗号表达式,逗号运算符(,)又称为顺序求值运算符由逗号运算符把若干个独立的表达式连接起来构成逗号表达式,逗号表达式的一般形式为:表达式1,表达式2,表达式3,表达式n求值顺序从左至右,最后一个表达式的值就是整个逗号表达式的值例如:x=2,y=x+4,z=x*y其值为12,41,2.9求字节数运算符(关键字),C语言提供的sizeof运算符可以得到一个变量或某种类型的量在计算机内存中所占的字节数。sizeof运算符有两种表达形式:(1)用于求得表达式计算结果所占内存的字节数。sizeof表达式例如,如果x为整型变量,则“sizeofx”的值是2,表明整型变量x在内存中所占的字节数为2。(2)用于求得某种数据类型的量所占内存的字节数。sizeof(类型名标识符)例如,sizeof(char)的值是1,表明字符型数据占1个字节;sizeof(double)的值是8,表明双精度数占8个字节。,42,第二章作业,教材P32习题二一、选择题:全做二、填空题:全做,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!