1、第第2 2章章 C C语言的基本数据类型与表达式语言的基本数据类型与表达式2.1 C2.1 C语言的基本数据类型语言的基本数据类型 2.2 2.2 常量与变量常量与变量2.3 2.3 运算符与表达式运算符与表达式 2.4 2.4 数据类型转换数据类型转换2.1 C2.1 C语言的基本数据类型语言的基本数据类型为什么要设置数据类型?为什么要设置数据类型?数据类型决定:数据类型决定:1.1.数据占内存字节数数据占内存字节数2.2.数据取值范围数据取值范围3.3.其上可进行的操作其上可进行的操作 字符型字符型(charchar)整型整型 (short,int,long,unsignedshort,i
2、nt,long,unsigned)基本类型基本类型 单精度型单精度型(floatfloat)实型实型 双精度型双精度型(doubledouble)枚举类型枚举类型(enumenum)数据类型数据类型 数组类型数组类型()构造类型构造类型 结构体类型结构体类型(structstruct)共用体类型共用体类型(unionunion)指针类型指针类型(*)空类型空类型(voidvoid)一、数据类型概述一、数据类型概述二、整型二、整型(采用定点整数的存储格式,只能表示纯整数采用定点整数的存储格式,只能表示纯整数)1 1、整型常量:整型常量:(1)(1)十进制形式十进制形式:与数学上的整数表示相同;与
3、数学上的整数表示相同;例如例如:12=1:12=1*10101 1+2+2*10100 0=12(=12(十进制十进制)(2)(2)八进制形式八进制形式:在数码前加数字在数码前加数字0 0;例如例如:012=1:012=1*8 81 1+2+2*8 80 0=10(=10(十进制十进制)(3)(3)十六进制形式十六进制形式:在数码前加在数码前加0X(0X(数字数字0 0和字母和字母X X)。例如例如:0 x12=1:0 x12=1*16161 1+2+2*16160 0=18(=18(十进制十进制)0 x1fc=1 0 x1fc=1*16162 2+15+15*16161 1+11+11*16
4、160 0=507(=507(十进制十进制)八进制的数码范围为八进制的数码范围为0-70-7,十六进制的数码除了数字,十六进制的数码除了数字0-90-9外外,还使用英文字母还使用英文字母a-f(a-f(或或A-F)A-F)表示表示10-1510-15。2 2、整型变量的分类:、整型变量的分类:根据数据所占的存储长度的不同分为根据数据所占的存储长度的不同分为:intint整型、整型、short intshort int短整型、短整型、long intlong int长整型;长整型;同样存储长度的数据又分:同样存储长度的数据又分:unsignedunsigned无符号、无符号、signedsign
5、ed有符号(通常省略);有符号(通常省略);关键字关键字 所占位数所占位数 取值范围取值范围 shortshort 16 -32768 16 -327683276732767unsigned shortunsigned short 16 0 16 06553565535 Int Int 16 -32768 16 -327683276732767Unsigned intUnsigned int 16 0 16 06553565535 Long Long 32 -2147483648 32 -214748364821474836472147483647unsigned longunsigned l
6、ong 32 0 32 042949672954294967295三、实型三、实型1 1、常量:、常量:(1)(1)十进制小数形式:十进制小数形式:由数字和小数点组成;由数字和小数点组成;例如例如:3:3,3.4,3.4,4.,4.,.3,.3,.,.(2)(2)指数形式:指数形式:“十进制小数十进制小数”+“e(+“e(或或E)”+“E)”+“十进制数整数十进制数整数”。例如例如:12.5e-6:12.5e-6 表示表示12.512.51010-6-6 。6E0.26E0.2 ,e5,e5 2 2、实型变量的分类及值域、实型变量的分类及值域:关键字关键字 字节数字节数 取值范围取值范围 精度
7、精度(位位)float 4 -3.4float 4 -3.4101038383.43.410103838 7 7double 8 -1.7double 8 -1.710103083081.71.71010308308 15 15四、字符类型四、字符类型1 1、字符常量、字符常量(1)(1)用单引号括起来的一个字符:用单引号括起来的一个字符:如如:AA、aa、11、?等。等。(2)(2)用单引号括起来的由反斜杠用单引号括起来的由反斜杠()引导的转义字符。引导的转义字符。反斜杠反斜杠 aa警告警告 bb退格退格 ff换页换页 nn换行换行 rr回车回车tt横向跳格横向跳格 vv垂直跳格垂直跳格 单
8、引号单引号 ”双引号双引号0 0 空字符:不计入字符串长度,读取到第空字符:不计入字符串长度,读取到第1 1个个00时就认为字符串结束,不再继续向后面读取和统计。时就认为字符串结束,不再继续向后面读取和统计。dddddd 1 1到到3 3位位8 8进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符 xhhxhh 1 1到到2 2位位1616进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符u字符字符A A的的ASCIIASCII码为:码为:65D(65D(十进制十进制)=41H()=41H(十六进制十六进制)=101Q()=101Q(八进制八进制)字符字符A
9、 A可表示为可表示为AA、x41x41、101101 u字符字符a a可表示为可表示为aa、x61x61、141141 97D(97D(十进制十进制)=61H()=61H(十六进制十六进制)=141Q()=141Q(八进制八进制)u字符字符8 8可表示为可表示为88、x38x38、7070 56D(56D(十进制十进制)=38H()=38H(十六进制十六进制)=70Q()=70Q(八进制八进制)2 2、字符变量(标识符为、字符变量(标识符为)每个字符型数据在内存中占每个字符型数据在内存中占1 1个字节;包括个字节;包括ASCIIASCII字字符表中的所有字符符表中的所有字符(可显示字符和非显示
10、字符可显示字符和非显示字符)。字符型可参与数学运算,也可看成一种字符型可参与数学运算,也可看成一种1 1字节的整型字节的整型变量。变量。3 3、字符串常量:、字符串常量:是用一对双引号括起来的字符序列。是用一对双引号括起来的字符序列。注意:每个字符串的后面都有一个注意:每个字符串的后面都有一个00结束符结束符(通常省略)。(通常省略)。如:如:“SHANGHAI”SHANGHAI”,“AbcdeFGHijkAbcdeFGHijk”,“How are How are you”you”。字符常量与字符串常量不同字符常量与字符串常量不同h e l l o 0h e l l o 0字符串字符串“hel
11、lo”hello”在内存中在内存中a aa 0a 0 aa“a”a”空串空串“”“”在内存中在内存中004 4、字符串变量(见第七章中的字符数组与字符串、字符串变量(见第七章中的字符数组与字符串)一、常量与符号常量一、常量与符号常量常量是指在程序运行中常量是指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。2.2 2.2 常量与变量常量与变量常量常量直接常量直接常量符号常量(标识符定义)符号常量(标识符定义)数值常量数值常量字符型常字符型常量量整型常量整型常量实型常量实型常量字符常量字符常量字符串常字符串常量量120120、-100-100、0 0;十进制十进制 01200120、0
12、72072;八进制;八进制0 xFFFF0 xFFFF、0 x1e0 x1e、0X28AF0X28AF,0XED40XED4;十六进制;十六进制120120L,200LL,200L;长整型常量长整型常量(字符字符L L大小写均可大小写均可)3.143.14、-3.1-3.1、5.125.12E-6E-6;实型;实型(只能十进制表示只能十进制表示)aa、#、nn、101101;字符型;字符型 changshachangsha、+?abab ;字符串型;字符串型099099、12f12f、0 xg0 xg、48EA48EA;019.5 019.5、1e-081e-08;实型常量实型常量2.12.1
13、E10.2E10.2、E-6E-6、6.4E+4.86.4E+4.8、E9E9 ;、abab;1、直接常量:、直接常量:是在程序中直接引用的数据。是在程序中直接引用的数据。2 2、符号常量、符号常量用标用标识符来表示一个数据,但在程序中不能给它赋值。识符来表示一个数据,但在程序中不能给它赋值。定义形式定义形式:#define#define 标识符标识符 常量数据常量数据例如例如:#define PI 3.14159 :#define PI 3.14159 在程序预处理时,凡是出现标识符在程序预处理时,凡是出现标识符PIPI的地方都将的地方都将用数据用数据3.141593.14159来替换。来替
14、换。如如:2:2*2.32.3*PI PI 就等价于就等价于 2 2*2.32.3*3.141593.14159。例例#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);宏定义宏定义变量定义变量定义输出结果输出结果运行结果:运行结果:total=37.500000,ch1=d 变量是指变量是指以标识符为名字,其值可以改变的量。以标识符为名字,其值可以改变的量。变量代表计算机内存中的某一存储空间,
15、变量代表计算机内存中的某一存储空间,该存储空间该存储空间中存放中存放的数据就是变量的值。的数据就是变量的值。在同一程序块中,在同一程序块中,变量变量不能被重复定义。不能被重复定义。使用变量时必须使用变量时必须“先定义,后使用先定义,后使用”。二、变量定义变量就是在内存中划出一块相应类型的存定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。定义形式如下:储空间存放该变量的值。定义形式如下:类型标识符类型标识符 变量名变量名1 1,变量名变量名2 2,变量名变量名3 3.;intinta a,b b,c_2c_2,studentsstudents;floatfloatx x,xyxy;
16、charcharc1c1,c2c2;在同一程序中在同一程序中变量名不允许变量名不允许被重复定义。被重复定义。intinta,ba,b=3,c_2=9,students=3,c_2=9,students;intint d=e=f=3 d=e=f=3;floatfloatx,xyx,xy=3.76=3.76;charcharc1,c2=kc1,c2=k;a=students=6a=students=6变量的赋值变量的赋值在定义变量的同时给变量一个初始值,在定义变量的同时给变量一个初始值,但不能连续赋初值。但不能连续赋初值。使用使用“”赋值,且常量与变量类型相同。赋值,且常量与变量类型相同。int
17、a,bint a,b;float xfloat x;a=b=x=12.34a=b=x=12.34int a,bint a,b;float xfloat x;x=a=b=12.34x=a=b=12.34x=12 a=12 b=12x=12 a=12 b=12x=12.34 a=12 b=12x=12.34 a=12 b=12 main()main()int int x x,y y,z z,w w;/*定义定义x x,y y,z z,w w为整型变量为整型变量*/unsigned int unsigned int k k;/*定义定义k k为无符号整型变量为无符号整型变量*/char c1,c2=
18、b;char c1,c2=b;x=10 x=10;y=-20y=-20;k=30k=30;c1=a;c1=a;z=x+k z=x+k;w=y+kw=y+k;c1=c1-32;c2=c2-32;c1=c1-32;c2=c2-32;printf(“x+k printf(“x+k=%d=%d,y+k=%dny+k=%dn”,z z,w);w);printf(“%c printf(“%c%cn”,c1,c2);%cn”,c1,c2);例例2-12-1和例和例2-22-2x+kx+k=40=40,y+ky+k=10=10A BA B2.3 2.3 运算符与表达式运算符与表达式运算符:就是表示某种运算功能
19、的符号。运算符:就是表示某种运算功能的符号。算术运算符、赋值运算符、逗号运算符、求字节运算符、算术运算符、赋值运算符、逗号运算符、求字节运算符、条件运算符、关系运算符、逻辑运算符条件运算符、关系运算符、逻辑运算符位运算符、位运算符、指针运算符、强制类型转换运算符、指针运算符、强制类型转换运算符、分量运算符、下标运算符、其他运算符分量运算符、下标运算符、其他运算符表达式:是由操作数和运算符组成的序列。表达式:是由操作数和运算符组成的序列。如:如:1+21+2*3-4 3-4、35-7 35-7、a=b%2a=b%2、39 39 等等 在数学里当多个运算符一起组成一个表达式,我们规在数学里当多个运
20、算符一起组成一个表达式,我们规定了定了优先级优先级(先乘除后加减先乘除后加减)和和结合规则结合规则(从左至右从左至右)。同样在同样在C C语言中我们也规定了每个运算符的语言中我们也规定了每个运算符的结合规则结合规则及运算符之间的及运算符之间的优先级优先级。()()(括号括号)+、-、-、sizeofsizeof、!、!(连加连加.连减连减.负号负号.求字节数求字节数.逻辑非逻辑非)*、/、%(算术运算符算术运算符)高高+、-(算术运算符算术运算符)(左右移位左右移位)、=、=(关系运算符关系运算符)=、!=!=(关系运算符关系运算符)&(按位与按位与)运算级别运算级别 (按位异或按位异或)|(
21、按位或按位或)&(逻辑与逻辑与)|(逻辑或逻辑或)?、:?、:(条件运算条件运算)低低=、+=+=、-=-=、*=、/=/=、%=%=、=、=、&=&=、=、|=|=(赋值赋值),(逗号逗号)红色红色(自左至右自左至右)蓝色加下划线蓝色加下划线(自右至左自右至左)一、算术运算符和算术表达式一、算术运算符和算术表达式1 1、算术运算符、算术运算符(双目运算符,有两个操作数)(双目运算符,有两个操作数)(加加)、(减减)、(乘乘)、(除除)、(取余取余)两个整数相除,结果为整数,舍去小数部分;两个整数相除,结果为整数,舍去小数部分;参加运算的两个数中有一个为实数,则结果为参加运算的两个数中有一个为
22、实数,则结果为doubledouble型,因为所有实数都按型,因为所有实数都按doubledouble型进行运算。型进行运算。取余运算的操作数只能是整数,且结果的符号与取余运算的操作数只能是整数,且结果的符号与前一操作数的符号相同;前一操作数的符号相同;5/2=2 -5/2=-2 5.0/2=2.5 5/2=2 -5/2=-2 5.0/2=2.5 5%3=2 -5%3=-2 5%(-3)=2 -5%(-3)=-25%3=2 -5%3=-2 5%(-3)=2 -5%(-3)=-2;2 2、算术表达式、算术表达式用算术运算符和括号将操作数连接起来的式子。用算术运算符和括号将操作数连接起来的式子。优
23、先级:优先级:结合规则:从左至右结合规则:从左至右表达式的值表达式的值:数值型数值型float a=2.0float a=2.0;intint b=6,c=3 b=6,c=3;求解:求解:a a*b/c-1.5+a+fabs(-5)b/c-1.5+a+fabs(-5)2.02.0*6/3-1.5+97+56/3-1.5+97+54.0-1.5+97+54.0-1.5+97+5104.5104.5intint a=1,b=2 a=1,b=2;求解:;求解:a/b+3a/b+31/2+31/2+30+30+33 3intint a=10000,b=30000 a=10000,b=30000;求解:
24、;求解:a+ba+b出错(改为出错(改为longlong)intint a=10000,b=30000 a=10000,b=30000;求解:;求解:a+ba+b=40000=40000(不出错)(不出错)在在VC+6.0VC+6.0中中intint占占4 4个字节,通常情况下个字节,通常情况下X X位位CPUCPU中的中的intint型占用的字节数为型占用的字节数为X/8X/8。3 3、自增与自减运算符、自增与自减运算符 (+(+、-)+i,-i+i,-i:使用之前使:使用之前使i i的值增的值增1(1(或减或减1)1);i+,ii+,i-:使用之后使:使用之后使i i的值增的值增1(1(或
25、减或减1)1);当当+、-不与其他运算符混合使用时,不与其他运算符混合使用时,+i+i与与i+i+都等价于都等价于i=i+1i=i+1,-i-i与与i-i-都等价于都等价于i=i-1i=i-1。i=3;i=3;j=i+;j=i+;等价于:等价于:j=i;ij=i;i+;+;i=4i=4,j=3 j=3 i=3;i=3;j=+i;j=+i;等价于:等价于:i+;ji+;j=i;=i;i=4i=4,j=4j=4结合性:自右至左结合性:自右至左i=2i=2;j=-i+j=-i+;“+”+”与与“-”(-”(负号负号)是同优先级,且都高于是同优先级,且都高于“=”=”按结合规则,等价于:按结合规则,等
26、价于:j=-(i+)j=-(i+);结果:结果:i i3 3,j j-2-2。a=3,b=(a+)+(a+)+(aa=3,b=(a+)+(a+)+(a+)b=9 a=6+)b=9 a=6a=3,b=(a+)+(aa=3,b=(a+)+(a+)b=6 a=5+)b=6 a=5a=3,b=(+a)+(aa=3,b=(+a)+(a+)b=8 a=5+)b=8 a=5a=3,b=(a+)+(+aa=3,b=(a+)+(+a)b=8 a=5)b=8 a=5a=3,b=(+a)+(+aa=3,b=(+a)+(+a)b=10 a=5)b=10 a=5a=3,b=4,c=a+ba=3,b=4,c=a+b c=
27、7 b=4 a=4 c=7 b=4 a=4二、赋值运算符和赋值表达式二、赋值运算符和赋值表达式 1 1、赋值运算符、赋值运算符 (执行功能:把执行功能:把=右边的表达式的值,存入右边的表达式的值,存入=左边的左边的变量变量对应的存储空间,即给此变量赋值对应的存储空间,即给此变量赋值)2 2、赋值表达式、赋值表达式用赋值运算符将变量和表达式连接起来的式子用赋值运算符将变量和表达式连接起来的式子形式:形式:=结合性:自右至左;结合性:自右至左;表达式也可以是另一个赋值表达式表达式也可以是另一个赋值表达式x=10+(y=5)x=10+(y=5),i=(j=10)/(k=2)i=(j=10)/(k=2
28、),x=(y=12)/4x=(y=12)/4,x=y=12/4x=y=12/4,x=(y=12/4)x=(y=12/4),(编译出错编译出错)3 3、复合赋值运算符、复合赋值运算符复合运算符是一个运算符复合运算符是一个运算符,但功能上但功能上,是两个运算是两个运算符功能的组合。符功能的组合。优先级:与优先级:与 =是同一优先级。是同一优先级。结合性:自右至左;结合性:自右至左;表达式的值:被赋值变量的值。表达式的值:被赋值变量的值。a=12a=12,计算表达式,计算表达式a+=a-=aa+=a-=a*1212a+=(a=a-aa+=(a=a-a*12)12)a+=(a=12-12a+=(a=1
29、2-12*12)12)a+=(a=-132)a+=(a=-132)a=a+(aa=a+(a=-132)=-132)a=-132+-132a=-132+-132a=-264a=-264a=12a=12,计算表达式,计算表达式a+=a-=aa+=a-=a*=12=12a+=(a-=(a=aa+=(a-=(a=a*12)12)a+=(a=a-(a=aa+=(a=a-(a=a*12)12)a=a+(aa=a+(a=a-(a=a=a-(a=a*12)12)a=a+(aa=a+(a=a-(a=144)=a-(a=144)a=a+(aa=a+(a=0)=0)a=0a=0a+=ba+=ba a*=b=ba a
30、*=b+c=b+ca=a+ba=a+ba=aa=a*b b a=aa=a*(b+c(b+c)三、逗号运算符和求字节运算符三、逗号运算符和求字节运算符1 1、逗号运算符、逗号运算符形式:形式:表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n 求值规则:求值规则:从左至右依次计算各表达式的值从左至右依次计算各表达式的值;优先级:优先级:最低;最低;结合性:结合性:自左至右;自左至右;表达式的值:表达式的值:最后一个表达式的值。最后一个表达式的值。x=(y=3,y+1)x=(y=3,y+1)首先将首先将3 3赋给赋给y,y,然后执行然后执行y+1y+1运算运算,将结果将结果4 4赋给赋
31、给x x。整个整个x x赋值右边的表达式要用括号括起来,赋值右边的表达式要用括号括起来,因为逗号运算符的优先级别最低。因为逗号运算符的优先级别最低。c=a=4,b=5,a+b c=a=4,b=5,a+b 4 5 4 94 5 4 9 c=(a=4,b=5,a+b)c=(a=4,b=5,a+b)4 5 9 94 5 9 9c=(a=4,b=5),a+b c=(a=4,b=5),a+b 4 5 5 94 5 5 9c=a=(4,b=5),a+b c=a=(4,b=5),a+b 5 5 5 105 5 5 10 a b c a b c 表达式表达式2 2、求字节运算符、求字节运算符 作用:求得变量或
32、某种数据类型所需的字节数。作用:求得变量或某种数据类型所需的字节数。形式有两种:形式有两种:sizeofsizeof 变量名变量名 sizeofsizeof(类型名类型名)结果为整型数。结果为整型数。intint a a;float xfloat x;printf(“%d,%d”,sizeof a,sizeofprintf(“%d,%d”,sizeof a,sizeof x);x);printf(“%d,%d”,sizeof(int),sizeof(floatprintf(“%d,%d”,sizeof(int),sizeof(float););四、条件运算符四、条件运算符 和和 (三目运算符三
33、目运算符)条件运算符与三个操作数组组成三元运算。条件运算符与三个操作数组组成三元运算。形式:形式:?2:3 求值规则:求值规则:1.1.先求解表达式先求解表达式1 1的值;的值;2.2.若为真若为真(非非0),0),求解表达式求解表达式2 2,并把表达式,并把表达式2 2的值作为的值作为整个条件表达式的值;整个条件表达式的值;3.3.若为假若为假(0),(0),求解表达式求解表达式3 3,并把表达式,并把表达式3 3的值作为整的值作为整个条件表达式的值。个条件表达式的值。优先级:优先级:算术算术 逻辑逻辑 条件条件 赋值赋值结合性:结合性:自右至左;自右至左;y=x 10?x/10:x 0?x
34、:-xy=x 10?x/10:x 0?x:-x等价于:等价于:y=x 10?x/10:(x 0?x:-x)y=x 10?x/10:(x 0?x:-x)它的功能是当它的功能是当x10 x10时,时,y y的值为的值为x/10 x/10;当经;当经=100?x:-xx0?x:-x的值的值(当当x0 x0时,表达式的时,表达式的值为值为x x;当;当x=0 xb?a:bmax=ab?a:b;max=5max=52.4 2.4 数据类型转换数据类型转换C C语言允许整型、实型、字符型数据进行混合运算。语言允许整型、实型、字符型数据进行混合运算。在进行运算时,不同类型的数据要先转换成同一类型,在进行运算
35、时,不同类型的数据要先转换成同一类型,然后再进行运算。然后再进行运算。有有3 3种转换方式:种转换方式:自动转换自动转换 赋值转换赋值转换 强制转换强制转换一、类型自动转换一、类型自动转换操作数为不同类型的,由数值存储位数少的向多的操作数为不同类型的,由数值存储位数少的向多的转换,整型向实型转换。转换,整型向实型转换。操作数为相同类型的分为以下两种情况:操作数为相同类型的分为以下两种情况:pFloatFloat型自动转换成型自动转换成doubledouble型;型;pCharChar型和型和shortshort型自动转换成型自动转换成intint型;型;p其他类型的仍取原类型;其他类型的仍取原
36、类型;double floatdouble floatUnsigned longUnsigned longlonglongunsigned intunsigned intint char,shortint char,shortintint x=2 x=2;float y=1.6float y=1.6;char c=Achar c=A;求:求:c c+1 1/x x*y y=6565(int)(int)+0 0(int)(int)*1.61.6(double)(double)=6565(double)(double)Char chChar ch=a=a;intint i=13 i=13;floa
37、t x=3.65float x=3.65;double y=7.528E-6double y=7.528E-6;求:求:i i+chch+x x*y y=1313(int)(int)+9797(int)(int)+3.653.65(double)(double)*7.528e-67.528e-6(double)(double)=110=110(int)(int)+2.77442E-52.77442E-5(double)(double)=110=110(double)(double)+2.77442E-52.77442E-5(double)(double)=110.000027442110.00
38、0027442(double)(double)二、赋值转换二、赋值转换(1)(1)整型整型(字符型字符型)实型实型(单、双精度单、双精度):数值不变,补足有效位,以浮点数形式存储到变量中;数值不变,补足有效位,以浮点数形式存储到变量中;(2)(2)实型实型整型整型(字符型字符型):舍弃实数的小数部分;舍弃实数的小数部分;(3)(3)对对charchar、intint、shortshort、longlong、unsignedunsigned型数据:型数据:赋值符左边变量赋值符左边变量(b(b位位)赋值符右边的数据赋值符右边的数据(a(a位位)p a=b a=b 原样照赋;原样照赋;p ab ab
39、 截断高截断高(a-b)(a-b)位,送低位,送低b b位位p ab ab 有符号数据有符号数据有符号变量:有符号变量:符号位为符号位为0 0,剩余的高位补,剩余的高位补0 0;符号位为符号位为1 1,剩余的高位补,剩余的高位补1 1。其他情况:高其他情况:高(b-a)(b-a)位全补位全补0 0。精度高的数据向精度低的数据转换时,精度可能降低。intint a=2,b=5;a=2,b=5;float x=4.4;float x=4.4;求:表达式求:表达式=?b/a=b/a=2 2(float)b(float)b/a=/a=2.52.5(float)(b(float)(b/a)=/a)=2.
40、02.0(int)x%a+x(int)x%a+x=4.44.4 (int)x%(a+x(int)x%(a+x)出错出错三、强制类型转换三、强制类型转换形式:形式:(类型名类型名)表达式表达式强制类型转换时强制类型转换时,得到所需类型的中间变量,原来变量得到所需类型的中间变量,原来变量的类型不会改变。的类型不会改变。intint a=7,b=2;a=7,b=2;float y1,y2;float y1,y2;y1=a/b y1=a/b y1=3y1=3y2=(float)a/by2=(float)a/b y2=2.5y2=2.54.1 4.1 关系运算符和关系表达式关系运算符和关系表达式6 6种
41、关系运算符:种关系运算符:=!=!=关系表达式:关系表达式:用关系运算符将两个表达式连接起来进用关系运算符将两个表达式连接起来进行关系运算的式子。行关系运算的式子。p优先级:优先级:(=)高于高于(=!=!=)p结合性:结合性:自左至右自左至右;p表达式的值:表达式的值:若为若为真真,则结果为,则结果为1 1;若为若为假假,则结果为,则结果为0 0。35 35=0=032 32=0=0设设x=-2x=-2则则-3x-1-3x-1=0=0设设x=1x=1则则2x4 2x4=1=13+(43)3+(43)*4 4=3=33+433+4&|p 结合性:结合性:自左至右自左至右;p 表达式的值:表达式
42、的值:若为真,则结果为若为真,则结果为1 1;若为假,则结果为若为假,则结果为0 0。a a&b b(当当a a和和b b均为真时,均为真时,表达式为真表达式为真,否则为假否则为假);a a|b b(当当a a和和b b均为假时,均为假时,表达式为假表达式为假,否则为真否则为真);!a(aa(a为真时表达式为假;为真时表达式为假;a a为假时表达式为真为假时表达式为真)。a=5a=5;b=3.5b=3.5;!a a=0 =0 !(ab)(ab)=1=1 a a&b b=1=1!a a&b b=0=0 !a a&!b b=0 =0 !(a(a&b)b)=0=0a a|b b=1 =1 !a a|
43、b b =1 =1 !a a|!b b=0=0!(a(a|b b)=0 =0 (ab)(a0)0)=0 =0 (ab)(a0)0)=1=1逻辑表达式一般用于控制语句中的条件:逻辑表达式一般用于控制语句中的条件:(1)n(1)n是小于是小于m m的偶数:的偶数:n m&n%2=0n m&n%2=0(2)y(2)y是闰年是闰年:(能被能被4 4整除但不能被整除但不能被100100整除整除,或能被或能被400400整除整除)y%4=0&y%100!=0|y%400=0 y%4=0&y%100!=0|y%400=0 a=0a=0;b=1b=1;c=c=a+a+&(b=3)&(b=3);执行后执行后:a
44、=1,b=1,c=0:a=1,b=1,c=0a=1a=1;b=1b=1;c=0c=0;d=d=-a-a b-b-(c=b+3)(c=b+3)执行后:执行后:a=0,b=0,c=0,d=1a=0,b=0,c=0,d=1C C语言逻辑表达式的特性:语言逻辑表达式的特性:在多个在多个&运算符相连的表达式中,计算从左至右进运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为行时,若遇到运算符左边的操作数为0 0(逻辑逻辑假假),则,则停止运算,因为此时已经可以判定逻辑表达式的结停止运算,因为此时已经可以判定逻辑表达式的结果为果为假假。在多个在多个|运算符相连的表达式中,计算从左至右进运
45、算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为行时,若遇到运算符左边的操作数为1 1或或非非0 0(逻辑逻辑真真),则停止运算,因为此时已经可以判定逻辑表达,则停止运算,因为此时已经可以判定逻辑表达式的结果为式的结果为真真。习题二习题二1 1、指出下列常数中哪些是符合、指出下列常数中哪些是符合C C语法规定的:语法规定的:101“”e3 019 101“”e3 019 0 xle0 xle “abn“abn”1.e51.e5 (2+3)e(4-2)5.2e2.5 (2+3)e(4-2)5.2e2.52 2、(1)y=z=5(1)y=z=5改为改为y=5,z=5 y=5,z=
46、5 语句后面加语句后面加分号分号 AVER=(x+y+z)/3 AVER=(x+y+z)/3 中中AVER AVER 改为改为averaver 运行结果为:运行结果为:AVER=5AVER=5(2)char c1=a(2)char c1=a;c2=bc2=b;c3=cc3=c;改为;改为 char c1=a,c2=b,c3=cchar c1=a,c2=b,c3=c;a=3.5 a=3.5 改为改为 a=3a=3运行结果为:运行结果为:a=3b=A”end”na=3b=A”end”n aabcc abc aabcc abctt是制表符是制表符,控制后面每个字符串的显示宽度为控制后面每个字符串的显
47、示宽度为4 4的整数倍;的整数倍;bb是退格符,控制光标向前退一格是退格符,控制光标向前退一格 intint9999104104666655556868-1-1charcharc ch hB B7 7D Dunsigned intunsigned int99991041046666555568686553565535floatfloat99.099.0 104.0104.066.066.055.7855.7868.068.0-1.0-1.0long intlong int9999104104666655556868-1-13、4 4、(1)(1)9,11,9,10 9,11,9,10 (2)(
48、2)3,1,0,0 3,1,0,0 (3)(3)11,19,30,1 11,19,30,1说明:说明:Microsoft Visual C+6.0Microsoft Visual C+6.0和和turboC2.0turboC2.0中中printfprintf()()是从右往左运算的是从右往左运算的,但是不同的编译器可能有不同的顺但是不同的编译器可能有不同的顺序序,所以最好不要让所以最好不要让printfprintf()()的参数有顺序关系的参数有顺序关系;在在|语句中,从左到右,只要有一个条件为真,则语句中,从左到右,只要有一个条件为真,则结果为真,运算就结束,后面的操作不再进行。结果为真,运
49、算就结束,后面的操作不再进行。5 5、a=10,b=4,c=5,d=1,x=2.5,y=3.5a=10,b=4,c=5,d=1,x=2.5,y=3.5(1)a%=(b%=3)(1)a%=(b%=3)a=aa=a%(b%(b=b%3)=b%3)a=10%(b=4%3)a=10%(b=4%3)0 0(2)a+=a-=a(2)a+=a-=a*=a=a a=a+(aa=a+(a=a-(a=a=a-(a=a*a)a)0 0(3)(float)(a+c)/2+(int)x%(int)y(3)(float)(a+c)/2+(int)x%(int)y7.5+2%37.5+2%39.59.5(4)a(4)a*=
50、b+c=b+c a=aa=a*(b+c(b+c)a=10a=10*(4+5)(4+5)9090(5)+a-c+b+(5)+a-c+b+11-5+411-5+4 1010(6)+a-c+b(6)+a-c+b 11-5+411-5+4 1010(7)ab?x:A(7)ab?x:A 104104?2.52.5:6565 6565(8)a+b,18+(b=4)(8)a+b,18+(b=4)*3,(a/b,a%b)3,(a/b,a%b)a%ba%b10%410%42 2(9)x+a%3(9)x+a%3*(int)(x+y)%2/4+sizeof(int)(int)(x+y)%2/4+sizeof(int