《第2章C语言的数据类型与基本操作.ppt》由会员分享,可在线阅读,更多相关《第2章C语言的数据类型与基本操作.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章C语言数据类型与基本操作语言数据类型与基本操作2本章主要内容本章主要内容1、常量和变量2、标识符与关键字3、整型数在计算机中的存储方式4、有符号的数据类型和无符号的数据类型5、运算符及表达式6、不同类型数据间的转换数据数据类型类型构造类型构造类型指针类型指针类型空类型空类型char (字符类型字符类型)enum(枚举类型)枚举类型)整型整型实型实型float (单精度单精度)double (双精度双精度)short int (短整型短整型)long int (长整型长整型)int (整型整型)数组类型数组类型结构类型结构类型共同类型共同类型基本类基本类型型数值类型数值类型文件类型文
2、件类型C语言的数据类型 数据类型决定:数据类型决定:1.数据占内存字节数数据占内存字节数2.数据取值范围数据取值范围3. 其上可进行的操作其上可进行的操作42.1.1 常量2.1 常量与变量常量与变量在程序运行过程中,其值不改变的量称为常量。在C语言中,常量有不同的类型:整型常量(int)短整型(short int)长整型(long int)无符号型(unsigned int) 实型常量(float和double) 字符常量(char) 字符串常量51整型常量十进制常量如15,19,123,-345等 。八进制常量以数字0 0开头如:05,012,0123十六进制常量以数字0 0和字母x x(
3、或大写字母X)开头如:0 x10,0Xff,0X8十进制5,10,83十进制数16,255,862实型常量用小数形式表示如:345,.345, 345.0,3.14159指数形式表示1.5e5,2.9e-71.5105,2.910-7。注意:指数形式的浮点常量E或e前面必须有数字,E或e后面必须为整数。73字符常量用一对单撇号括起来的一个字符如a,A,?, # 单撇号只是字符与其他部分的分隔符/定界符,不是字符常量的一部分。不能用双引号代替撇号,如a不是字符常量。字符型常量: 它是用一对单撇号括起来的一个字符如a,A,?, # 等 转义字符 有些字符和命令无法通过键盘直接输入,因而借用一个符号
4、或者数字来表示,C语言用反斜杠“”来表示转义字符的起始符,转义字符的表示有三个方面: 用反斜杠开头后面跟一个字母代表一个控制字符; ntrb回车换行 回车不换行 退格 水平跳格 代表字符,用代表字符。 用“”后跟1到3个八进制数代表ASCII码为该八进制数的字符;用“x”后跟12个十六进制数代表ASCII码为该十六进制数的字符。 101或 x41 表示A363或 xf3 表示 012或 x1A 表示 100或 x40 表示 【例1】打印人民币符号¥ 简称字符printf(Yb=);9例2.2 main () char ch; ch=362; printf (%cn,ch); printf (c
5、hinan101tn);运行结果:屏幕显示:china A 105字符串常量hello“Programming in C“A”“a” “把用一对双撇号括起来的零个或多个字符序列称为字符串常量。字符串以双撇号为定界符,但双撇号并不属于字符串。要在字符串插入撇号,应借助转义字符。要处理字符串I say: Goodbye! 时,可以把它写为I say: Goodbye! 。字符串常量 字符串中的字符数称为该字符串的长度。字符串常量在机器内存储时,系统自动在字符串的末尾加一个“字符串结束标志”,它是转义字符“0”。 h e l l o 0例 字符串hello在内存中例 空串 0104101108108
6、1110注:注:字符与字符串的区别字符与字符串的区别. .a a 0例 aa126符号常量【例2.3】符号常量举例#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=300 定义定义:用一个标识符代表一个常量 #define 标识符 代表的常量使用符号常量的好处是: (1)含义清楚。 (2)在需要改变一个常量时能做到“一改全改”。 常用大写字母,与变量名区分开来。 变量 变量是指在程序的运行过程中,其值可以发生变化的量变量是指在程序的运行过程中,其值可以
7、发生变化的量声明变量的目的:声明变量的目的:(1)存放需要加工的初始值)存放需要加工的初始值(2)存放加工的中间结果)存放加工的中间结果(3)存放加工的最终结果)存放加工的最终结果需要理解的三个概念需要理解的三个概念变量名、变量的存储空间、变量的值变量名、变量的存储空间、变量的值int a=3;1101 afff地址表示地址表示存储空间存储空间a变量名变量名3变量的值变量的值141.变量的声明 变量声明的格式为:数据类型符 变量名1,变量2,变量名n;例如:int x;int y;或等效为:int x,y;注意:注意:定义变量的语句必须以“;”号结束,在定义一个语句中也可以同时定义多个变量,变
8、量之间用“,”隔开。对变量的定义可以在函数体之外,也可以在函数体或复合语句中。 152变量的初始化 C语言允许在说明变量的同时对其初始化, int sum=0; /*说明变量sum的类型为整型,初始值为0*/float pi=3.1416;char c=w;【例2.4】 整型变量的定义和引用。# include stdio.hmain()int x ,y,z,s; /*基本整型变量定义,一次可定义一个或多个变量*/x=3;y=4;z=5; /*整型变量的引用*/s=x+y+z; /*整型变量的引用*/printf(ns=%d,s);运行结果:运行结果:S=12注意:注意:(1)不同类型的数据在
9、内存中占据不同长度的存储区,而且采用不同的表示方式。(2)一种数据类型对应着一个值的范围。(3)一种数据类型对应着一组允许的操作。162.2 标识符和关键字-标识符一个标识符可由字母、数字和下划线组成 ;必须用字母或下划线开头;大小写要区分 ;不能用保留关键字作变量名 ;避免混淆的字母 ;例如 : l 与 I, o 与 0.例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $1231732 个关键字:(auto break case char constcontinu
10、e default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while-关键字182.3 整型数在计算机中的存储方式计算机系统的内存储器,是由许多称为字节的单元组成的,1个字节由8个二进制位(bit)构成,每位的取值为0/1。最右端的那1位称为“最低位”,编号为0;最左端的那1位称为“最高位”,而且从最低位到最高位顺序,依次编号。 原码、反码和补码的相
11、关知识计算机中,所有的整数都是以补码的形式进行存储的正整数的原码、反码和补码相同求负整数的补码步骤如下:(1)求负整数的原码(2)在原码的基础上求反码(3)在反码的基础上加1原码 5的八位二进制的原码为0000 0101-5绝对值的八位二进制表示为0000 0101正整数的原码是这个数本身。 负整数的原码求解方法: 负整数的绝对值用二进制表示,最高位用于表示符号,1表示负整数,0表示正整数。求-5的原码:1000 0101-5原码的八位二进制表示:求5的原码:反码 反码表示法规定:正整数的反码和原码相同负整数数的反码是对该数的原码除符号位外各位取反求5的反码:5的反码的八位二进制为0000 0
12、101求-5的反码: -5的原码的八位二进制表示为1000 0101-5的反码的八位二进制表示为1111 1010补码 补码表示法规定:正整数的补码和原码相同 负整数的补码是在该数的反码的基础上加1,即最后(即最右边)一位上加1。 求5的补码: 5的补码的八位二进制为0000 0101求-5的补码:-5的反码的八位二进制表示为1111 1010-5的补码的八位二进制表示为1111 1011 C 语言中所有的整数都是以补码的方式存储的 例:求-50在内存中的存储结果(假定用16位来存储)。-50绝对值的原码:0000 0000 0011 0010 -50的原码:1000 0000 0011 00
13、10 -50的反码:1111 1111 1100 1101 -50的补码:1111 1111 1100 1110 例:把内存中以补码形式存储的数据1111 1111 1111 0110转化为十进制整数。 数据的补码表示:1111 1111 1111 0110除符号位外,各位取反:1000 0000 0000 1001最低位加1: 1000 0000 0000 1010-10 例:把内存中以补码形式存储的数据1111 1111 1111 0110转化为十进制整数。 数据的补码表示:1111 1111 1111 0110除符号位外,各位取反:1000 0000 0000 1001最低位加1:100
14、0 0000 0000 1010-10262.4 有符号的数据类型和无符号的数据类型 类型类型标识符所占字节数取值范围及精度字符型signed char1-128+127unsigned char10255整型signed int4-214 783 648+214 783 647signed short int2-32 768+32 767signed long int4-214 783 648+214 783 647unsigned int404 294 967 295unsigned short int2065535unsigned long int404 294 967 295实型flo
15、at4-3.410-383.41038,67位有效数字double8-1.710-3081.710308,1516位有效数字long double16-1.210-49321.7104932,1819位有效数字272.5 运算符及表达式 算术算术运算符运算符:+ - + - * * / % + - / % + -关系关系运算符运算符: = != = !=逻辑逻辑运算符运算符:! & |& |位位运算符运算符: | & | &赋值赋值运算符运算符: : = += -= += -= 条件条件运算符运算符: ? :? :逗号逗号运算符运算符: : , ,地址地址运算符运算符:* * & &求字节数求
16、字节数运算符运算符: sizeofsizeof强制类型转换:强制类型转换:(type-name(type-name)分量分量运算符运算符: . -. -下标下标运算符运算符: 其他其他 :( ) -( ) -282.5.1 赋值运算符和赋值表达式1赋值运算符与赋值表达式 “=”就是赋值运算符。赋值表达式:由赋值运算符组成的表达式称为赋值表达式。它的一般形式:=如:x=5;赋值表达式的求解过程:将赋值运算符右侧的表达式的值赋给左侧的变量。赋值的含义是将赋值运算符右边的表达式的值存放到左边变量名标识的存储单元中。29说明:说明:(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或由常量
17、、变量、函数调用组成的表达式。例如:x=10,y=x+10,y=func()都是合法的赋值表达式,12=a,2*a=3*5+55都不是合法的赋值表达式。(2)赋值符号“=”不同于数学的等号,它没有相等的含义,“=”才表示相等。例如:C语言中x=x+1是合法的,而数学上不合法。(3)赋值运算时,当赋值运算符两边的数据类型不同时,将由系统自动进行类型转换。转换原则是:先将赋值号右边表达式的类型转换为左边变量的类型,然后赋值。赋值运算符的优先级仅仅高于逗号运算符,具有自右向左的结合性。应用举例 【例2.8】有语句int a=2,b=5,x,y;执行x=y=a+b;后x,y的值。abxy2577【例2
18、.9】有定义:int a,b,c;求执行表达式a=(b=65)/(c=6);后a的值。abc65610复合赋值运算符 a =b +a=a+b 相当于 a=a-b a-=b a*=b a=a*b a/=b a=a/b a%=b a=a%b 相当于 相当于 相当于 相当于 y*=a+b; y=y*(a+b) 相当于 【例2.10】有定义: int a=6,b=8;求执行a*=b+=12后,a的值。 a6b8b+=12 b=b+12 20a*=ba=a*b 120 复合赋值运算符 【例2.11】 有定义:“int a=12;”,执行表达式a+=a-=a*=a后,a的值为( )。A12B144 C0
19、D132a*=aa12a=a*a 144a-=a a=a-a 0a+=a a=a+a 0332.5.2 算术运算符和算术表达式算术运算符包括:+(加),-(减),*(乘),/(除),%(取余),+(增1运算符或称自增运算符),-(减1运算符或称自减运算符)。双目运算符的两个操作数类型可以不同,运算前遵循类型的一般算术转换规则自动转换成相同的类型,运算结果的类型与转换后操作数的类型相同。类型的一般算术转换规则的基本原则是值域较窄的类型向较宽的类型转换。 算术运算符和算术表达式 算术运算符包括:算术运算符包括:+,-,*,/,%,+,-左操作数右操作数运算符13+5 13.0+5结果为整数18 结
20、果为浮点数18.0 d 97 结果为整数3 1/2 结果为整数0 1.0/2结果为浮点数0.5 5%10 结果为整数5 10%5 结果为整数0 1/2.0 1.0/2.0 自增、自减运算符 + 自增运算符,其作用是使变量的值自加1 - - 自减运算符,其作用是使变量的值自减1 +i,-i 前缀运算:在使用i之前,先使i的值自增(或自减)1 i+,i- 后缀运算:在使用i之后,再使i的值自增(或自减)1 【例】有定义: int i=8,j;求执行 j=i+;后i,j的值i8j89【例】有定义: int i=8,j;求执行 j=+i;后i,j的值ij8 99应用举例应用举例【例2.12】假设变量i
21、,j,k的值分别为3,5和3,求执行表达式“m=(+k)*j;”和“n=(i+)*j;”中的m和n的值。ijkmn353 420154应用举例应用举例习题习题1、下列算术运算符中,只能用于、下列算术运算符中,只能用于整型数据的是(整型数据的是( )。)。A- B+ C/ D% 习题2、假设有以下变量定义:假设有以下变量定义:int k=7,x=12;则能使值为则能使值为3的表达式是(的表达式是( )Ax%=(k%=5) Bx%=(x-k%5)Cx%=k+k%5 D(k%=5)(x%=k)D20C2382.5.3 长度测试运算符长度测试运算符sizeof长度测试运算符sizeof可用来测试某个类
22、型的变量所占用计算机内存空间的字节长度。格式为:sizeof(类型名)例:main( )printf(char:%d bytesn,sizeof(char);printf(short:%d bytesn,sizeof(short);printf(int:%d bytesn,sizeof(int);printf(long:%d bytesn,sizeof(long);printf(float:%d bytesn,sizeof(float);printf(double:%d bytesn,sizeof(double);return 0;392.5.4 关系运算符和关系表达式1关系运算符关系运算实际
23、上就是比较运算,即比较两个运算对象值的大小。符号优先级(大于),=(大于或等于)高=(等于),!=(不等于)低注意:注意: (1)关系运算符为双目运算符,结合方向为自左至右。 (2)关系运算符的结果为真(1)或假(0),C语言中没有逻辑值。 (3)算术运算符高于关系运算符。402.关系表达式 由关系运算符、运算对象以及小括号组成的表达式称为关系表达式。当表达式成立时,返回值为整型值1;当表达式不成立时,返回值为整型值0。ca+b 等同于c(a+b)a=bc等同于a=(bc)ab!=c等同于(ab)!=c【例2.14】 请注意下列给出的表达式及其返回值。 65的返回值是0。 若a=3,b=5,则
24、a=3+10的返回值是0。 若x=90,则x53;printf(%dn,x);0 【例2.16】 已知a=3,b=2,c=1,则表达式ab=c的值为( )。 1 对于关系表达式要注意如下事项:一个关系式中含有多个关系表达式时,要注意与数学式的区别。应避免对实数作相等或不等的判断,因为实数在内中存放时有一定的误差。 逻辑运算符与逻辑表达式 & | ! 逻辑运算符: 用逻辑运算符将关系表达式连接起来就构成逻辑表达式。逻辑表达式: 【例2.17】 分析逻辑表达式!(53)&(23)!(1)0逻辑表达式的运算结果:1(“真”),0(“假”)a&b x|y !z 逻辑表达式具有唯一真值的变量2、逻辑运算
25、符与逻辑表达式 C语言逻辑表达式的特性: 在计算逻辑表达式时,只有在必需执行下一个表达式才能求解时,才求该表达式。 逻辑与(&)运算表达式中,只要前面一个表达式被判定为“假”,系统不再判定其后的表达式,整个表达式的值为0。a+&b+ 逻辑或(|)运算表达式中,只要前面一个表达式被判定为“真”,系统不再判定或求解其后的表达式,整个表达式的值为1。a=0,b=0a+|b+ a=1,b=1【例2.19】 定义: int i=10,s=0;执行下列语句s=+s|+i;后s和i的值是多少?i10s0 143【例2.18】 已知year为整型变量,不能使表达式(year%4=0&year%100!=0)|
26、(year%400 =0)的值为“真”的数据是( )。A1990B1992C1996D2000 A【例2.19】 定义:“int i=10,s=0;”,分别执行下列语句,s和i的值是多少?s=+s|+i;答案为:s=1,i=10 【例2.20】 定义:“int x=0,y=0,z=0;”,分别执行下列语句后,各变量的值是多少?+x&+y|+z 答案为:x=1,y=1,z=0 应用举例已知已知A,B,C,D四人中有一个人是小偷,并且,这四个人中每个四人中有一个人是小偷,并且,这四个人中每个人要么说真话,要么说假话。在审讯过程中,这四个人分别回答如人要么说真话,要么说假话。在审讯过程中,这四个人分
27、别回答如下:下:A说:说:B没有偷,是没有偷,是D偷的。偷的。B说:我没有偷,是说:我没有偷,是C偷的。偷的。C说:说:A没有偷,是没有偷,是B偷的。偷的。D说:我没有偷。说:我没有偷。现要求根据这四个人的回答,写出能确定谁是小偷的条件。现要求根据这四个人的回答,写出能确定谁是小偷的条件。int a,b,c,d;b+d=1真真b+d=1假假b+d=1b+cb+ca+ba+bb+c=1b+c=1a+b+c+da+b+c+da+b+c+d=1&b+d0 1=1b+d1 0=1=1=1=1=1=1=1452.5.6 条件运算符与条件运算表达式条件运算符“?:”是C语言提供的惟一一个三目运算符。条件运
28、算表达式的一般格式为:表达式1?表达式2:表达式3【例2.20】 从键盘读入一个整数赋给x,如果x大于等于0,把x的平方赋给y,否则把x的2倍赋给y。# include stdio.hvoid main()int x,y;scanf(%d,&x);y=x=0?x*x:2*x;printf(y=%dn,y);【例2.21】 已定义“int x=4,b=5,y;”,执行语句:y=+xb?x:b-+x?+b:x后,x、b、y的值分别为_。答案为x=6,b=4,y=6 【例2.24】 分析下列程序的输出结果。#include stdio.hvoid main()int i,j,k,a=3,b=2;i=
29、(-a=b+)?-a:+b;j=a+;k=+b;printf(i=%d,j=%d,k=%dn,i,j,k);i=1,j=1,k=4 【例2.25】 请编制程序,任意输入两个整数,输出其中较小者。 main() int n1,n2,min;clrscr();printf(input two number(n1,n2): );scanf(%d,%d,&n1,&n2);min=(n1n2)?n2:n1;printf(min=%d,min);运行时,按屏幕提示操作:input two number(n1,n2):3,5结果为:min=3【例2.26】 编制程序,输入大写字母,则输出小写字母;输入小写字
30、母,则输出大写字母。main()char ch;printf(input any letter: );scanf(%c,&ch);ch=(ch=A)&(chb?x:b-+x?+b:x后,x、b、y的值分别为_。 xyb45554666习题:找出三个整形数据的最大数int a,b,c ;scanf(%d%d%d,&a,&b,&c);,maxab? a : b ;(ac?a:c)(bc?b:c)max= 472.5.7 逗号运算符与逗号表达式逗号运算符,又称“顺序求值运算符”。逗号表达式的一般形式为:表达式1,表达式2或表达式1,表达式2,表达式3,表达式n;运算过程是:自左至右依次计算表达式1,
31、表达式2,表达式n的值,而整个逗号表达式的值取最后的表达式n的值。【例2.27】 分析下列逗号表达式的计算过程及结果。 3+5,6*3 表达式的值是18。 a=(3+5,6*3) a的值是18,此为赋值表达式。 a=3+5,6*3 a的值是8,表达式的值是18(先作赋值运算)。 a=3+5,6*a a的值是8,表达式的值是48。 (a=3+5,6*a),a+100 a的值是8,表达式的值是108。 使用逗号表达式应该注意如下事项:逗号表达式可以和另外一个表达式组成一个新的逗号表达式。并不是在所有出现逗号的地方都组成逗号表达式。如在变量说明中和函数参数表中的逗号只是用做个变量之间的间隔符。 48
32、2.5.7 逗号运算符与逗号表达式【例2.27】下面是给字符变量赋值的六种方式,仔细体会字符数据的表示方法和逗号表达式的用法。#include stdio.h main( ) char c1, c2, c3, c4, c5, c6; c1=A, c2=x41, c3=101, c4=65, c5=0 x41, c6=0101; printf(%c, %c, %c, %c, %c, %c n, c1, c2, c3, c4, c5, c6); printf(%d, %d, %d, %d, %d, %d n, c1, c2, c3, c4, c5, c6); return0;492.5.8 位运算
33、位运算的作用是对运算对象按照二进制位进行操作的运算;它能够对字节或字中的实际位进行检测、设置或位移;它运算的对象只能是字符型或整型变量以及它们的变体,对其他类型的数据不适用。 501.位运算符 位运算符还可以与赋值运算符相结合,成为位运算赋值操作。 运算符作用举例等价表达式=左移赋值a=na=a=右移赋值b=nb=bn&=位与赋值a&=ba=a&b=位异或赋值=bb|=位或赋值a|=ba=a|b512.位运算的功能 (1)按位取反()。是单目运算符,用来对一个二进制数按位取反,也就是说将原来的0变为1,1变为0。【例2.25】 分析下列程序的输出结果。void main()unsigned c
34、har a,b;a=0 x9a; b=a;printf (a:%x b:%xn,a,b);运行结果为:运行结果为:a:9a b:65 52(2)按位与(&)。参加运算的两个数据,按照二进制位进行“&”运算,如果两个相应的二进制位都为1,则该位的结果为1,否则为0。即0&0=0,0&1=0,1&0=0,1&1=1。按位与有以下功能:1)清0。如果想将一个单元清0,即使全部二进制位为0,只要找一个二进制数,其中的各位符合以下条件:原来的数中为1的位,新数中的相应位为0。然后将二者进行&运算,可以达到清0的目的。也就是原数取反,再和原数进行按位与,就可以达到清0的目的。 【例2.26】 分析下列程序
35、的运行结果。void main()int x;x=x&x;printf (%dn,x);解析:假如x的值为00101011,x后为11010100,则 00101011 &11010100 000000002)取一个数中的某些指定位。如果有一个整数a(2个字节),想要其中的低字节,只需要将a与377按位与即可。 53(3)按位或(|)。两个相或的二进制位中只要有一个为1,该位或的结果就为1,即:0|0=0,0|1=1,1|0=1,1|1=1。“按位或”常用来将某一个数据的某些特点位置置1。如:a是一个整数(16位),表达式a|0377使得低8位全置1,高8位保留原样。 【例2.27】 分析下列
36、程序的输出结果。# include stdio.hvoid main()char x;x=B;x=x|0 x80;printf (%dn,x);解析:字符B的二进制码为01000010,经过运算x=x|0 x80后,x的值为11000010,由于它是补码存储,以十进制数输出结果为-62。 54w 按位异或( )。异或运算符也称XOR运算符。它的作用是判断两个相应位的值是否“相异”(不同),若相异则结果为1(真),否则为0。即:0 0=0,0 1=1,1 0=1,1 1=0。w 按位异或有以下应用:1)使特定位翻转。假设有01000010,想使低4位翻转,只要与00001111异或,异或后的结果
37、为01001101。2)与0相异或保留原值。例如,0111101000000000的结果为01111010。又如,对负数的补码A求反码的方法是此数A与7FH异或,即77FH。3)不用中间变量就可以交换两个数的值。 程序运行后的结果为:程序运行后的结果为:a=4 b=3 55(5)位移(左移)。1)左移()。移位后,右端位出现的空位补0,移出左端之外舍弃,例如:a=a)。a=a2表示将a的各二进制位右移2位,移到右端的低位被舍弃,对于无符号数,右移后高位补0。如a=017时,a的二进制码为00001111,a=a2为0000001111此二位将被舍弃 562.6 不同类型数据间的转换C语言允许数
38、据的值从一种类型转换为另一种类型。下列情况之一会引起类型转换:(1)当双目运算符的两个操作数类型不相同时,引起一般算术转换(或称运算符转换)。(2)当一个值赋予一个不同类型的变量时,引起赋值转换。(3)当一个值被强制为另一个类型时,引起强制类型转换。(4)当某个值作为参数传给一个函数时,引起函数调用转换。571.一般算术转换一般算术转换(简称算术转换)的基本规则为:双目运算符的两个操作数中,值域较窄的那个类型向值域较宽的那个类型转换。值域是类型所能表示的值的最大范围。被转换的两个操作数可为任意类型。 转换规则如下:(1)将表达式中的char或short全部自动转换为相应的int型,将float
39、转换为double型。(2)当运算符的两端运算类型不一致的时候,存储值域窄的向值域较宽的转换。一般算术转换是在运算过程中自动进行的。 582.强制类型转换规则强制类型表达式的形式为:(类型名)操作数 说明:“类型名”是强制类型运算符(或类型强制符),它将操作数转换为由“类型名”指定的类型,表达式的结果和类型与转换后的操作数的值和类型相同。强制转换与赋值转换的区别是:(1)强制转换是显式方式,赋值转换是隐式方式,前者是人为的,后者是自动的。(2)强制转换的结果类型由强制运算符指定的类型名决定,赋值转换的结果类型由赋值运算符的左操作数的类型决定。(char)(3-3.14159*x) /*得到字符型数据*/k=(int)(int)x+(float)i+j) /*得到整型数据*/(float)(a=99) /*得到实型单精度数据*/ 【例2.29】 # include stdio.hvoid main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);运行结果为:运行结果为:x=3.600000,i=3【例2.30】 设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的结果为( )。A2.5 B7 C4.7 D2.75A
限制150内