第二章数据类型、运算符号与表达式

上传人:壹****1 文档编号:584014349 上传时间:2024-08-30 格式:PPT 页数:51 大小:752.04KB
返回 下载 相关 举报
第二章数据类型、运算符号与表达式_第1页
第1页 / 共51页
第二章数据类型、运算符号与表达式_第2页
第2页 / 共51页
第二章数据类型、运算符号与表达式_第3页
第3页 / 共51页
第二章数据类型、运算符号与表达式_第4页
第4页 / 共51页
第二章数据类型、运算符号与表达式_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第二章数据类型、运算符号与表达式》由会员分享,可在线阅读,更多相关《第二章数据类型、运算符号与表达式(51页珍藏版)》请在金锄头文库上搜索。

1、C C程序设计程序设计南京师范大学主讲教师主讲教师: 汪闽汪闽2.1 程序设计概述2.3 数据类型2.4 常量与变量2.5 不同类型数据间的转换第二章 数据类型、运算符号与表达式2.6 运算符和表达式2.2 预备知识:数制之间的转换一个程序应包括一个程序应包括 1)对数据的描述和对数据的描述和 2)对数据处理的描述对数据处理的描述 1对数据的描述,即数据结构。数据结构是计算机学科的核心课对数据的描述,即数据结构。数据结构是计算机学科的核心课程之一,有许多专门著作论述,本课程就不再赘述。程之一,有许多专门著作论述,本课程就不再赘述。 在在C语言中,系统提供的数据结构,是以数据类型的形式出现的。语

2、言中,系统提供的数据结构,是以数据类型的形式出现的。 2对数据处理的描述,即计算机算法。算法是为解决一个问题而对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃思采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:提出一个公式: 数据结构数据结构 + 算法算法 = 程序程序 实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,并采用结构化方法来表示。并采用结构化方法来表示。 2.1.1 程序的组成程序的组成

3、2.1 程序设计概述程序设计概述2.1.2 结构化程序设计方法结构化程序设计方法1 1、含义:规范程序设计风格和程序结构。、含义:规范程序设计风格和程序结构。 2 2、思路:将复杂的问题分阶段处理、思路:将复杂的问题分阶段处理 3 3、方法:自顶向下、逐步细化、模块化设计、方法:自顶向下、逐步细化、模块化设计、结构化编码结构化编码 1、自然语言自然语言2、流程图流程图3、伪代码伪代码4、计算机语言计算机语言2.1.3 算法的表示方法算法的表示方法S1:输入:输入n的值的值. S2:置变量:置变量i的值为的值为2. S3:求解:求解m=n%i ;若若m=0,转向转向S6,否则执行否则执行S4.

4、S4: 变量变量i的值自加的值自加1. S5: 判断判断in是否成立是否成立;若为真则转向若为真则转向S3,否则执行否则执行S6. S6: 判断判断i2n2)流程图流程图N-SN-S流程图流程图AB顺序结构顺序结构P成立成立不成立不成立AB选择结构选择结构当当P成立成立A循环结构循环结构2),2),判断其是否为素数判断其是否为素数 输入输入n n的值的值 i=2 当当in m=n%i m=0 Y N Y N 结束循环结束循环 i=i+1 Y Y in N N n n是非素数是非素数 n n是素数是素数 打印打印x x的绝对值(伪代码)的绝对值(伪代码)If x is positive then

5、 If x is positive then Print x Print x Else Else Print -x Print -x 0 ) if ( x 0 ) printfprintf( |x|=%d , x ); ( |x|=%d , x ); else else printfprintf( |x|=%d , -x ); ( |x|=%d , -x ); 计算机中数的表示及进制转换计算机中数的表示及进制转换n数码、基与权数码、基与权数码:表示数的符号数码:表示数的符号基:数码的个数基:数码的个数 (10 (10 进制进制:10):10)权:每一位所具有的值权:每一位所具有的值n数制数制

6、不同的基和权构成不同的数制不同的基和权构成不同的数制 2 2进制、进制、8 8进制、进制、1010进制、进制、1616进制、进制、2.2 数制之间的转换数制之间的转换2.2.1 数制的基本概念数制的基本概念数制基权表示数码特点10,10,10,十进制数0910逢十进一二进制数0122,2,2,逢二进一八进制数0788,8,8,逢八进一十六进制数09,AF,af1616,16,16,逢十六进一十进制:4956= 410+910 +510+610二进制:1011=12+02 +12+12十六进制:81AE=816+116 +1016+1416八进制:4275=48+28 +78+58n二进制、八进

7、制、十六进制转换成十进制二进制、八进制、十六进制转换成十进制 方法:按权相加方法:按权相加2.2.2 各种进制之间的转换各种进制之间的转换n 十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为0例 把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161 C B 余11余12余 1续续: :各种进制之间的转换各种进制之间的转换l 二进制转换成八进制: 从右向左,每3位一组(不足3位左补0),转换成八进制l 八进制转换成二进制: 用3位二进制数代替每一位八进制数例 (1101001)2=(001,101,001)2=(151)8例

8、(246)8=(010,100,110)2=(10100110)2000 0001 1010 2011 3100 4101 5110 6111 7n n 二进制与八进制之间的转换二进制与八进制之间的转换续续: :各种进制之间的转换各种进制之间的转换l 二进制转换成十六进制: 从右向左,每4位一组(不足4位左补0),转换成十六进制l 十六进制转换成二进制: 用4位二进制数代替每一位十六进制数例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20

9、000 00001 10010 20011 30100 40101 50110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 Fn二进制与十六进制之间的转换二进制与十六进制之间的转换续续: :各种进制之间的转换各种进制之间的转换n n内存以字节为单元组成内存以字节为单元组成n n每个字节有一个地址每个字节有一个地址n n一个字节一般由一个字节一般由8 8个二进制位组成个二进制位组成n n每个二进位的值是每个二进位的值是0 0或或1 101234567012345678910.76432512.2.3 字节和位字节和位2.2.4 原码

10、、反码与补码原码、反码与补码 n原码:最高位为符号位,其余各位为数值本身的绝对值原码:最高位为符号位,其余各位为数值本身的绝对值n反码:反码:正数:反码与原码相同正数:反码与原码相同负数:符号位为负数:符号位为1,其余位对原码取反,其余位对原码取反n补码:补码:正数:原码、反码、补码相同正数:原码、反码、补码相同负数:最高位为负数:最高位为1,其余位为原码取反,再对整个数加,其余位为原码取反,再对整个数加1正数的原码、反码、和补码是相同的;负数的原码: 符号位为1,其余不变; (一个实例) 反码:取反; 补码:取反,再加1;负数补码转换成十进制数:最高位是符号位(不动),取反加1 数据类型总表

11、数据类型总表C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整 型实型单精度型float双精度型double数组结构体struct共用体union短整型短整型short长整型long整型int数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作2.3 数据类型数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int06

12、55353204294967295unsigned longunsigned short16065535有char8-128127无unsigned char80255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:请注意int和unsigned int2.3.1 2.3.1 基本数据类型基本数据类型有float323.4e-383.4e38有double641.7e-3081.7e308b _above $123M.D.John3days#33char$123ab一般用大写字母是宏定义预处理命令,不是C语句直接常量:整型常量 请点击:实型常量 请点击:字符常量 请点击

13、:字符串常量 请点击:如 #define PRICE 30定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式: #define 符号常量 常量例 符号常量举例(ch2_1.c)#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=3002.4.22.4.2常量常量三种形式:三种形式:十进制整数:由数字十进制整数:由数字0909和正负号表示和正负号表示. .如如 123,-456,0123,-456,0八进制整数:由数字八进制

14、整数:由数字0 0开头开头, ,后跟数字后跟数字0707表示表示. .如如0123,0110123,011十六进制整数:由十六进制整数:由0x0x开头开头, ,后跟后跟09,af,AF09,af,AF表示表示. . 如如0x123,0Xff0x123,0Xff例 12 与 12L例 30000 为int型 65536 为long int 型整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在整常量后加字母在整常量后加字母l l或或L L,认为它是认为它是long long intint 型常量型常量问题:0123 = ( )100x123 = ( )100

15、Xff = ( )1083291255问题:0123 = ( )100x123 = ( )100Xff = ( )10u整型常量(整常数)整型常量(整常数)表示形式:表示形式:十进制数形式:(必须有小数点)十进制数形式:(必须有小数点) 如如0.123, .123, 123.0, 0.0, 0.123, .123, 123.0, 0.0, 123.123.指数形式:(指数形式:(e e或或E E之前必须有数字;指数必须为整数)如之前必须有数字;指数必须为整数)如12.3e3 12.3e3 ,123E2, 1.23e4 , 1e-5 , 1.2E-3.5 ,123E2, 1.23e4 , 1e-

16、5 , 1.2E-3.5 实型常量的类型实型常量的类型默认默认doubledouble型型在实型常量后加字母在实型常量后加字母f f或或F F,认为它是认为它是float float 型型u实型常量(实数或浮点数)实型常量(实数或浮点数)定义定义: :用单引号括起来的单个普通字符或转义字符用单引号括起来的单个普通字符或转义字符. . 字符常量的值:该字符的字符常量的值:该字符的ASCIIASCII码值码值转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号1-3位8进制数代表的字符水平制表退格换页反斜线双引号1-2位16进制数代表的字符如 101 -

17、A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-65如 A65, a97, 048 , n10如 a A ? n 101转义字符转义字符: :反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示例 转义字符举例(ch2_001.c,ch2_004.c) main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurb

18、o C例 main() printf(“Yb=n”); 运行结果:屏幕显示:=打印机输出:u字符常量字符常量习题习题3.63.6上机上机2626aaaaaa字符常量与字符串常量不同字符常量与字符串常量不同定义:用双引号定义:用双引号( (“”“”) )括起来的字符序列括起来的字符序列存储:每个字符串尾自动加一个存储:每个字符串尾自动加一个 00 作为字符串作为字符串结束标志结束标志h e l l o 0例 字符串“hello”在内存中a a 0例 a“a”例 空串 “”0例: char ch; ch=“A”; 例: char ch; ch=A; u字符串常量字符串常量编译程序根据变量定义为其分

19、配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数n n概念:其值可以改变的量概念:其值可以改变的量n n变量名与变量值变量名与变量值n n变量定义的一般格式:变量定义的一般格式: 数据类型数据类型 变量变量11,变量,变量2 2,变量,变量n;n;变量初始化:定义时赋初值 例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;(X)变量的使用:先定义,后

20、使用例1 int student; stadent=19; /Undefined symbol stadent in function main 例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 变量定义位置:一般放在函数开头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

21、(“data=%fn”,data);2.4.3 2.4.3 变量变量n占字节数随机器不同而不同占字节数随机器不同而不同, ,一般占一个机器字一般占一个机器字nshortintlongshortintlongn可用可用sizeofsizeof( (类型标识符)测量类型标识符)测量 实型变量实型变量floatfloat:占占4 4字节,提供字节,提供7 7位有效数字位有效数字doubledouble:占占8 8字节,提供字节,提供15161516位有效数字位有效数字字符型变量字符型变量字符变量存放字符字符变量存放字符ASCIIASCII码码charchar与与intint数据间可进行算术运算数据间

22、可进行算术运算例1: float a; a=111111.111; /* a=111111.1*/例2: double b; b=111111.111; /* b=111111.111*/例 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */没有字符串变量,用字符数组存放(第7章)u整型变量整型变量/*ch2_003.c*/ #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(

23、“total=%f,ch1=%cn”,total,ch1); 宏定义变量定义输出结果运行结果:total=37.500000, ch1=d例子例子2.5.1 2.5.1 隐式转换隐式转换什么情况下发生什么情况下发生运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换运算转换规则运算转换规则: :不同类型数据运算时先自动转换不同类型数据运算时先自动转换成同一类

24、型成同一类型2. 5不同类型数据间的转换不同类型数据间的转换doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledouble10+a +i* f - d / l例2 int i; float f; double d; long l;例例1 1intintdoubledoubledoubledoubledoubledouble一般形式:(类型名)(表达式)一般

25、形式:(类型名)(表达式)一般形式:(类型名)(表达式)一般形式:(类型名)(表达式) 例例例例: (: (: (: (int)(x+yint)(x+yint)(x+yint)(x+y) ) ) ) ( ( ( (int)x+yint)x+yint)x+yint)x+y (double)(3/2) (double)(3/2) (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类

26、型的中间变量,原变量类型不变变量类型不变变量类型不变变量类型不变 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3较高类型向较低类型转换时可能发生精度损失问题2.5.2 2.5.2 显式转换(强制转换)显式转换(强制转换)C运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(

27、类型)分量运算符:(. -)下标运算符:()其它 :(( ) -)2.6 运算符和表达式运算符和表达式C表达式算术表达式关系表达式逻辑表达式 赋值表达式条件表达式逗号表达式 用运算符号将运算对象连接起来形成的运算式称为表达式用运算符号将运算对象连接起来形成的运算式称为表达式n运算符功能运算符功能n与运算量关系与运算量关系要求运算量个数要求运算量个数要求运算量类型要求运算量类型n运算符优先级别运算符优先级别n结合方向结合方向n结果的类型结果的类型2.6.1 2.6.1 学习运算符应注意学习运算符应注意n基本算术运算符:基本算术运算符: + - * / %+ - * / %结合方向:从左向右结合方

28、向:从左向右优先级:优先级: - -* / % - + - -* / % - + - (2) (3) (4) (2) (3) (4)说明:说明:“-”-”可为单目运算符时可为单目运算符时, ,右结合性右结合性两整数相除,结果为整数两整数相除,结果为整数% %要求两侧均为整型数据要求两侧均为整型数据例例 5/2 = -5/2.0 =例例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%22.6.2 2.6.2 算术运算符和表达式算术运算符和表达式2-2.51-110( )作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:n前置前置 +i, -i (+i, -i (先执行

29、先执行i+1i+1或或i-1i-1,再使用再使用i i值)值)n后置后置 i+,i- (i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); 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=42.6.32.6.3自增、自减运算符自增、自减运算符+ -+ -作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:前置前置 +i,

30、 -i (+i, -i (先执行先执行i+1i+1或或i-1i-1,再使用再使用i i值)值)后置后置 i+,i- (i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)说明:说明:+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+ - + - 结合方向:结合方向: 自右向左自右向左 对整型数使用对整型数使用优先级:优先级:- + - -* / % -+ - + - -* / % -+ - (2) (3) (4) (2) (3) (4)例例 -i+ -i+ -(i+) -(i+) i=3; i=3; printf

31、(printf(“%d%d”,-i,-i+); /-3 +); /-3 例例 j+k; (j+)+k;j+k; (j+)+k;例例 -i+-i+ i=3; i=3; printf(printf(“%d%d”,-i,-i+);+); 续续: :自增、自减运算符自增、自减运算符+ -+ -n简单赋值运算符简单赋值运算符符号:符号: = =格式:格式: 变量标识符变量标识符= =表达式表达式作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量n复合赋值运算符复合赋值运算符种类:种类:+= -= *= /= %= += -= *= /= %= = = = &= =

32、|= &= = |=含义:含义:a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例例 a=3;a=3; d= d=funcfunc();(); c=d+2; c=d+2;2.6.4 2.6.4 赋值运算符和表达式赋值运算符和表达式结合方向:自右向左结合方向:自右向左优先级优先级: 14左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套赋值转换规则赋值转换规则: :使赋值号右边表达式值自动转换使赋值号右边表达式值自动转换成其左边变量的类型成其左边变量的类型例例 3=x-2*y;3=x-2*y

33、; a+b=3; a+b=3;例例 float f; int i; i=10; f=i;则则 f=10.0例例 int i; i=2.56; /结果结果i=2;例例: a=b=c=5: a=b=c=5 a=(b=5) a=(b=5) a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) a=(b=10)/(c=2)/表达式值为表达式值为5 5,a,b,ca,b,c值为值为5 5/ b=5;a=5/ b=5;a=5/表达式值表达式值1111,c=6,a=11c=6,a=11/表达式值表达式值1010,a=10,b=4,c=6

34、a=10,b=4,c=6/表达式值表达式值5 5,a=5,b=10,c=2a=5,b=10,c=2简单赋值说明(简单赋值说明(1 1):): 结合方向:自右向左结合方向:自右向左 优先级优先级: 12 左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套赋值转换规则赋值转换规则: :使赋值号右边表达式值自动转换使赋值号右边表达式值自动转换成其左边变量的类型成其左边变量的类型例例: a=12; : a=12; a+=a-=a*a a+=a-=a*a例例: : intint a=2; a=2; a%=4-1; a

35、%=4-1; a+=a*=a-=a*=3; a+=a*=a-=a*=3; /a=-264 /a=-264 等价于等价于a=a+(a=a-(a*a)a=a+(a=a-(a*a)/a=0 /a=0 等价于等价于a=a+(a=a*(a=a-(a=a*3)a=a+(a=a*(a=a-(a=a*3)复合赋值说明复合赋值说明: :n形式:表达式形式:表达式1,表达式表达式2,表达式表达式nn结合性结合性:从左向右从左向右n优先级优先级: 15n逗号表达式的值:等于表达式逗号表达式的值:等于表达式n的值的值n用途:常用于循环用途:常用于循环for语句中语句中例例 a=3*5,a*4 a=3*5,a*4,a+

36、5例例 x=(a=3,6*3) x=a=3,6*a例例 a=1;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,32.6.5 2.6.5 逗号运算符和表达式逗号运算符和表达式例例:/*ch2_6.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf

37、(x=%dn,x);运行结果:运行结果:x=3n关系运算符关系运算符种类:种类: = !=结合方向:自左向右结合方向:自左向右优先级别:优先级别:=!=优先级优先级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=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/表达式值

38、表达式值1/表达式值表达式值1/表达式值表达式值0/d=1/f=02.6.62.6.6关系运算符和表达式关系运算符和表达式例例 若若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关系运算注意(关系运算注意(1)例例 注意区分注意区分“=”与与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例例 应避免对实

39、数作相等或不等的判断应避免对实数作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果为结果为可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1e-60关系运算注意(关系运算注意(2)ab!a!ba&ba|b真真假假真真假假假假假假真真真真n逻辑运算符逻辑运算符种类:种类: ! & |逻辑运算真值表逻辑运算真值表C C语言中语言中, ,运算量运算量: 0: 0表示表示“假假”, 非非0 0表示表示“真真”, , 运算结果运算结果: 0: 0表示表示“假假”, 1 1表示表示“真真”, ,真真假假假假假假假假假假真真真真假假假假真真真真真真假假真真真真2.6.7 2.6.7

40、逻辑运算符和表达式逻辑运算符和表达式! (2)& (11)| (12)高高低低例例 a=x & xb&xy a=b|x=y !a|abl优先级:优先级:l结合方向:结合方向:! :从右向左从右向左& :从左向右从左向右| :从左向右从左向右/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)续逻辑运算符和表达式(续逻辑运算符和表达式(2 2)! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右例例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|83)&2|(8(4-(!0) 值为1续逻辑运

41、算符和表达式(续逻辑运算符和表达式(3 3)! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符b)&(n=cd)/结果m=0,n=1续逻辑运算符和表达式(续逻辑运算符和表达式(4 4)n一般形式:一般形式: expr1 ? expr2 : expr3n执行过程执行过程n功能:相当于条件语句,但不能取代一般功能:相当于条件语句,但不能取代一般if语句语句例例 if (ab) printf(“%d”,a); else pri

42、ntf(“%d”,b);printf(“%d”,ab?a:b);例例 求求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取取expr2值值取取expr3值值非非0=0例例 (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; xy ,值为值为1.52.6.8 2.6.8 条件运算符与表达式条件运算符与表达式

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号