《C02数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C02数据类型、运算符与表达式.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章数据类型、运算符、表达式数据类型、运算符、表达式掌握数数据据及数数据据类类型型、算术运算符、赋值运算符、逗号运算符、自增(减)运算符及其上述运算符组成的表达式的基本概念,熟悉运算规则(运算符的优先级和结合性)、表达式计算中的类型转换规则了解各种类型数据在计算机中的存储形式教学目标教学目标基本要求:基本要求:能正确地将数学公式用C表达式表示12.1C语言的数据类型语言的数据类型22.2常量、变量与标识符在源程序中明确指明,在程序运行前就知道,而在源程序中明确指明,在程序运行前就知道,而且在程序运行过程中不会发生变化。且在程序运行过程中不会发生变化。常量类型:常量类型:整型常量,如:整
2、型常量,如:123123、-321-321、0 0实型常量,如:实型常量,如:12.312.3、2.02.0字符常量,如:字符常量,如:aa、bb、77、#符号常量,用户自己定义的符号常量,用户自己定义的,用标识符来代表用标识符来代表某个需要多次使用的常量,其值在其作用域内某个需要多次使用的常量,其值在其作用域内不能改变,也不能被赋值。不能改变,也不能被赋值。如:如:PIPI1.常量常量3例例2.1符号常量的使用符号常量的使用符号常量必须先定义,符号常量必须先定义,后使用。后使用。定义格式为:定义格式为:#definedefine 常量名常量名 字符串字符串习惯上用大写字母来习惯上用大写字母来
3、标识符号常量,用小标识符号常量,用小写字母来标识变量或写字母来标识变量或函数。函数。例例2.12.1:符号常量的使用:符号常量的使用#definedefine PI 3.14159 PI 3.14159voidvoid mainmain()()floatfloat r,l,area;r,l,area;r=3.5;r=3.5;l=2*PI*r;l=2*PI*r;area=PI*r*r;area=PI*r*r;printfprintf(l=%f,area=%fn,(l=%f,area=%fn,l,l,area);area);42.变量变量在程序运行过程中其值可以在一定范围内变化在程序运行过程中其值
4、可以在一定范围内变化在计算机的内存中占据一定的存储单元,在相应在计算机的内存中占据一定的存储单元,在相应的存储单元中存放着变量的值。的存储单元中存放着变量的值。变量名变量名:用来标识一个变量的标识符,也就是变:用来标识一个变量的标识符,也就是变量的名字。习惯上变量名用小写字母表示,以增量的名字。习惯上变量名用小写字母表示,以增加其直观性和可读性。加其直观性和可读性。变量值变量值:变量的值,即在变量的存储单元中存放:变量的值,即在变量的存储单元中存放的数值。的数值。CC语言规定在程序中所有要用到的变量在使用前语言规定在程序中所有要用到的变量在使用前必须先指定其类型,称为必须先指定其类型,称为变量
5、定义变量定义或或变量说明变量说明。53.标识符标识符CC语言中,标识符可以用作变量名、符号名、函数语言中,标识符可以用作变量名、符号名、函数名和后面将要学到的数组名、文件名以及一些具名和后面将要学到的数组名、文件名以及一些具有专门含义的名字。有专门含义的名字。合法的合法的标识符标识符标识符标识符只能由只能由字母字母字母字母、数字数字数字数字和和下划线下划线下划线下划线等三种等三种字符组成,并且字符组成,并且第一个字符必须为第一个字符必须为字母字母字母字母或或下划线下划线下划线下划线。在在CC语言的标识符中,语言的标识符中,大写字母大写字母和和小写字母小写字母是两个是两个不同不同的字符。的字符。
6、对于标识符的长度,一般的计算机系统规定取前对于标识符的长度,一般的计算机系统规定取前8 8个字符个字符有效,如果长于有效,如果长于8 8个字符,多余的字符将不个字符,多余的字符将不被识别。有些系统允许取较长的名字,读者在取被识别。有些系统允许取较长的名字,读者在取名时应当了解所用系统的具体规定。名时应当了解所用系统的具体规定。6标识符的分类标识符的分类C语言的标识符可以分为以下三类。关键字关键字 C语言规定的一批标识符,它们在程序中都代表着固定的含义,不能另作它用。如:if,while等。预定义标识符预定义标识符 在C语言中也都有特定的含义,如:sin。若另作它用,将使这些标识符失去系统规定的
7、原意。用户标识符用户标识符 用户根据需要定义,一般用来给变量、函数、数组或文件等命名。除要遵循标识符的命名规则外,还应注意做到“见名知义”,即选择的用户标识符应具有相关含义,以增加程序的可读性。注意:注意:如果用户标识符与关键字相同,程序在编译时将给出出错信息;如果与预定义标识符相同,系统并不报错,只是该预定义标识符将失去原定含义,代之以用户确认的含义,可能会引发一些运行时的错误。72.3整型数据整型数据整型数据整型数据包括包括整型常量整型常量和和整型变量整型变量。1.整型常量 (1)(1)十进制形式,如:十进制形式,如:100100,0 0,-100-100(2)(2)八进制形式,以数字八进
8、制形式,以数字0 0开头的八进制数开头的八进制数 ,如:,如:0157 0157,即,即(157)(157)8 8,其对应的十进制数值为:,其对应的十进制数值为:18182 2+58+581 1+78+780 0,即,即111111。八进制数中的数位符。八进制数中的数位符号只能有号只能有8 8 个,即个,即0 07 7。(3)(3)十六进制形式,以数字字母十六进制形式,以数字字母0 x0 x开头的十六进制数,开头的十六进制数,如:如:0 x1570 x157表示十六进制数表示十六进制数157 157,即,即(157)(157)1616,其对,其对应的十进制数值为:应的十进制数值为:116116
9、2 2+516+5161 1+716+7160 0,即,即343343。十六进制数中的数位符号为数字字符十六进制数中的数位符号为数字字符0 09 9和英文字和英文字母母A AF F等等1616个字符。个字符。C C语言自动按常量的范围决定其类型。同时允许用户在整语言自动按常量的范围决定其类型。同时允许用户在整型常量后面加上字符型常量后面加上字符L L(或(或l l)表示长整型数据)表示长整型数据 82.2.整型变量整型变量 整型变量整型变量可以分为可以分为基本整型基本整型、短整型短整型、长整型长整型和和无符号无符号整型整型四种。四种。C C语言规定在程序中所有要用到的语言规定在程序中所有要用到
10、的变量变量,在使用前必须先在使用前必须先指定其类型,指定其类型,即对变量进行即对变量进行“定义定义”或或“说明说明”。基本整型的变量用类型名关键字基本整型的变量用类型名关键字int int 进行定义,定义形进行定义,定义形式如下:式如下:intk;/*/*定义变量定义变量k k为整型变量为整型变量*/*/intx1,x2,x3;/*/*定义变量定义变量x1,x2x1,x2和和x3x3均为整型变量均为整型变量*/*/一一般般微微机机都都会会为为每每个个已已定定义义的的基基本本整整型型的的变变量量在在内内存存中中开开辟辟2 2个个连连续续的的存存储储单单元元,一一个个存存储储单单元元可可以以存存放
11、放8 8位位的的二二进进制制信信息息,一一个个基基本本整整型型的的变变量量中中具具有有1616位位的的二二进进制制信信息息,其其中中的的最最高高数数值值位位为为符符号号位位,它它所所能能表表示示的的数数值值范范围围为:为:-3276832767。9表2.1 ANSI标准定义的整数类型103.3.整型数据在内存中的存储形式整型数据在内存中的存储形式 在在计计算算机机中中,每每一一种种数数据据类类型型的的数数据据位位数数都都是是固固定定不不变变的的,所所以以每每一一种种数数据据类类型型都都有有它它的的取取值值范范围围,在在进进行行算算术术运运算算的的过过程程中中,如如果果运运算算结结果果超超出出了
12、了它它的的取取值值范范围围,就就会会得到一个错误的运算结果,这种情况称为溢出。得到一个错误的运算结果,这种情况称为溢出。标标准准C C语语言言的的基基本本整整型型的的数数据据都都是是十十六六位位的的,其其中中的的最最高高位位(即即最最左左边边的的一一位位)用用来来存存放放整整数数的的符符号号,若若是是正正整整数数,最最高高位位为为0 0,若若是是负负整整数数,最最高高位位为为1 1。因因此此,从从最最高高位位就就立立刻刻能能判判别别出出存存储储器器中中存存放放的的一一个个整整数数是是正正整整数数还还是是负负整整数。数。例例 如如 整整 数数 5 5,其其 在在 内内 存存 中中 的的 二二 进
13、进 制制 码码 为为:00000000000000000000000001010101。正整数的这种存储形式正整数的这种存储形式,称为称为“原码形式原码形式”的机器数。的机器数。11 所所谓谓原原码码是是指指一一个个数数的的最最高高位位为为符符号号位位,其其余余的的数数位位均均为为数数值值位位,数数值值位位的的值值即即为为该该数数所所对对应应的的二二进进制制数数的的值值。如十进制数如十进制数+5+5的原码的原码为:为:0 0000000000000101000000000000101;十进制数十进制数-5-5的原码的原码为:为:1 1000000000000101000000000000101
14、。计计算算机机中中的的数数都都是是用用补补码码表表示示的的机机器器数数。一一个个正正数数的的补补码码和和其其原原码码的的形形式式完完全全相相同同;而而一一个个负负数数的的补补码码也也是是在在其其原码的基础上转换出来的。原码的基础上转换出来的。转换方法分两步进行:转换方法分两步进行:(2)(2)在所求得的反码的数值部分的最低位再加上在所求得的反码的数值部分的最低位再加上1 1,即,即得到该数的补码。得到该数的补码。计算机中的数都是用计算机中的数都是用补码补码表示的表示的12 如如果果要要把把内内存存中中以以补补码码形形式式存存放放的的二二进进制制数数转转换换成成十十进进制制的的整整数数,也也要要
15、先先将将其其补补码码转转换换成成原原码码,转转换换方方法法同同上上,然然后后再将原码转换成十进制的整数。再将原码转换成十进制的整数。-3276832767-3276832767。读者可按以上步骤进行换算。读者可按以上步骤进行换算。对对于于无无符符号号的的整整数数,其其中中的的最最高高位位不不再再用用来来表表示示符符号号,1616个个二二进进制制位位全全部部用用来来存存放放数数值值,当当其其1616个个二二进进制制位位中中全全部部都都是是0 0时时,其其对对应应的的十十进进制制数数值值为为0 0;当当其其1616个个二二进进制制位位中中全全部部都是都是1 1时,其对应的十进制数值为时,其对应的十
16、进制数值为6553565535。补码转换成原码补码转换成原码134.4.整型数据的溢出整型数据的溢出 short short intint型型数数据据在在内内存存占占2 2个个字字节节,则则它它的的最最大大允允许许值为值为3276732767,如果再加上,如果再加上1 1,就会发生,就会发生“溢出溢出”。例例2.2整型数据的溢出。#include void main()short int a,b;a=32767;b=a+1;printf(%hd,%hdn,a,b);运 行 结 果 为:32767,32768a:0111 1111 1111 1111b:1000 0000 0000 000014
17、5.5.整型常量的类型整型常量的类型 在在程程序序中中出出现现一一个个整整型型常常量量,也也应应该该是是上上述述6 6种种类类别别当当中的一种,中的一种,C C语言会自动按以下语言会自动按以下5 5种情况分别进行处理。种情况分别进行处理。(1 1)数值在数值在-3276832767的范围内的常量是的范围内的常量是intint型型。(2 2)超超过过上上述述范范围围,但但在在-21474836482147483647的的范范围内,则认为它是围内,则认为它是long intlong int型型。再超则当。再超则当实型实型处理处理。(3 3)标准)标准C C语言的语言的intint与与short i
18、ntshort int等同。等同。(4 4)整整型型常常量量没没有有无无符符号号的的类类型型。但但整整型型常常数数可可以以直直接接赋赋值值给给无无符符号号类类型型的的整整型型变变量量,只只要要常常数数的的数数值值不不超超过过无符号整型变量的取值范围即可。无符号整型变量的取值范围即可。(5 5)C C语语言言允允许许在在一一个个整整型型常常数数后后面面加加上上字字符符L L(或或l l)表表示示一一个个长长整整型型的的数数据据,如如100L100L为为十十进进制制长长整整型型常常量量,0X100L0X100L为十六进制长整型常量。为十六进制长整型常量。152.4实型数据实型数据1.实型常量实型常
19、量十进制小数形式十进制小数形式,如:,如:100.0、0.5、-10.8等,注等,注意实型常量中必须要有一个小数点意实型常量中必须要有一个小数点 指数形式指数形式,如:,如:100e5表示表示100105,注意字母,注意字母E(或或e)之前必须有数字,且之前必须有数字,且E(或或e)后面的指数后面的指数必须为整数,如必须为整数,如E5、1e等都是不合法的指数形式等都是不合法的指数形式规范化的指数形式规范化的指数形式 字母字母E E(或或e e)之前的小数部分,之前的小数部分,其小数点之前必须有且只能有一位非零的数值。其小数点之前必须有且只能有一位非零的数值。如:如:3.587593.58759
20、E2 E2 162.实型变量及其定义实型变量及其定义 C C语语言言中中的的实实型型变变量量分分为为单单精精度度型型和和双双精精度度型型两两种种,分分别别用用保保留留关关键键字字float和和double进行定义。进行定义。例如:例如:float x x,y y;/*/*说明变量说明变量x x,y y为单精度实型为单精度实型*/*/double z z;/*/*说明变量说明变量z z为双精度实型为双精度实型*/*/17表表2.2实型数据实型数据15161516(10(10-308-3081010308308)8 8doubledouble双精度双精度双精度双精度6767(10(10-38-38
21、10103838)4 4floatfloat单精度单精度单精度单精度有效数有效数有效数有效数字位数字位数字位数字位数数值范围数值范围数值范围数值范围存储存储存储存储空间空间空间空间类型名类型名类型名类型名类型类型类型类型183.3.实型数据在内存中的存储形式实型数据在内存中的存储形式 实实型型数数据据在在内内存存中中是是按按照照规规范范化化的的指指数数形形式式来来存存储储的的,例如:例如:3583580.358x100.358x103 3。如图如图2.22.2所示。所示。由由于于实实型型数数据据在在内内存存中中的的存存储储位位数数是是固固定定的的,也也是是有有限限的的,所所以以实实型型数数据据
22、的的精精度度不不是是很很高高,所所能能表表示示的的数数据据范范围围也也是是有有限限的的。而而且且由由于于实实型型数数据据的的存存储储形形式式比比较较复复杂,计算机在进行算术运算时的处理速度也比较慢。杂,计算机在进行算术运算时的处理速度也比较慢。194.4.实型数据的误差实型数据的误差由由于于用用来来存存储储实实型型数数据据的的存存储储单单元元的的位位数数有有限限,所所以以有有效效位位数数以以外外的的其其它它数数字字位位被被舍舍去去了了。这这种种误误差差叫叫做做存存储储误误差差。此此外外,在在将将十十进进制制数数转转换换成成二二进进制制数数时时,有有时时也也会会产产生生误误差差,即即转换误差转换
23、误差。void void mainmain()()float float x1,x2;x1,x2;x1=288.4;x1=288.4;/*/*有效位数不多,但会产生转换误差有效位数不多,但会产生转换误差*/*/x2=1234567891.0;x2=1234567891.0;/*/*有效位数太多,会产生存储误差有效位数太多,会产生存储误差*/*/printfprintf(x1=%fn,x1);(x1=%fn,x1);printfprintf(x2=%fn,x2);(x2=%fn,x2);程序的运行结果为:程序的运行结果为:x1=288.399994x2=1234567936.000000例例2.
24、3 2.3 实型数据的误差实型数据的误差 205.实型常量的类型实型常量的类型 在在大大多多数数C C编编译译系系统统中中,将将实实型型常常量量都都作作为为双双精度型来处理。精度型来处理。例如:例如:floata;doubleb;a=111111.111;/*最后两位小数不起作用最后两位小数不起作用*/*/b=111111.111;212.5字符型数据字符型数据类型名类型名 char字符型数据存储字符型数据存储ASCII字符集中的一个字符,占字符集中的一个字符,占用用1个字节个字节的存储单元,实际存储的是该字符的的存储单元,实际存储的是该字符的ASCII值值。字符型数据字符型数据的存储形式与的
25、存储形式与整数整数的存储形式的存储形式类似类似,所以在所以在C C语言中可以把字符型的数据当作整型数语言中可以把字符型的数据当作整型数使用,其数值范围为:使用,其数值范围为:-128-128127可可以以定定义义无无符符号号的的字字符符变变量量,其其数数值值范范围围为为:0255,定义形式如下:,定义形式如下:unsignedunsigned char char c;c;/*/*说明变量说明变量c c为无符号字符型变量为无符号字符型变量*/*/221.字符常量字符常量字符常量字符常量是用单引号是用单引号(即撇号即撇号)括起来的单个字符,如:括起来的单个字符,如:A、6转义字符转义字符 就是一个
26、反斜杠字符,后跟另一个普通字符就是一个反斜杠字符,后跟另一个普通字符或若干个数字字符,把它们作为一个整体,用来代替某或若干个数字字符,把它们作为一个整体,用来代替某一个特殊的字符,例如一个特殊的字符,例如n代表一个代表一个“换行换行”符符反斜杠字符反斜杠字符的含义已经被的含义已经被转换转换为为“转义字符转义字符”的的标志字标志字符符,如果要在程序中用到反斜杠字符本身,则不能直接,如果要在程序中用到反斜杠字符本身,则不能直接用用,而应该用,而应该用,类似的还有类似的还有和和。ddd 或或 xhh是一个转义字符的通用形式,可以用是一个转义字符的通用形式,可以用它表示它表示ASCII码字符集里的每一
27、个字符。其中的三位八码字符集里的每一个字符。其中的三位八进制常量或两位十六进制常量为某个字符在进制常量或两位十六进制常量为某个字符在ASCII码字码字符集里的编号,即符集里的编号,即ASCII码值码值 232.字符变量字符变量 字字符符变变量量用用来来存存放放字字符符常常量量,其其取取值值范范围围为为ASCIIASCII码码字字符符集集中中的的256256个个字字符符。每每个个字字符符变变量量在在内内存存中中只只占占用用1 1个个字字节节的的存存储储空空间间,只只能能用用来存放一个字符常量。来存放一个字符常量。字符变量的定义形式如下:字符变量的定义形式如下:charc1,c2;c1=a;c2=
28、n;243.字符型数据在内存中的存储形式字符型数据在内存中的存储形式将将一一个个字字符符型型的的数数据据存存放放到到一一个个字字符符变变量量中中,实实际际上上是是将将该该字字符符的的ASCIIASCII码码值值存存放放到到字字符符变变量量所占用的内存单元中。所占用的内存单元中。例例如如:字字符符变变量量c1c1的的值值为为a a,因因为为a a的的ASCIIASCII码码值值为为9797,所所以以变变量量c1c1的的内内存存单单元元中中存存放放着整数值着整数值9797,其二进制为,其二进制为0110000101100001。25例例2.4字符型的数据当成整型数据来使用字符型的数据当成整型数据来
29、使用由由于于在在内内存存中中存存储储的的字字符符型型数数据据就就是是与与该该字字符符的的ASCIIASCII码码值值相相等等的的整整数数值值,也也即即字字符符型型数数据据的的存存储储形形式式与与整整数数的的存存储储形形式式类类似似,所所以以,在在C C语语言言中中可可以以把把字字符符型的数据当整型数据来使用。型的数据当整型数据来使用。例例2.42.4 字符型的数据可以当成整数来使用字符型的数据可以当成整数来使用#include include void void mainmain()char char ch1,ch2,ch3,ch4,ch5;ch1,ch2,ch3,ch4,ch5;ch1=ch
30、1=a a;ch2=ch2=b b;ch3=32;ch3=32;ch4=ch1-ch3;ch4=ch1-ch3;ch5=ch2-ch3 ch5=ch2-ch3;printfprintf(%c,%c%c,%c ,ch4,ch5);,ch4,ch5);程序的运行结果为:程序的运行结果为:A,B264.字符串常量字符串常量C语言中的字符串常量是用一对双引号括起来的语言中的字符串常量是用一对双引号括起来的字符序列。字符串常量中的字符序列可以由任意字符序列。字符串常量中的字符序列可以由任意多个字符组成,如:多个字符组成,如:a、ab、250、good morning 字符串字符串称为空串,由两个连续的双
31、引号组成称为空串,由两个连续的双引号组成 C C语言规定在每一个字符串的结尾都加上一个字语言规定在每一个字符串的结尾都加上一个字符符0,作为字符串的结束标志,作为字符串的结束标志应注意空串与空格组成的字符串、字符常量与单应注意空串与空格组成的字符串、字符常量与单个字符组成的字符串之间的差别个字符组成的字符串之间的差别 27例例2.5 2.5 字符串常量字符串常量voidmain()printf(%s,CHINA);程序的运行结果为:程序的运行结果为:CHINA程序中字符串常量程序中字符串常量 CHINA 在内存中的存储形式为:在内存中的存储形式为:282.6算术运算符和算术表达式算术运算符和算
32、术表达式1.基本算术运算符基本算术运算符有:有:、*、/、%注意事项注意事项两个整型数据相除的结果只能为整型数值,如两个整型数据相除的结果只能为整型数值,如72的的结果为结果为3“+”或或“-”用作单目运算符时只能有一个运算量,用作单目运算符时只能有一个运算量,如如x=-5,则则+x的值还是的值还是-5,而,而-x的值为的值为+5。求余运算只能在两个整型数据之间进行,如求余运算只能在两个整型数据之间进行,如9%5的值的值为为4,而,而9.5%3为非法的运算;当运算量为负数时,为非法的运算;当运算量为负数时,所得结果的符号未作明确的规定。但所得结果的符号未作明确的规定。但TURBO C系统系统规
33、定了余数的符号与被除数相同。规定了余数的符号与被除数相同。292.算术表达式算术表达式用算术运算符和圆括号将函数和运算对象(如常用算术运算符和圆括号将函数和运算对象(如常量、变量等)按一定的规则连接起来就可以构成量、变量等)按一定的规则连接起来就可以构成一个算术表达式,如:一个算术表达式,如:(ab)*c5.0、x*y2*sin(z)等都是算术表达式等都是算术表达式 表达式都有一个值,即运算结果。表达式都有一个值,即运算结果。应该注意表达式中运算符的优先级和结合性应该注意表达式中运算符的优先级和结合性优先级用于决定运算中的运算顺序,即有多个运算符优先级用于决定运算中的运算顺序,即有多个运算符出
34、现时,哪一个先计算,哪一个后计算。出现时,哪一个先计算,哪一个后计算。结合性则决定同一优先级的运算符之间的运算顺序,结合性则决定同一优先级的运算符之间的运算顺序,即是先左后右还是先右后左。即是先左后右还是先右后左。P2P29595附录附录C C 303.算术运算符的优先级和结合性算术运算符的优先级和结合性(1 1)算术运算符的优先级)算术运算符的优先级 “优先级优先级”用于决定运算过程中的运算顺序,即有多用于决定运算过程中的运算顺序,即有多个运算符出现时,哪一个先计算,哪一个后计算。个运算符出现时,哪一个先计算,哪一个后计算。(2 2)算术运算符的结合性)算术运算符的结合性 “结合性结合性”则
35、决定同一优先级的运算符之间的运算顺则决定同一优先级的运算符之间的运算顺序,即是先左后右还是先右后左。参见附录序,即是先左后右还是先右后左。参见附录C C 314.算术运算中的类型转换算术运算中的类型转换在在C语言中要求参加运算的两个运算量是同一数语言中要求参加运算的两个运算量是同一数据类型,而运算结果也是该数据类型。据类型,而运算结果也是该数据类型。对数据类型不一致的两个运算量,系统会进行数对数据类型不一致的两个运算量,系统会进行数据类型转换,然后才进行相应的算术运算,运算据类型转换,然后才进行相应的算术运算,运算的结果为其中高级别类型的数据。的结果为其中高级别类型的数据。高高double(f
36、loatconst)floatlong(unsignedlong)低低int(unsignedint)shortint、char图图2.4算术运算中的类型转换算术运算中的类型转换325.强制类型转换运算符强制类型转换运算符当当自自动动类类型型转转换换不不能能达达到到目目的的时时,可可以以使使用用强强制制类类型型转转换换运运算算符符。强强制制类类型型转转换换运运算算符符就就是是用用一一对括号括起来的类型名标识符,其一般格式为:对括号括起来的类型名标识符,其一般格式为:(类型名标识符类型名标识符)(表达式表达式)例例如如:假假设设x x为为floatfloat类类型型,则则表表达达式式“x%3”x
37、%3”是是不不合合法法的的,因因为为%运运算算符符要要求求其其两两侧侧的的数数据据都都必必须须是是整整型型数数据据。可可以以使使用用表表达达式式“(“(intint)x x)%3”%3”达达到到求求余余数数的的目目的的,即即先先将将实实型型变变量量x x强强制制转转换换为为整型值,然后再进行取余运算。整型值,然后再进行取余运算。332.7赋值运算符赋值运算符与与赋值表达式赋值表达式 变量的值在程序的运行过程中能够发生变化主要变量的值在程序的运行过程中能够发生变化主要是通过对变量进行赋值来完成的。如果在程序中没是通过对变量进行赋值来完成的。如果在程序中没有赋值操作,则变量的值也就不会发生变化。有
38、赋值操作,则变量的值也就不会发生变化。1.1.赋值运算符赋值运算符()的)的作用作用是把一个数据或表达式是把一个数据或表达式的值赋给一个变量。的值赋给一个变量。例如:例如:x=3x=3赋值运算符的赋值运算符的左边只能是变量左边只能是变量,不允许是算术,不允许是算术表达式或常量。表达式或常量。例如:例如:x+1=3x+1=3 赋值运算符赋值运算符与与数学中的数学中的等号等号不同不同,赋值运算符,赋值运算符求解以后能够得到一个运算结果。求解以后能够得到一个运算结果。342.赋值表达式赋值表达式由赋值运算符将一个变量和一个表达式连接起来由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。
39、的式子称为赋值表达式。赋值表达式的一般形式为:赋值表达式的一般形式为:变量变量=表达式表达式 例如:例如:x=3*5x=3*5执行过程执行过程:先先将赋值运算符右边表达式的值求出将赋值运算符右边表达式的值求出来,来,然后然后将该值赋给左边的变量,将该值赋给左边的变量,被赋值变量被赋值变量的的值值就是就是整个赋值表达式的整个赋值表达式的值值。353.复合的赋值运算符复合的赋值运算符复合的赋值运算符是在赋值运算符的前面加上其复合的赋值运算符是在赋值运算符的前面加上其复合的赋值运算符是在赋值运算符的前面加上其复合的赋值运算符是在赋值运算符的前面加上其它的运算符组合而成的新运算符。它的运算符组合而成的
40、新运算符。它的运算符组合而成的新运算符。它的运算符组合而成的新运算符。1010种复合赋值运算符分别是:种复合赋值运算符分别是:种复合赋值运算符分别是:种复合赋值运算符分别是:*%&!例如:例如:x+=3 x+=3 等价于等价于 x=x+3x=x+3。x%=3 x%=3 等价于等价于 x=x%3x=x%3。注意:这些运算符都是由多个字符组合而成的,注意:这些运算符都是由多个字符组合而成的,其字符之间不允许有空格。其字符之间不允许有空格。364.自加、自减运算符自加、自减运算符自加(自加(+)自减()自减(-)运算符的作用是使变量的)运算符的作用是使变量的值自动加(减)值自动加(减)1。自加、自减
41、运算符是单目运算符。自加、自减运算符是单目运算符。执行过程执行过程变量在自加自减运算符之前(变量在自加自减运算符之前(k+k+或或k-)k-)时,先使用时,先使用变量的值,然后自加或自减。变量的值,然后自加或自减。如:如:k=3;x=5+k+;k=3;x=5+k+;结果结果y y的值为的值为8 8,k k的值为的值为4 4。变量在自加自减运算符之后(变量在自加自减运算符之后(+k+k或或-k)-k)时,先自加时,先自加或自减,然后使用变量的值。或自减,然后使用变量的值。如:如:k=3;x=+k+5;k=3;x=+k+5;结果结果y y的值为的值为9 9,k k的值为的值为4 4。注意:注意:自
42、增自减运算只能针对简单变量而言。自增自减运算只能针对简单变量而言。375.赋值运算中的类型转换赋值运算中的类型转换 系统自动将赋值运算符右边的数据类型系统自动将赋值运算符右边的数据类型转换成赋值运算符左边变量的类型。转换成赋值运算符左边变量的类型。1.1.将实型数据转换为整型值时直接舍弃实数的小将实型数据转换为整型值时直接舍弃实数的小数部分。数部分。若其值超出整型值的范围则出错。若其值超出整型值的范围则出错。2.2.将整型值转换为实型值时整数部分取整型值,将整型值转换为实型值时整数部分取整型值,小数部分的值为零。小数部分的值为零。3.3.将双精度的实型数据转换为单精度的实型数据将双精度的实型数
43、据转换为单精度的实型数据时截取其小数部分中前面的时截取其小数部分中前面的7 7位有效数字(十进位有效数字(十进制数),指数部分保持不变。制数),指数部分保持不变。超值错。超值错。38赋值运算中的类型转换赋值运算中的类型转换(续续)4.4.将整型数据转换为取值范围更大的整型数据时,对于有符将整型数据转换为取值范围更大的整型数据时,对于有符号数,用其号数,用其符号位的值向前扩展符号位的值向前扩展。对于无符号数,则。对于无符号数,则用用0 0向前扩展向前扩展。5.5.将整型数据转换为取值范围更小的整型数据时,按所需将整型数据转换为取值范围更小的整型数据时,按所需的位数的位数从低位直接截取从低位直接截
44、取。超值错。超值错。392.8 2.8 逗号运算符与逗号表达式逗号运算符与逗号表达式逗号运算符逗号运算符(,)又称为顺序求值运算符)又称为顺序求值运算符由逗号运算符把若干个独立的表达式连接由逗号运算符把若干个独立的表达式连接起来构成逗号表达式,逗号表达式的一般起来构成逗号表达式,逗号表达式的一般形式为:形式为:表达式表达式1,表达式表达式2,表达式表达式3,表达式表达式n求值顺序求值顺序 从左至右,最后一个表达式的从左至右,最后一个表达式的值就是整个逗号表达式的值值就是整个逗号表达式的值例如:例如:x=2,y=x+4,z=x*y x=2,y=x+4,z=x*y 其值为其值为1212402.9
45、2.9 求字节数运算符求字节数运算符(关键字关键字)C语言提供的语言提供的sizeof运算符可以得到一个变量或某种类型运算符可以得到一个变量或某种类型的量在计算机内存中所占的字节数。的量在计算机内存中所占的字节数。sizeof运算符运算符有两种表达形式:有两种表达形式:(1)用于求得表达式计算结果所占内存的字节数。)用于求得表达式计算结果所占内存的字节数。sizeof表达式表达式例例如如,如如果果x为为整整型型变变量量,则则“sizeofx”的的值值是是2,表表明明整型变量整型变量x在内存中所占的字节数为在内存中所占的字节数为2。(2)用于求得某种数据类型的量所占内存的字节数。)用于求得某种数据类型的量所占内存的字节数。sizeof(类型名标识符类型名标识符)例如,例如,sizeof(char)的值是的值是1,表明字符型数据占,表明字符型数据占1个字节;个字节;sizeof(double)的值是的值是8,表明双精度数占,表明双精度数占8个字节。个字节。41第二章第二章作业作业教材P32 习题二 一、选择题:全做二、填空题:全做42
限制150内