《语言基本数据类型及运算.ppt》由会员分享,可在线阅读,更多相关《语言基本数据类型及运算.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章第二章 C C语言基本数据类型及运算语言基本数据类型及运算 本章介绍了本章介绍了C C语言中最基本的要素:标识符、语言中最基本的要素:标识符、关键字、常量、变量、运算符和表达式,以及它们关键字、常量、变量、运算符和表达式,以及它们的分类、定义和使用。其中变量、运算符和表达式的分类、定义和使用。其中变量、运算符和表达式是本章的重点。是本章的重点。标识符标识符 数据类型数据类型常量常量 变量变量运算符运算符 表达式表达式数据类型、运算符与表达式示例数据类型、运算符与表达式示例标标 识识 符符 标识符是标识符是C C语言编程时用来标志识别的符号。语言编程时用来标志识别的符号。ANSI C AN
2、SI C规定:由字母或下划线开头,后跟字母,数字规定:由字母或下划线开头,后跟字母,数字或下划线任意组合的字符序列。或下划线任意组合的字符序列。正确:正确:count,test123,high_balance,PIcount,test123,high_balance,PI 不正确:不正确:1count1count,hihi!threethree,high.balancehigh.balance,a+ba+b 说明:说明:(1 1)标识符中大小写字母是有区别的。)标识符中大小写字母是有区别的。(2 2)不同的系统对标识符的长度有不同的要求。)不同的系统对标识符的长度有不同的要求。(3 3)一般应
3、做到见名知意,以提高程序的可读性。)一般应做到见名知意,以提高程序的可读性。关关 键键 字字 ANSI CANSI C规定了以下规定了以下3232个关键字(保留字),不能再用作各种个关键字(保留字),不能再用作各种标识符。如下:标识符。如下:auto,break,case,char,const,continue,default,do,double,auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,else,enum,extern,f
4、loat,for,goto,if,int,long,register,Return,short,signed,sizeof,static,struct,switch,typedef,Return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,whileunion,unsigned,void,volatile,while C C语言还使用下列语言还使用下列1212个标识符作为编译预处理的命令单词,使个标识符作为编译预处理的命令单词,使用时前面应家用时前面应家“#”define,elif,
5、else,endif,error,if,ifdef,ifndef,include,line,define,elif,else,endif,error,if,ifdef,ifndef,include,line,progrma,undefprogrma,undef数数 据据 类类 型型 基本数据类型基本数据类型基本数据类型基本数据类型字符类型、整形、实型(单精度、双精度)和无值型。字符类型、整形、实型(单精度、双精度)和无值型。基本数据类型的长度和值域基本数据类型的长度和值域类型修饰符类型修饰符类型修饰符有:类型修饰符有:signedsigned unsigned long shortunsign
6、ed long short整数定义后的缺省状态为整数定义后的缺省状态为signedsigned和和shortshort,如表所示。,如表所示。访问修饰符访问修饰符用于控制访问和修改变量方式:常量(用于控制访问和修改变量方式:常量(constconst)、易变量)、易变量(volatilevolatile)类型类型二进制数长度二进制数长度值域值域charintfloatdoublevoid816326400-255-32767-32767-3.4e-383.4e+381.7e-3081.7e-308valuelessC C基本类型及其修饰符所有组合基本类型及其修饰符所有组合说明:不同的计算机系统
7、对各类数据所占内存字节数有不同的规定。不同的计算机系统对各类数据所占内存字节数有不同的规定。构造数据类型和指针类型构造数据类型和指针类型构造数据类型构造数据类型 数组:数组:一组连续、有序地放在一起的具有相同类型的数据。结构体:结构体:将不同类型的数据按一定顺序存放在一起的数据结构。共用体:共用体:将不同类型的数都放在同一起始地址的内存单元中,以节省内存单元。枚举:枚举:只有几种可能的值,将其意义列举出来。实际使用符号来表示若干个可取的整型值。指针类型指针类型 指针类型是代表地址的数数 值值 常常 量量字字 符符 常常 量量 用单引号括起来的一个字符,如用单引号括起来的一个字符,如a a,G
8、G,+等。等。它们以其它们以其ASCIIASCII码形式贮存在内存中,每个字符在内存中占一码形式贮存在内存中,每个字符在内存中占一个字节。个字节。还有一类成为控制字符常量或转义字符常量。它们是一类不还有一类成为控制字符常量或转义字符常量。它们是一类不可打印字符,代表某些功能,如表所示:可打印字符,代表某些功能,如表所示:字字 符符 串串 常常 量量 字符串常量是用一对双引号括起来的字符序列,如字符串常量是用一对双引号括起来的字符序列,如“ABCABC”,“x+y=6x+y=6”,“How do you do.How do you do.”等。等。注意:注意:a a和和“a a”是不同的。是不同
9、的。字符常量在内存中只占一个字节,而字符串常量用字符常量在内存中只占一个字节,而字符串常量用00;来表示字符串的结束。来表示字符串的结束。如如“a a”在内存中的形式:在内存中的形式:符符 号号 常常 量量 (一)(一)符号常量在符号常量在C C语言中称为宏定义。宏定义是语言中称为宏定义。宏定义是C C语言提供的编译语言提供的编译预处理功能之一。预处理功能之一。不带参的宏定义不带参的宏定义#define#define用来定义一个标识符和一个字符串。用来定义一个标识符和一个字符串。这个标识符叫这个标识符叫宏名宏名,替换过程叫做,替换过程叫做宏替换宏替换或或宏展开宏展开。形式:形式:#define
10、#define 宏名宏名 字符串字符串 例:宏定义的使用例:宏定义的使用#define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*Rmain()printf(“L=%fn S=%fn”,L,S);输出:输出:L=18.849556 S=28.274333符符 号号 常常 量量 (二)(二)说明:说明:(1 1)在宏名和字符串之间可以有任意个空格。)在宏名和字符串之间可以有任意个空格。例如:例如:#define PI 3.14159#define PI 3.14159(2 2)若定义了一个宏名,这个名字还可以作为其它宏定义)若
11、定义了一个宏名,这个名字还可以作为其它宏定义的一个部分来使用。的一个部分来使用。(3 3)宏替换仅是简单地用所说明的字符串来替换对应的宏)宏替换仅是简单地用所说明的字符串来替换对应的宏名,无实际的运算发生,也不做语法检查。名,无实际的运算发生,也不做语法检查。例如:例如:#define PI 3.14159#define PI 3.14159;area=PI*r*r area=PI*r*r;(4 4)C C程序中习惯用大写字母作为宏名。程序中习惯用大写字母作为宏名。(5 5)宏定义用宏命令)宏定义用宏命令#undef#undef 宏名宏名 来终止其作用域。来终止其作用域。例如:例如:#defi
12、ne PI 3.14159#define PI 3.14159 main main()()#undef PI#undef PI f1 f1()()符符 号号 常常 量量 (三)(三)带参的宏定义带参的宏定义 形式:形式:#define#define 宏名(参数标)宏名(参数标)字符串字符串 说明:说明:(1 1)在使用时,要将程序中宏名后的实际参数代入字)在使用时,要将程序中宏名后的实际参数代入字符串中参数的位置。符串中参数的位置。例如:例如:#define S(a,b)a*b#define S(a,b)a*b area=S(3,2);area=S(3,2);经编译预处理,该语句被展开为经编译
13、预处理,该语句被展开为area=3*2;area=3*2;(2 2)宏名与参数表左括号之间不能有空格。)宏名与参数表左括号之间不能有空格。(3 3)字符串中应注意括号的使用,以保证运算次序。)字符串中应注意括号的使用,以保证运算次序。例如:例如:#define S(a,b)#define S(a,b)(a a)*(b b)area=S(1+2 area=S(1+2,2 2)经展开后变成经展开后变成area=area=(1+21+2)*(2 2););变量的定义变量的定义变量定义的形式:变量定义的形式:类型类型 变量名表;变量名表;例如:例如:int I,j,num;float a,b,sum;
14、int I,j,num;float a,b,sum;说明:说明:(1 1)类型必须是)类型必须是C C语言的有效数据类型。语言的有效数据类型。(2 2)变量名表可以是一个或多个标识符名,中间以逗)变量名表可以是一个或多个标识符名,中间以逗号分隔,最后以分号结束。号分隔,最后以分号结束。(3 3)变量名可以是)变量名可以是C C语言中允许的合法标识符。语言中允许的合法标识符。(4 4)所有变量都应先定义后使用。)所有变量都应先定义后使用。C C语言中的各种类型的变量语言中的各种类型的变量整型变量整型变量 注意:在使用整型变量时一定要注意数值的范围,超过注意:在使用整型变量时一定要注意数值的范围,
15、超过该变量允许的使用范围将导致错误的效果。该变量允许的使用范围将导致错误的效果。实型变量实型变量 可分为可分为单精度型(单精度型(floatfloat)和和双精度型(双精度型(doubledouble)两类。两类。字符型变量字符型变量 分为基本型(int),短整型(short int或short),长整型(long int或long)和无符号型(unsigned int,unsigned short,unsigned long)。例如:int a,b;long e,f;说明说明C C语言中的各种类型的变量语言中的各种类型的变量整型变量整型变量 注意:在使用整型变量时一定要注意数值的范围,超过注
16、意:在使用整型变量时一定要注意数值的范围,超过该变量允许的使用范围将导致错误的效果。该变量允许的使用范围将导致错误的效果。实型变量实型变量 可分为可分为单精度型(单精度型(floatfloat)和和双精度型(双精度型(doubledouble)两类。两类。字符型变量字符型变量 在内存占4个字节,有7位有效数字,数值范围在3.4e-383.4e+38之间。说明说明C C语言中的各种类型的变量语言中的各种类型的变量整型变量整型变量 注意:在使用整型变量时一定要注意数值的范围,超过注意:在使用整型变量时一定要注意数值的范围,超过该变量允许的使用范围将导致错误的效果。该变量允许的使用范围将导致错误的效
17、果。实型变量实型变量 可分为可分为单精度型(单精度型(floatfloat)和和双精度型(双精度型(doubledouble)两类。两类。字符型变量字符型变量 占8个字节,有15-16位有效数字,数值范围在1.7e-3081.7e+308之间。说明说明C C语言中的各种类型的变量语言中的各种类型的变量整型变量整型变量 注意:在使用整型变量时一定要注意数值的范围,超过注意:在使用整型变量时一定要注意数值的范围,超过该变量允许的使用范围将导致错误的效果。该变量允许的使用范围将导致错误的效果。实型变量实型变量 可分为可分为单精度型(单精度型(floatfloat)和和双精度型(双精度型(double
18、double)两类。两类。字符型变量字符型变量 用来存放字符常量,只能存放一个字符。例如:char c1,c2;c1=a;c2=b;(对c1和c2赋值)说明说明C C语言中的各种类型的变量(续)语言中的各种类型的变量(续)枚举型变量枚举型变量形式:形式:enum enum 枚举元素表枚举元素表 例如例如:enum weekdaysun,mon,tue,wed,thu,fri,sat;:enum weekdaysun,mon,tue,wed,thu,fri,sat;enum weekday workday,restday;enum weekday workday,restday;示例:打印出枚举
19、元素示例:打印出枚举元素satsat的内存值。的内存值。main()main()enumsun,mon,tue,wed,thu,fri,satworkday,restday;enumsun,mon,tue,wed,thu,fri,satworkday,restday;restday=sat;restday=sat;printf(“restday is%dn”,restday);printf(“restday is%dn”,restday);运行结果:运行结果:restday is 6restday is 6其他类型变量其他类型变量 另外还有指针型变量,结构体型变量,共用体型变量。另外还有指针型
20、变量,结构体型变量,共用体型变量。枚举型变量说明枚举型变量说明 说明:说明:(1 1)workdayworkday,restday restday 只能被赋予花括号内的变量。只能被赋予花括号内的变量。例如:例如:workday=monworkday=mon;restday=sunrestday=sun;(2 2)可直接定义枚举变量,例如:)可直接定义枚举变量,例如:enumsunenumsun,monmon,tuetue,wedwed,thuthu,frifri,satworkdaysatworkday,restdayrestday;(3 3)可用初始化改变枚举元素的值,例如:)可用初始化改变
21、枚举元素的值,例如:enum weekdaysun=7enum weekdaysun=7,mon=1mon=1,tue=2tue=2,wed=3wed=3,thu=4thu=4,fri=5fri=5,sat=6sat=6workdayworkday,restdayrestday;定义;定义sunsun为为7 7,monmon为为1 1,satsat为为6.6.(4 4)一个整数不能直接赋给一个枚举变量,应进行类型转换才能赋值。)一个整数不能直接赋给一个枚举变量,应进行类型转换才能赋值。例如:例如:restday=(enum.weekday)6restday=(enum.weekday)6或或r
22、estday=satrestday=sat;变量的初始化变量的初始化变量初始化的一般形式:变量初始化的一般形式:类型类型 变量名变量名=常数常数例如:例如:char ch=a;char ch=a;int first=0;int first=0;float x=123.45;float x=123.45;说明:说明:(1 1)全局和静态变量在编译阶段初始化,且只赋一次)全局和静态变量在编译阶段初始化,且只赋一次值。局部变量在执行本函数时初始化。值。局部变量在执行本函数时初始化。(2 2)全局和静态变量在未初始化时由程序自动赋零。)全局和静态变量在未初始化时由程序自动赋零。而局部变量和寄存器变量在
23、未初始化时其值保持原来状态而局部变量和寄存器变量在未初始化时其值保持原来状态不变。不变。运运 算算 符符 运算符是一种向编译程序说明一个特定的数学或逻辑运算符是一种向编译程序说明一个特定的数学或逻辑运算的符号。运算的符号。(1 1)算数运算符()算数运算符(+,-,+,-,*,/,%,+,-,/,%,+,-)。)。(2 2)关系运算符()关系运算符(,=,=,!=,=,=,!=)。)。(3 3)逻辑运算符()逻辑运算符(!,&,|!,&,|)。)。(4 4)位运算符()位运算符(,|,&,|,&)。)。(5 5)赋值运算符()赋值运算符(=,=,及其双目运算符的扩展赋值运算符)及其双目运算符的
24、扩展赋值运算符)(6 6)条件运算符(?)条件运算符(?:)。:)。(7 7)逗号运算符(,)。)逗号运算符(,)。(8 8)指针运算符()指针运算符(*,&)。)。(9 9)求字节数运算符()求字节数运算符(sizeofsizeof)(1010)强制类型转换运算符(类型)。)强制类型转换运算符(类型)。(1111)分量运算符()分量运算符(.,-.,-)。)。(1212)下标运算符()下标运算符()。)。(1313)圆括号运算符()。)圆括号运算符()。算数运算符和赋值运算符算数运算符和赋值运算符操作符操作符作用作用运算对象个数运算对象个数优先级优先级结合方向结合方向+-自增,加1自减,减1
25、负号111222自右至左*/%乘除取模(取余)222333自左至右+-加减2244自左至右=赋值214自右至左算数运算符和赋值运算符(续)算数运算符和赋值运算符(续)说明:说明:(1 1)+,-,*,/与数学中运算相似。与数学中运算相似。/用于整型运算结用于整型运算结果时,结果为整数(余数被截掉)。果时,结果为整数(余数被截掉)。(2 2)%仅用于整型运算。仅用于整型运算。(3 3)赋值运算符是将右边表达式的值赋给左边的变量。)赋值运算符是将右边表达式的值赋给左边的变量。合法:合法:x=x+1;x=x+1;非法:非法:x+1=x;x+1=x;(4 4)+,-仅用于整型变量,指针变量。仅用于整型
26、变量,指针变量。(5 5)+,-,*,/,%,可与赋值号组成复合赋值运算符,可与赋值号组成复合赋值运算符+=+=,-=-=,*=。/=/=,%=%=。例如:例如:a=a+ba=a+ba+=b;a=a*ba+=b;a=a*ba*=b;a*=b;算数运算符和赋值运算符示例算数运算符和赋值运算符示例示例:示例:void main()void main()void main()void main()int x,y;int x,y;int x,y;int x,y;x=10;x=10;x=10;x=10;y=+x;y=x+;y=+x;y=x+;printf(“%d,%dn”x,y);printf(“%d,
27、%dn”x,y);printf(“%d,%dn”x,y);printf(“%d,%dn”x,y);输出:输出:输出:输出:11,1111,11 1111,1010关系运算符和逻辑运算符(一)关系运算符和逻辑运算符(一)操作符操作符作用作用运算对象个数运算对象个数优先级优先级结合方向结合方向=9);printf(“%dn”,x=9);printf(“%dn”,x=9);printf(“%dn”,x=9);输出:输出:1 1 输出:输出:0 0(2 2),=,=31,531);输出:输出:0 0 printf printf(“%dn%dn”,1=1135,1=111+12101+12,其结果是假(
28、即,其结果是假(即0 0)。)。(4 4)在关系和逻辑运算符组成给的表达式中,可用()来改变自然优)在关系和逻辑运算符组成给的表达式中,可用()来改变自然优先顺序,如先顺序,如!1&0!1&0其值为假,而其值为假,而!(1&0)!(1&0)其值为真。其值为真。(5 5)在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行。关系运算符和逻辑运算符(三)关系运算符和逻辑运算符(三)逻辑运算的真值表如下所示,逻辑值用逻辑运算的真值表如下所示,逻辑值用1 1和和0 0表示表示pqP&qp|q!p00110101000101111100位位 运运 算算
29、 符符 (一)(一)操作符操作符作用作用运算对象个数运算对象个数优先级优先级结合方向结合方向&|位逻辑与位逻辑异或位逻辑或2228910自左至右位逻辑反12自右至左右移左移2255自左至右 位运算不能用于位运算不能用于floatfloat,doubledouble,voidvoid或其它更加复杂的或其它更加复杂的数据类型。数据类型。位位 运运 算算 符符位位 运运 算算 符符 (二)(二)说明:说明:(1 1)&(与(与ANDAND)常用于指定的某些位清零。)常用于指定的某些位清零。(2 2)|(或(或OROR)可用于指定某些位为)可用于指定某些位为1.1.(3 3)(异或(异或XORXOR)
30、可用于特定位取反,使某些位保留原值或使某个数)可用于特定位取反,使某些位保留原值或使某个数清零。清零。(4 4)(反(反NOTNOT)是对该运算元素每一位都取反。)是对该运算元素每一位都取反。(5 5)使变量中的每一位向右移动,移出的最低位将丢失,左端补入使变量中的每一位向右移动,移出的最低位将丢失,左端补入0 0。(7 7)&,|,可以与赋值号组成复合赋值运算符可以与赋值号组成复合赋值运算符&=&=,|=|=,=。位位 运运 算算 符符 (三)(三)位运算符位运算符&(与(与ANDAND),),|(或(或OROR),),(异或(异或XORXOR),),(反(反NOTNOT)的真值表如下:)的
31、真值表如下:PQP&QP|QPQP001101010001011101101100条件运算符和逗号运算符条件运算符和逗号运算符条件运算符条件运算符形式:表达式形式:表达式1 1?表达式?表达式2 2:表达式:表达式3 3(示例示例)逗号运算符逗号运算符 形式:表达式形式:表达式1 1,表达式,表达式2 2(示例示例)唯一的三目运算符,结合方向是自右向左。说明说明条件运算符和逗号运算符条件运算符和逗号运算符条件运算符条件运算符形式:表达式形式:表达式1 1?表达式?表达式2 2:表达式:表达式3 3(示例示例)逗号运算符逗号运算符 形式:表达式形式:表达式1 1,表达式,表达式2 2(示例示例)
32、x=10;y=x9?100:200;则y的值为100说明说明条件运算符和逗号运算符条件运算符和逗号运算符条件运算符条件运算符形式:表达式形式:表达式1 1?表达式?表达式2 2:表达式:表达式3 3(示例示例)逗号运算符逗号运算符 形式:表达式形式:表达式1 1,表达式,表达式2 2(示例示例)也称顺序求值运算符,结合方向自左至右说明说明条件运算符和逗号运算符条件运算符和逗号运算符条件运算符条件运算符形式:表达式形式:表达式1 1?表达式?表达式2 2:表达式:表达式3 3(示例示例)逗号运算符逗号运算符 形式:表达式形式:表达式1 1,表达式,表达式2 2(示例示例)x=(y=3,y+1);
33、x的值为4。说明说明其其 它它 运运 算算 符符 (三)(三)操作符操作符作用作用运算对象个数运算对象个数优先级优先级结合方向结合方向()-圆括号下标运算符指向运算符结构体成员运算符1111自左至右(类型)*&Sizeof类型转换指针运算符地址运算符求类型长度运算符11112222自右至左运算符的优先级和结合方向运算符的优先级和结合方向优先级别优先级别运算符运算符运算形式运算形式结合方向结合方向名称或含义名称或含义1().-(e)aex.yp-x自左至右圆括号数组下标成员运算符用指针访问成员的指向运算符2-+-!(t)*&sizeof-e+x或x+!ee(t)E*p&xsizeof(t)自右至
34、左负号和正号自增运算和自减运算逻辑非按位取反类型转换指针运算,由地址求内容求变量的地址求某类型变量的长度3*/%e1*e2自左至右乘除和求余4+-e1+e2自左至右加和减5e1e2自左至右左移和右移优先级别优先级别运算符运算符运算形式运算形式结合方向结合方向名称或含义名称或含义6 =e1=&=|=x=ex+=e自右至左赋值运算复合赋值运算15,e1,e2自左至右顺序求值运算运算符的优先级和结合方向(续)运算符的优先级和结合方向(续)C C的各种表达式(一)的各种表达式(一)运算符,常量以及变量构成了表达式运算符,常量以及变量构成了表达式算数表达式算数表达式形式:形式:关系表达式关系表达式 形式
35、:形式:逻辑表达式逻辑表达式形式:形式:可是数值,也可是字符(按其ASII码值进行运算)。运算结果是数值,如a+b*c-d=e。说明说明C C的各种表达式(一)的各种表达式(一)运算符,常量以及变量构成了表达式运算符,常量以及变量构成了表达式算数表达式算数表达式形式:形式:关系表达式关系表达式 形式:形式:逻辑表达式逻辑表达式形式:形式:是数值,其运算结果是逻辑量,即为“真”时取1,为“假”时取0。说明说明C C的各种表达式(一)的各种表达式(一)运算符,常量以及变量构成了表达式运算符,常量以及变量构成了表达式算数表达式算数表达式形式:形式:关系表达式关系表达式 形式:形式:逻辑表达式逻辑表达
36、式形式:形式:其操作对象和运算结果均为逻辑量。说明说明C C的各种表达式(二)的各种表达式(二)条件表达式条件表达式形式:形式:?:3例如:例如:y=x?a:b;y=x?a:b;若若x=3x=3则则y=a,y=a,若若x=0 x=0则则y=by=b。说明:说明:(1 1)条件运算符的结合方向为)条件运算符的结合方向为“自右至左自右至左”。如如ab?a:cd?c:dab?a:cd?c:dab?a:(cd?c:d)ab?a:(cd?c:d),当,当a=1,b=2a=1,b=2,c=3c=3,d=4d=4时,此条件表达式的值为时,此条件表达式的值为4 4。(2 2)当表达式)当表达式2 2和表达式和
37、表达式3 3的类型不同时,此条件表达式的的类型不同时,此条件表达式的值得类型为二者中较高的类型。值得类型为二者中较高的类型。C C的各种表达式(三)的各种表达式(三)逗号表达式逗号表达式形式:表达式形式:表达式1 1,表达式,表达式2 2,表达式,表达式n n赋值表达式赋值表达式形式:形式:说明:说明:(1 1)赋值号右边可以是各类表达式,也可以是另一个赋值)赋值号右边可以是各类表达式,也可以是另一个赋值表达式,如表达式,如a=b=c-a=(b=c)a=b=c-a=(b=c)。(2 2)1010种复合赋值运算符也可以构成赋值表达式。如:种复合赋值运算符也可以构成赋值表达式。如:a+=b-a=a
38、+ba+=b-a=a+b。表达式中的类型转换表达式中的类型转换转换规则如图所示:转换规则如图所示:示例示例说明:说明:(1 1)转换结果必然是)转换结果必然是intint,longlong或或doubledouble三种基本类型。三种基本类型。charchar型数据在运算时先转换成型数据在运算时先转换成intint型,运算结果也是型,运算结果也是intint。floatfloat型数据在运算时先转换成型数据在运算时先转换成doubledouble型,其运算结果也是型,其运算结果也是doubledouble型。型。(2 2)除()除(1 1)所述的转换外,其余类型的混合运算按图示)所述的转换外,
39、其余类型的混合运算按图示顺序由低到高自动转换。顺序由低到高自动转换。(3 3)可以使用强制类型转换。)可以使用强制类型转换。形式形式:(类型)表达式:(类型)表达式表达式中的类型转换示例表达式中的类型转换示例示例示例1 1:考虑下图中的类型转换。:考虑下图中的类型转换。示例示例3 3:整型数据相除:整型数据相除result=(ch/i)+(f*d)-(f+i)result=(ch/i)+(f*d)-(f+i)floatintdoubleintdoubledoubledoubledoubledouble示例示例2 2:类型转换:类型转换 float x;float x;int i;int i;x
40、=i=3.14159;x=i=3.14159;则变量则变量i i的值为的值为3 3,变量,变量x x的值为的值为3.03.0main()main()int i=100,j=40;int i=100,j=40;float f;float f;f=i/j;f=i/j;printf(“f=%fn”,f);printf(“f=%fn”,f);输出:输出:f=2.000000f=2.000000若将程序中若将程序中f=i/jf=i/j改成改成f=(float)i/jf=(float)i/j,则相当于,则相当于f=100.0/40,ff=100.0/40,f的结果为的结果为2.52.5。空格与圆括号空格与
41、圆括号空格空格 为了增加程序的可读性,在为了增加程序的可读性,在C C程序的表达式中始终可以随程序的表达式中始终可以随意增加空格。意增加空格。圆括号圆括号 为了改变程序中表达式的求值顺序,可以加入圆括号。为了改变程序中表达式的求值顺序,可以加入圆括号。说明:说明:表达式除了由圆括号来改变优先顺序外,应按照运算符表达式除了由圆括号来改变优先顺序外,应按照运算符的优先顺序来执行的优先顺序来执行数据类型、运算符与表达式举例数据类型、运算符与表达式举例示例示例2 2:写出类型说明语句并求表达:写出类型说明语句并求表达式的值,在指出表达式最后的类型。式的值,在指出表达式最后的类型。已知:已知:a=12.
42、3,b=-8.2,i=5,j=4,c=aa=12.3,b=-8.2,i=5,j=4,c=a求求:(:(1 1)a+b+i/ja+b+i/j (2 2)i%j+c/ii%j+c/i解:类型说明语句如下解:类型说明语句如下 float a,b;float a,b;int I,j;int I,j;char c;char c;(1 1)a+b+i/j+c=12.3-a+b+i/j+c=12.3-8.2+5/4+a8.2+5/4+a =4.1+1+97=102.1(double =4.1+1+97=102.1(double型型)(2 2)i%j+c/i=5%4+a/5=1+97/5i%j+c/i=5%4+a/5=1+97/5 =1+19=20 =1+19=20