《第三章数据类型、运算符与表达式》由会员分享,可在线阅读,更多相关《第三章数据类型、运算符与表达式(44页珍藏版)》请在金锄头文库上搜索。
1、第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式数据类型数据类型常量与变量常量与变量不同类型数据间的转换不同类型数据间的转换运算符和表达式运算符和表达式1n一、 数据类型数据类型C C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型void定义类型定义类型typedef字符类型字符类型char枚举类型枚举类型enum整整 型型实型实型单精度型单精度型float双精度型双精度型double数组数组结构体结构体struct共用体共用体union短整型短整型short长整型长整型long整型整型int数据类型决定:数据类型决定:1. 数据占内存字节数数据占内
2、存字节数2. 数据取值范围数据取值范围3. 数据可进行的运算数据可进行的运算 和运算的合法性和运算的合法性语言程序设计 第三章数据描述C2基本数据类型基本数据类型类型符号关键字数的表示范围所占字节整型字符型实型有无signed int2-3276832767signed short int2 -3276832767signed long int4-214748364821474836472unsigned int065535404294967295unsigned long intunsigned short int2065535有float4-3.4e-383.4e38有double8-1.
3、7e-3081.7e308有long double16-1.2e-4932 1.2 e4932 有signed char1-128127说明: 数据类型所占字节数随编译系统不同而不完全相同。 如:Turbo C中int 占2字节,Visual C+中int占4字节。 语言程序设计 第三章数据描述C无 unsigned char10255 301 11 11 11 11 11 11 11int型:最大:3276710 00 00 00 00 00 00 00最小:-3276811 11 11 11 11 11 11 11unsigned int型:最大:6553500 00 00 00 00 0
4、0 00 00最小:0语言程序设计 第三章数据描述C4#include main()unsigned char c1;signed char c2;char c3;c1=130;c2=130;c3=130;printf(c1=%dnc2=%dnc3=%dn,c1,c2,c3);输出:c1=130c2=-126 C3=-126 字符型:字符型: signed char -128127 unsigned char 02555n二、二、 常量与变量常量与变量1. 标识符标识符n定义:用来标识变量、常量、函数等的字符序列定义:用来标识变量、常量、函数等的字符序列n组成:组成:n只能由只能由字母、数字、
5、下划线字母、数字、下划线组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或下划线下划线n大小写敏感大小写敏感n不能使用关键字不能使用关键字n长度:各个长度:各个C编译系统有自己的规定。编译系统有自己的规定。n命名原则:命名原则:n见名知意见名知意n不宜混淆不宜混淆 如如 o与与0例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab语言程序设计 第三章数据描述C62.2.常量常量定义:定义:程序运行时其
6、值不能改变的量(即常数)程序运行时其值不能改变的量(即常数)分类分类: :符号常量和直接常量符号常量和直接常量符号常量符号常量: :用标识符代表常量用标识符代表常量定义格式:定义格式: #define#define 符号常量符号常量 常量常量语言程序设计 第三章数据描述C例例 符号常量举例符号常量举例(ch3_1.c)#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=300如 #define PRICE 30 一般用大写字母一般用大写字母是宏定义预处理
7、命令,是宏定义预处理命令,不是不是C语句语句注意注意: 符号常量在作用域符号常量在作用域 内不能改变。内不能改变。7直接常量直接常量: :整型常量整型常量:123,-456, :123,-456, 实型常量实型常量: 2.5,-3.4,123.45e2, : 2.5,-3.4,123.45e2, 字符常量字符常量: : A A, , b b, , 字符串常量字符串常量: : dsefrewdsefrew, , $213.45$213.45,2.2.常量常量语言程序设计 第三章数据描述C8整型常量(整常数)整型常量(整常数)三种形式:三种形式:十进制整数:由数字十进制整数:由数字0 09 9和正
8、负号表示和正负号表示. . 如如 123,-456,0123,-456,0八进制整数:由数字八进制整数:由数字0 0开头开头, ,后跟数字后跟数字0 07 7表示表示. . 如如 0123,0110123,011十六进制整数:由十六进制整数:由0x0x开头开头, ,后跟后跟0 09,a9,af,Af,AF F表示表示. . 如如 0x123,0Xff0x123,0Xff例例 12 与与 12L例例 30000 为为int型型 65536 为为long int 型型整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在在整常量后加字母整常量后加字母u u或或U
9、 U,认为是认为是unsigned int 型常量型常量在在整常量后加字母整常量后加字母l l或或L L,认为是认为是long int 型常量型常量问题:问题:0123 = ( )100x123 = ( )100xff = ( )1083291255问题:问题:0123 = ( )100x123 = ( )100xff = ( )10语言程序设计 第三章数据描述C9表示形式:表示形式:十进制数形式:十进制数形式:(必须有小数点)(必须有小数点) 如如0.123, .123, 123.0, 0.0, 123.0.123, .123, 123.0, 0.0, 123.指数形式:指数形式:(e e或
10、或E E之前必须有数字;之前必须有数字; 指数必须为整数)指数必须为整数) 如如12.312.3e3 ,123E2, 1.23e4 e3 ,123E2, 1.23e4 e-5e-5, , 1.2E-3.5 1.2E-3.5 错误错误 实型常量的类型实型常量的类型默认默认doubledouble型型在在实型常量后加字母实型常量后加字母f f或或F F,认为它是认为它是float float 型型语言程序设计 第三章数据描述C实型常量(实数或浮点数)实型常量(实数或浮点数)10字符常量字符常量定义定义: :用用单引号单引号括起来的单个括起来的单个普通字符普通字符或或转义字符转义字符. 字符常量的值
11、:字符常量的值:该字符的该字符的ASCIIASCII码码值值( (即存储形式即存储形式) )如 A65, a97, 048 , n10如 a A ? n 101转义字符转义字符: :反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示11aaa 转义字符及其含义转义字符及其含义转义字符转义字符含义含义nvradddtbf“xhh转义字符转义字符含义含义换行换行垂直制表垂直制表回车(不换行)回车(不换行)响铃响铃单引号单引号13位位8进制数代表的字符进制数代表的字符水平制表水平制表(跳到下一个输出区)(跳到下一个输出区)退格退格换页换页反斜反斜线双引号双引号12位位16进制数
12、代表的字符进制数代表的字符如如 101 -A 012 -n 376 - x61 -a 60 -0 例例:A-101-x41-65每个输出区8列12转义字符举例转义字符举例 例例1main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:(屏幕显示)A B CI say:”How are you?”C ProgramTurbo C例例2 main() printf(“Y b=n”); 运行结果:屏幕显示:=打印机输出:13例例3. 5 转义字符的使用。转义字符的
13、使用。#include main() printf(*n); printf( ab ct derftgn); printf(htibbj kn);14字符常量与字符串常量不同字符常量与字符串常量不同字符串常量字符串常量定义:定义:用双引号用双引号(“”)(“”)括起来的字符序列括起来的字符序列存储:存储:每个字符串尾每个字符串尾自动自动加一个加一个 0 0 作为字符作为字符串结束标志串结束标志h e l l o 0例例 字符串字符串“hello”hello”在内存中在内存中a a 0例 a“a”例例 空串空串 “”0例: char ch; ch=“A”; 例: char ch; ch=A; 语
14、言程序设计 第三章数据描述C153. 变量变量n概念:概念:其值可以改变的量其值可以改变的量n变量名变量名与与变量值变量值例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符变量的使用:变量的使用:先定义,后使用先定义,后使用语言程序设计 第三章数据描述C3存储单元存储单元变量值变量值变量名变量名an变量定义的一般格式:变量定义的一般格式: 数据类型数据类型 变量变量1,变量,变量2,变量,变量n; 变量名变量名: 内存单元地址内存单元地址 变量值变量值:变量所在内存单元中的内容变量所在内存单元中的内容 例例1 int student; stadent=19
15、; /Undefined symbol statent in function main 例例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 16编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数3. 变量变量变量初始化变量初始化:定义时赋初值定义时赋初值 例: int a=1,b=-3,c; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1; /*错误*/
16、 变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义可执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);语言程序设计 第三章数据描述C17整型变量整型变量n占字节数随机器不同而不同占字节数随机器不同而不同nshortintlongn可用可用sizeofsizeof( (类型标识符)测量类型标识符)测量注意:注意:整型变量的
17、取值范围(超出范围,出现溢出)。整型变量的取值范围(超出范围,出现溢出)。 (见(见P44P44例例3.3)3.3) 实型变量实型变量floatfloat:占占4 4字节,提供字节,提供6 67 7位有效数字位有效数字doubledouble:占占8 8字节,提供字节,提供15151616位有效数字位有效数字Long doubleLong double:占占1616字节字节, ,提供提供1 18 81 19 9位有效数字位有效数字例例 float a;a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111.111*/语言程
18、序设计 第三章数据描述C注意注意:实型数据在进行舍入时,可能会产生误差。例实型数据在进行舍入时,可能会产生误差。例3.4输出: 111111.109375 111111.11100018字符型变量字符型变量字符变量存放字符字符变量存放字符ASCIIASCII码码charchar与与intint数据间可数据间可通用通用, ,并能并能进行算术运算进行算术运算。例例3.63.6:向字符变量赋整数。:向字符变量赋整数。 #include #include main()main() char c1,c2; char c1,c2; c1=97; c2=98; c1=97; c2=98; printf(“%
19、cprintf(“%c %cn”,c1,c2); %cn”,c1,c2); printf(“%dprintf(“%d %dn”,c1,c2); %dn”,c1,c2); 输出输出: a b 97 98c1=a; c2=b;19字符型变量字符型变量字符变量存放字符字符变量存放字符ASCIIASCII码码charchar与与intint数据间可数据间可通用通用, ,并能并能进行算术运算进行算术运算。例例 a=D; /* a=68; */ a=D; /* a=68; */ x=A+5; /* x=65+5; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */ s
20、=!+G /* s=33+71; */没有字符串变量,用字符数组存放20常量与变量综合举例常量与变量综合举例: #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语言程序设计 第三章数据描述C21n三、三、不同类型数据间的转换不同类型数据间的转换n隐式转换隐式转换n什么情况下发生什么情况下发生n运算转换运
21、算转换-不同类型数据混合运算时不同类型数据混合运算时n赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时n输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式n函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换n运算转换规则运算转换规则: :不同类型数据运算时先不同类型数据运算时先自动自动转换转换成同一类型成同一类型语言程序设计 第三章数据描述C22doublefloatlongunsignedintchar,short低高说明说明:必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转换例例 char ch
22、; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例例 int i; float f; double d; long l;23n显式转换(强制转换)显式转换(强制转换)n一般形式:一般形式:(类型名类型名)(表达式)表达式)例例 ( (int)(x+yint)(x+y) ) ( (int)x+yint)x+y (double)(3/2) (double)(3/
23、2) (int)3.6 (int)3.6 n说明:说明:强制转换得到所需类型的中间变量,原强制转换得到所需类型的中间变量,原 变量类型不变变量类型不变 例例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生较高类型向较低类型转换时可能发生语言程序设计 第三章数据描述C24四、四、 运算符和表达式运算符和表达式C运运算算符符算术运算符:(算术运算符:(+ - * / % + -+ - * / % + -)关系运算符:(关系运算符:(
24、 = != = !=)逻辑运算符:(!逻辑运算符:(! & |& |)位运算符位运算符 :(:( | & | &)赋值运算符:(赋值运算符:(= = 及其扩展)及其扩展)条件运算符:(条件运算符:(?:?:)逗号运算符:(逗号运算符:(, ,)指针运算符:(指针运算符:(* * & &)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(. -. -)下标运算符:(下标运算符:()其它其它 :(:(( ) -( ) -)语言程序设计 第三章数据描述C25n学习运算符应注意:学习运算符应注意:n运算符功能运算符功能n与运算量
25、关系与运算量关系n要求运算量个数要求运算量个数n要求运算量类型要求运算量类型n运算符优先级别运算符优先级别n结合方向结合方向n结果的类型结果的类型语言程序设计 第三章数据描述C26n算术运算符和表达式算术运算符和表达式n基本算术运算符:基本算术运算符: + + - - * / % * / %n结合方向:从左向右结合方向:从左向右n优先级:优先级: - - - -* / %* / % - - + -+ - (2) (3) (4)(2) (3) (4)说明:说明:n“-”“-”可为可为单目单目运算符时运算符时, ,右结合性右结合性n两整数相除,结果为整数两整数相除,结果为整数n% %要求两侧均为整
26、型数据要求两侧均为整型数据例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()语言程序设计 第三章数据描述C27n自增、自减运算符自增、自减运算符+ -n作用:使变量值加作用:使变量值加1 1或减或减1 1n种类:种类:n前置前置 +i, -i (+i, -i (先执行先执行i i+1+1或或i-1i-1,再使用再使用i i值)值)n后置后置 i+,i- (i+,i- (先使用先使用i i值值, ,再执行再执行i
27、i+1+1或或i-1i-1)例 j=3; k=+j; j=3; k=+j; j=3; k=j+; j=3; k=j+; j=3; j=3; printf(“%d”,+jprintf(“%d”,+j); ); j=3; j=3; printf(“%d”,jprintf(“%d”,j+); +); a=3;b=5;c=(+a)*b; a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4语言程序设计 第三章数据描述C28自增、自减运算符自增、自减运算符+ -+ -说明:
28、说明:+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,( (a+b)+a+b)+ -+ -结合方向:结合方向: 自右向左自右向左优先级:优先级:- + - -* / % -+ - + - -* / % -+ - (2) (3) (4)(2) (3) (4)例例 - -i+ i+ -(i+) -(i+) i=3; i=3; printf(“%d”,-iprintf(“%d”,-i+); +); /-/-3 3 例例 j+k; (j+)+k;j+k; (j+)+k;语言程序设计 第三章数据描述C29n赋值运算符和表达式赋值运算符和表达式n简单赋值运算符简单赋值运算符n符
29、号:符号: = =n格式:格式: 变量标识符变量标识符= =表达式表达式n作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符复合赋值运算符种类种类:+= -= *= /= %=+= -= *= /= %= = = = &= = |= &= = |=含义:含义: exp1 op= exp2exp1 op= exp2 exp1 = exp1 op exp2exp1 = exp1 op exp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a=3; d=func(); c=d+2;语言程序设计 第三章数据描述C30n说明说明
30、: :n结合方向:结合方向:自右向左自右向左n优先级优先级: 14n左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值转换赋值转换规则规则: :使赋值号右边表达式值使赋值号右边表达式值自动自动转换转换成其左边变量的类型成其左边变量的类型例 3=x-2*y; a+b=3;例 float f; int i; i=10; f=i;则 f=10.0例 int i; i=2.56; /结果i=2;语言程序设计 第三章数据描述C31例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/ b=
31、5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2语言程序设计 第三章数据描述C赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套说明说明: :结合方向:结合方向:自右向左自右向左优先级优先级: 14左侧必须是变量左侧必须是变量,不能是常量或表达式,不能是常量或表达式32说明说明: :结合方向:结合方向:自右向左自右向左优先级优先级: 14左侧必须是变量左侧必须是变量,不能是常量或表达式,不能是常量或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套例: a=12; a+=a-=
32、a*a例: int a=2; a%=4-1; a+=a*=a-=a*=3; /a=-264 等价于a=a+(a=a-(a*a)/a=0 等价于a=a+(a=a*(a=a-(a=a*3)语言程序设计 第三章数据描述C33n逗号运算符和表达式逗号运算符和表达式n形式:形式:表达式表达式1,表达式表达式2,表达式表达式nn结合性结合性:从左向右从左向右n优先级优先级: 15n逗号表达式逗号表达式的值:的值:等于表达式等于表达式n的值的值n用途:用途:常用于循环常用于循环for语句中语句中例例 a=3*5,a*4 a=3*5,a*4,a+5例例 x=(a=3,6*3) x=a=3,6*a例例 a=1;
33、b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表达式值表达式值60/a=15,表达式值表达式值20/赋值表达式,表达式值赋值表达式,表达式值18,x=18/逗号表达式逗号表达式,表达式值表达式值18,x=3/1,2,3/3,2,3语言程序设计 第三章数据描述C34逗号运算符和表达式逗号运算符和表达式形式:形式:表达式表达式1,表达式表达式2,表达式表达式n结合性结合性:从左向右从左向右优先级优先级: 15逗号表达式逗号表达式的值:等于表达式的值:等于表达式n的值的值用途:用途:常用于循环常用于循
34、环for语句中语句中例例:#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);运行结果:运行结果:x=3语言程序设计 第三章数据描述C35n关系运算符和表达式关系运算符和表达式 (见第五章(见第五章5.1)n关系运算符关系运算符n种类种类: = !=n结合方向:自左向右结合方向:自左向右n优先级别:优先级别:=!=优先级优先级6(高)(高)优先级优先级7(低)(低)例例 ca+b /c(a+b)ca+b /c(a+b) ab!=c /(ab)!=c ab!=c /(ab)!=c a=bc /a=(bc) a=
35、bc /a=(bc /a=(bc) a=bc /a=(bc)关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用,用1和和0表示表示例例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表达式值1/表达式值1/表达式值0/d=1/f=0语言程序设计 第三章数据描述C36n关系运算注意:关系运算注意:例例 若若a=0; b=0.5; x=0.3; 则则 a=x278在在C中是允许的,中是允许的, 值为值为0例例 int i=1, j=7,a; a=i+(j%4!=0); 则则a=2例例 a0 结果为结果为 A100 结果为结果为10语言程序
36、设计 第三章数据描述C37关系运算注意:关系运算注意:例例 注意区分注意区分“=”与与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例例 应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果为结果为可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1e-60语言程序设计 第三章数据描述C38ab!a!ba&ba|b真假真假假假真真n逻辑运算符和表达式逻辑运算符和表达式 (见见5.2)n逻辑运算符逻辑运算符n种类:种类:
37、 ! & |n逻辑运算真值表逻辑运算真值表C C语言中语言中, , 运算量运算量: : 0 0表示表示“假假” 非非0 0表示表示“真真” 运算结果运算结果: : 0 0表示表示“假假” 1 1表示表示“真真”真假假假假假真真假假真真真假真真语言程序设计 第三章数据描述C39! (2)& (11)| (12)高低例例 a=x & xb&xy a=b|x=y !a|abl优先级:l结合方向:! :从右向左& :从左向右| :从左向右 / (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)语言程序设计 第三章数据描述C40! (2)& (11)| (12)高高低低l优先
38、级:l结合方向:! :从右向左从右向左& :从左向右从左向右| :从左向右从左向右例例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d值为1值为0值为1值为1值为1值为1/(53)&2|(8(4-(!0) 值为1语言程序设计 第三章数据描述C41! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右短路特性短路特性:逻辑表达式求解时,并非所有的逻辑运算符:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才
39、执行该运算符表达式的解时,才执行该运算符例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值; 只在只在a、b都为真时,才判别都为真时,才判别 c的值的值例例 a|b|c /只在只在a为假时,才判别为假时,才判别b的值;的值; 只在只在a、b都为假时,才判别都为假时,才判别 c的值的值例例 a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)&(n=cd)/结果m=0,n=1语言程序设计 第三章数据描述C42n条件运算符与表达式条件运算符与表达式 (见见5.3.3)n一般形式:一般形式: expr1 ? expr2 : expr3n执行过程执行过程n功能:相当于条件
40、语句,但不能取代一般功能:相当于条件语句,但不能取代一般if语句语句例 if (ab) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);expr1取expr2值取expr3值非0=0语言程序设计 第三章数据描述C例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c0?1:(xb?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型可不同,表达式值取较高的类型类型例例 x?a:b /x=0,表达式值为表达式值为b; x0,表达式值为表达式值为a xy?1:1.5 /xy ,值为值为1.0; x=y ,值为值为1.5语言程序设计 第三章数据描述C44