《【教学课件】第三章数据类型、运算符和表达式.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第三章数据类型、运算符和表达式.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 数据类型、运算符和表达式数据类型、运算符和表达式13.1C3.1C语言数据言数据类型型3.1.1 C语言数据类型语言数据类型 整型 字符型 实型(浮点型)枚举类型 数组 结构体类型 共用体类型 单精度型双精度型基本类型构造类型指针类型空类型数据类型23.1 C的数据类型的数据类型整型字符型实型(浮点型)枚举类型单精度型双精度型数组类型结构体类型共用体类型构造类型基本类型指针类型空类型数据类型33.23.2常量与常量与变量量常量常量1.定义:定义:在程序执行期间,其值不可改变的量称为常量在程序执行期间,其值不可改变的量称为常量2.类型:类型:数值常量数值常量 例如:例如:10,3,
2、2.68等等符号常量符号常量 即用一个符号代表一个常量即用一个符号代表一个常量 例如例如:#define PI 3.1415926 main()float r,l,s;r=2;l=2*PI*r;s=PI*r*r;printf(“l=%d,s=%d”,l,s);4说明:说明:符号常量必须符号常量必须先定义先定义后才能用它表示一后才能用它表示一个数值。个数值。符号常量的值在其作用域内不能改变,符号常量的值在其作用域内不能改变,也不能再被赋值。也不能再被赋值。符号常量名习惯用符号常量名习惯用大写大写字母表示。字母表示。5变量变量1.定义:定义:程序执行期间值可以改变的量。2.命名规则命名规则:变量名
3、由标识符表示,只能由字母字母、数字数字和下划线下划线三种字符组成,且第一个字符必须为字母字母或下划线下划线。例如:下列标识符中,不合法的变量名有:M.D.John ,12%gf ,1add,_ce36 ,age&5thclass,lotus-1-2-3,cd*ef,float3.变量要变量要“先定义,后使用先定义,后使用”定义格式:定义格式:类型型说明符明符标识符符1,1,标识符符n n 例如:int x,y,z;(每个变量分配 2个 字节)float a,b,c,d;(每个变量分配 4个 字节)3a6在在C语言中,变量必须强制定义,其目的:语言中,变量必须强制定义,其目的:1、凡未被事先定义
4、的,不作为变量名。2、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。3、指定每一个变量为一确定的类型,在编译时据此检查 该变量所进行的运算是否合法。例如:如果变量 a,b 是整型类型,则可以进行求余运算:a%b 而两个实数类型的变量求余是不允许的。7*选变量名时,要做到“见名知意”例如:name st_age xm nl class sum*大小写字母是两个不同的字符,C变量名习惯 用小写小写字母表示。*建议变量名的长度不要超过8个字符。请请 注注 意意83.33.3整型数据整型数据整型常量的表示法整型常量的表示法十进制整数十进制整数:由数字(0-9)和正负号表示 例如
5、:123、-456、0 等八进制整数八进制整数:以0开头数是八进制数 例如:0123 即(123)8=(83)10 (123)8=182+2 81+3 80=(83)10十六进制整数十六进制整数:以0 x或0X开头,例如:0 x123 即(123)16=(291)10 -0 x12 即(-12)16=(-18 )1093.3.2 整型变量整型变量1.整型数据在内存中的存放形式(补码表示法:便于加减运算)整型数据在内存中的存放形式(补码表示法:便于加减运算)2.int i;3.i=10;4.5.10=(1010)2 2102522210余数0101首位0 0 0 0 0 0 0 0 0 0 0
6、0 1 0 1 00 0 0 0 0 0 0 0 0 0 0 0 1 0 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 010的原码取反取反后再加1,得-10的补码10的表示法的表示法,正数的补码等于它的原码正数的补码等于它的原码-10102整型变量的分类整型变量的分类 基本型:以intint表示短整型:以shortintshortint或shortshort表示1.类型长整型:以longintlongint或longlong表示(123l、123L)无符号基本型(unsignedintunsignedint)
7、无符号型无符号短整型(unsignedshortunsignedshort)无符号长整型(unsignedlongunsignedlong)(-3276832767)一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。int a;/*变量a 的数值范围:-3276832768 */unsigned int b;/*变量b的数值范围:065535 */11 整整型变量的字长型变量的字长short型型 字长字长16位(位(2个字节)个字节)。long 型型 字长字长32位(位(4个字节)个字节)。int 型型 随随编编译译程程序序而而定定(可可以以是是2个个字字节节,也也可
8、可以以是是4个字节)个字节)C要求要求 long型数据长度不短于型数据长度不短于int型,型,short型不长于型不长于int型。型。(short=int2 逻辑表达式,如:逻辑表达式,如:35&a=b 条件表达式,如:条件表达式,如:ab?a:b 逗号表达式,如:逗号表达式,如:a=3,b=4,c=5303.83.8算算术运算符和算运算符和算术表达式表达式1、基本的算术运算符、基本的算术运算符:+-*/%说明:()上述运算符均为双目运算符(即有两个操作数)(2)在“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=(3)“”要求两侧均为整数,“”运算不能用于float
9、和 double型数据例如:2312 2、算、算术表达式和运算符的表达式和运算符的优先先级与与结合性合性(1)算术表达式:用算术运算符和括号将操作数连接起来的,符合语法规则的式子。例如:a+b+a*b/c+2.8(2)优先级:优先级:高于(3)结合性结合性:“自左至右的结合方向”例如:a-b+c3 3、强制制类型型转换形式:(类型名)(表达式)例如:(double)(a+b)32说明:()表达式应用括号括起例如:(int)(x+y);若要得到x/2的小数部分,应写为:(float)x/2 还是 float(x/2)()在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。例如:
10、float x=8.6 ;int y;y=(int)x;33请看下面程序段请看下面程序段:main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);输出结果输出结果:x=3.600000,i=3注意:强制类型转换后并不改变原来变量的类型注意:强制类型转换后并不改变原来变量的类型344、自增、自减运算符(、)、自增、自减运算符(、)作用:作用:使变量的值增或减,如:i,i (使用之前,先使i的值加(减)1)i,i (使用之后,使i的值加(减)1)+i 先执行i=i+1,再使用i的值 i+先使用i的值,再执行i=i+1例如:int a=1
11、,b;b=+a ;b=a+;举例:举例:int j,i=3;j=+i;/*j的值为的值为4,i为为4*/j=i+;/*j的值为的值为4,然后然后i的值变为的值变为5*/j=-i+;/*j的值的值-5,然后,然后i的值变为的值变为6*/35说明:(1)为单目运算符(2)+、只能用于变量,而不能用于常量或表达式。例如:,(,(x+y)+,+a,b+中合法的为:(3)自增、自减运算符为右结合性(即自右至左)。例如:a+(a+)4、自增、自减运算符(、)、自增、自减运算符(、)错误的结合(错误的结合(-a)+36练习题练习题1.设a=2,则执行语句 k=+a+a+后的 k值为多少?(k=6,a=4)2
12、.a=(i+)+(i+)+(i+)?3.printf(“%d,%d”,i,i+)?请避免这种写法373.93.9赋值运算符和运算符和赋值表达式表达式1、赋值运算符(赋值运算符(=)形式:变量名=常量或表达式作用:将右边常量或表达式的值赋给左边的变量例如:b=c+d 要求要求:如果表达式类型与左边的变量的类型不:如果表达式类型与左边的变量的类型不 匹配,自动进行类型转换。匹配,自动进行类型转换。382、类型转换的原则、类型转换的原则(1)将实型数据赋给整型变量时将实型数据赋给整型变量时,舍弃实数的小数部分舍弃实数的小数部分 如:若如:若a为为int型变量,型变量,执行执行a=3.56后,则后,则
13、a的值的值3 (2)将整型数据赋给实型数据时将整型数据赋给实型数据时,数值不变数值不变,但以浮点但以浮点 形式存储到变量中。形式存储到变量中。如:若如:若b为为float型变量,执行型变量,执行b=35后,则后,则b为为35.00000(3)整型数据赋给字符型变量时整型数据赋给字符型变量时,只将低只将低8位原封位原封不动地送到字符变量中(即截断)。不动地送到字符变量中(即截断)。0010 00010000 0001 0010 0001如:i=289c=33 c=!39(4)字符型数据赋给整型变量时字符型数据赋给整型变量时,将字符数据将字符数据(8位位)放到整型变量低放到整型变量低8位中。高位中
14、。高8位则需要依据位则需要依据“符符号扩展号扩展”来决定。来决定。例1(无符号字符数据赋给整型变量)unsigned char c;int i;c=254;i=c;1111 1110c=254i=254 0000 0000 1111 1110例2(Turbo C 系统把字符处理为带符号的)char c;int i;c=254;i=c;/*变量c 以整数形式输出为-2 */1111 1110c=254i=-2 1111 1111 1111 111040(5)将带符号数据赋给长度相同的无符号型变量,将带符号数据赋给长度相同的无符号型变量,原样照赋。原样照赋。(6)double 赋给赋给 float
15、 时,截取前面时,截取前面7位有效数字。位有效数字。41例3:(带符号int型数据赋给long型变量)int a;long b;a=254;b=a;0000 0000 0000 0000 0000 0000 1111 1110a=254 0000 0000 1111 1110b=254 例4:(带符号int型数据赋给long型变量)int a;long b;a=-2;b=a;1111 1111 1111 1111 1000 0000 1111 1110a=-2 1111 1111 1111 1110b=-2 42例5:(无符号int型数据赋给long型变量)unsigned int a;lon
16、g b;a=65534;b=a;0000 0000 0000 0000 1111 1111 1111 1110a=65534 1111 1111 1111 1110b=65534 例6:(有符号数据赋给无符号变量)int a;unsigned int b;a=-2;b=a;1111 1111 1111 1110a=-2 1111 1111 1111 1110b=65534 43P66(3.11)写出下面赋值的结果。格中写了数值的是要将它赋给其它类型的变量,将所有空格添上赋值后的数值。int 9 9 100 76 53 68 42 -1char c d L 5 D *X unsigned int
17、 99 100 76 53 68 42 65535float 99.000000 100.000000 76.000000 53.65 68.000000 42.000000 65535.000000long int 99 100 76 53 68 42 65535443、复合赋值运算符、复合赋值运算符复合赋值运算符:在赋值符“=”之前加上其它运算符共有10种复合赋值运算符 +=,=,&,=,|=45例如:a+=3 a=a+3 x*=y+3 x=x*(y+3)4、赋值表达式赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子式子。形式:变量变量=表达式表达式说明:赋值表达式的值为被
18、赋值的变量的值。赋值表达式的值为被赋值的变量的值。例如:a=b=c=6 a=(b=4)+(c=6)a=(b=4)*(c=6)46练习:写出顺序执行下列表达式运算后的x值:1.x=a=b=10 2.x=25%(c=3)X=10X=1赋值表达式中可以包含复合赋值运算符 例如:若a=12,计算表达式a+=a=a*a运算后a的值 第一步:aa*a a=a-a*a=12-12*12=-132 第二步:a+=-132 a=a+(-132)=-264473.103.10逗号运算符和逗号表达式逗号运算符和逗号表达式1.逗号运算符逗号运算符:即“,”优先级优先级:为所有运算符中级别最低的。2.逗号表达式逗号表达式 形式:表达式表达式1 1,表达式,表达式2 2,表达式,表达式n 求解过程:顺次求解表达式1,表达式2最后求解表达式n。逗号表达式的值为表达式表达式n的的值值。例如:a=3*5,a*4 a=3*5,a*4,a+5 x=(a=4%3,a+1,a*10)60201048