




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4章章 语句和表达式语句和表达式 徐遵义徐遵义 , 2语句和表达式语句和表达式赋值语句与赋值表达式赋值语句与赋值表达式算术运算算术运算关系运算关系运算逻辑运算逻辑运算条件运算条件运算逗号表达式逗号表达式sizeofsizeof运算运算位运算位运算小结与作业小结与作业3C+C+中的语句中的语句语句是程序组成的基本单位,必须是以语句是程序组成的基本单位,必须是以” ;”;”结束结束执行语句是为了完成某个操作或修改某个数据执行语句是为了完成某个操作或修改某个数据C+C+语言的语句类型语言的语句类型变量声明语句,如:变量声明语句,如:int x, y;执行语句执行语句: : 流程控制:流程控制:i
2、f-else;do-while;for;switch;continue;break;if-else;do-while;for;switch;continue;break;表达式语句:表达式语句: x=0;x=0;x = x + 1;函数和流对象调用语句函数和流对象调用语句空语句空语句: : 只有一个分号的语句,其形式为:只有一个分号的语句,其形式为:; ;什么也不做,只表示语句的存在什么也不做,只表示语句的存在自顶向下程序设计时用在那些未完成的模块中自顶向下程序设计时用在那些未完成的模块中复合语句复合语句: : t = x; x = y; y = t;45表达式表达式由操作符、操作数和标点符号
3、组成的序列,用来说明一个由操作符、操作数和标点符号组成的序列,用来说明一个计算过程,如计算过程,如 z = x+yz = x+y操作数操作数也称为也称为运算量运算量或或数据数据,可以是,可以是常量、变量或函数常量、变量或函数;只有数;只有数据的式子是最简单的表达式。据的式子是最简单的表达式。操作符操作符描述的是对数据进行的操作,描述的是对数据进行的操作,C+C+语言的操作符有语言的操作符有4040多种;多种;根据根据操作符操作符需要的需要的操作数操作数个数不同,将个数不同,将操作符操作符分为分为 3 3 类:单目运类:单目运算符、双目运算符和三目运算符;算符、双目运算符和三目运算符;表达式可以
4、嵌套,如表达式可以嵌套,如 2+3+52+3+5* *sizeof(int)/345sizeof(int)/345表达式根据某些约定、求值次序、结合性和优先级规则来表达式根据某些约定、求值次序、结合性和优先级规则来进行计算进行计算约定:类型转换的约定,由低约定:类型转换的约定,由低高高求值次序:与编译器有关求值次序:与编译器有关6操作符:操作符:= =作用是将一个数据赋给一个变量作用是将一个数据赋给一个变量, ,如如 int a=3;int a=3;将一个表达式的值赋给一个变量将一个表达式的值赋给一个变量, ,如如 int a=3;int b=a+3;int a=3;int b=a+3;赋值表
5、达式赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子由赋值运算符将一个变量和一个表达式连接起来的式子语法形式:语法形式: 赋值表达式求解过程:将赋值运算符右侧赋值表达式求解过程:将赋值运算符右侧“表达式表达式”的值的值赋给左侧的变量。赋给左侧的变量。表达式的值就是被赋值的变量的值表达式的值就是被赋值的变量的值。上述一般形式中的上述一般形式中的“表达式表达式”还可以是一个赋值表达式:还可以是一个赋值表达式: a=(b=5)C语言允许连续赋值语言允许连续赋值7变量赋初值变量赋初值程序中常需要对一些变量预先设置初值。程序中常需要对一些变量预先设置初值。C+C+语言允许在定义变量的同时使变量
6、初始化。语言允许在定义变量的同时使变量初始化。int a=3; /int a=3; /* *指定指定a a为整型变量,初值为为整型变量,初值为3 3* */ / float f=3.56; / float f=3.56; /* *指定指定f f为实型变量,初值为为实型变量,初值为3.563.56* */ / char c=a; / char c=a; /* *指定指定c c为字符变量,初值为为字符变量,初值为aa* */ /也可以使被定义的变量的一部分赋初值。也可以使被定义的变量的一部分赋初值。 int a,b,c=5; /int a,b,c=5; /* *指定指定a,b,ca,b,c为整型变
7、量,只对为整型变量,只对c c初始化初始化* */ /如果对几个变量赋予初值如果对几个变量赋予初值3 3,应写为,应写为:int a=3,b=3,c=3;:int a=3,b=3,c=3; 不能写成:不能写成:int a=b=c=3int a=b=c=3注意:int a=3; 相当于:int a; /*指定a为整型变量*/ a=3; /*赋值语句,将3赋给a*/ int a,b,c=5; 相当于: int a,b,c; /*指定a,b,c为整型变量*/ c=5; /*赋值语句,将5赋给c*/8中学阶段已学过的算术运算中学阶段已学过的算术运算基本运算:、基本运算:、, , , , , , 取余取
8、余其它运算:取整、求整(四舍伍入),()其它运算:取整、求整(四舍伍入),()C+C+中的基本算术运算中的基本算术运算+ +、* *(乘)、(乘)、/ /(除)、(除)、% %(求余)(求余)双目或双元运算符双目或双元运算符+ +、- -、* *、/ / 的运算量可以是整型、实型甚至为字符型的运算量可以是整型、实型甚至为字符型如:如:4 + 84 + 8、8/58/5、5.55.5* *4 4 、 A A 1 1/ /对于整型数为除法取整操作,如对于整型数为除法取整操作,如 5/25/2结果为结果为2;2;对于浮点对于浮点数则为通常意义上的除法,如数则为通常意义上的除法,如6.2/26.2/2
9、为为3.13.1% % 要求两个运算量必须是整型数要求两个运算量必须是整型数, ,否则会引起编译错误否则会引起编译错误如:如:5%2 5%2 、 5.6%25.6%29C+C+中的基本算术运算中的基本算术运算双目运算符在运算时运算结果的类型取决于参与运算的两双目运算符在运算时运算结果的类型取决于参与运算的两个运算量的数据类型个运算量的数据类型类型一致时,结果为参与运算的两个运算量的数据类型;类型一致时,结果为参与运算的两个运算量的数据类型;当两个运算量的类型不一致时,当两个运算量的类型不一致时,系统会自动进行类型转换系统会自动进行类型转换,转换,转换成相同的类型之后再进行运算成相同的类型之后再
10、进行运算称为称为隐式类型转换;隐式类型转换;隐式类型转换规则隐式类型转换规则:转换总是朝表达能力更强的方向并且转换总:转换总是朝表达能力更强的方向并且转换总是逐个运算符进行;是逐个运算符进行;charshort int long intdouble long double float unsigned charunsignedunsigned shortunsigned intunsigned long10C+C+中的基本算术运算中的基本算术运算强制类型转换,又称显示转换强制类型转换,又称显示转换在一个数值或变量前加上带括号的类型名,或类型名后跟带括号在一个数值或变量前加上带括号的类型名,或类
11、型名后跟带括号的数值或表达式的数值或表达式如如:cout(long)234*456/6endl; coutlong(234)*456/6endl;若类型名带类型修饰符,则只能给类型名加括号若类型名带类型修饰符,则只能给类型名加括号 cout(unsigned long)234*456/6endl;溢出溢出一个变量被赋予一个超出其数据类型表示范围的数值时发生溢出一个变量被赋予一个超出其数据类型表示范围的数值时发生溢出short weight = 32764+4; / VC结果结果 -32768数值溢出不会引起编译错误数值溢出不会引起编译错误( (有可能引起警告有可能引起警告) ),但运行结果发生
12、,但运行结果发生偏差偏差int a = 7 ;float x = 2.5 , y = 4.7 , z;求表达式求表达式 z = x + a%3*( int ) ( x + y )%2/4 的值的值11C+C+中的基本算术运算中的基本算术运算复合的赋值运算符:将算术运算符与赋值运算符结合起复合的赋值运算符:将算术运算符与赋值运算符结合起来:来:+=+=、-=-=、* *= =、/=/=、%=%=注意:两个符号之间不可以有空格注意:两个符号之间不可以有空格 。优先级与优先级与“=” =” 同级、右结合性。同级、右结合性。 a=a+b; a=a-b; a=a*b; a=a/b; a=a%b; a+=
13、b; a-=b; a*=b; a/=b; a%=b; 压缩压缩等价等价例:例:c=b*=a+2; c=b=b*(a+2);12C+C+中的基本算术运算中的基本算术运算自加、自减运算符(自加、自减运算符(+、-)自加运算符自加运算符 + 的推出的推出自减运算符自减运算符-的推出的推出自加、自减运算符均为单目运算,并且要求运算量只能是变量自加、自减运算符均为单目运算,并且要求运算量只能是变量在表达式中,一般不考虑在表达式中,一般不考虑+、- 的优先级,而是去找它的运算量,的优先级,而是去找它的运算量,从而确定它是以前缀形式还是以后缀形式出现从而确定它是以前缀形式还是以后缀形式出现例:例:int i
14、=0 ; i=i+1 ; i+=1; i+; ( +i; )i=i - 1 ; i- = 1; i- -; ( - -i; )13C+C+中的基本算术运算中的基本算术运算自加、自减运算符(自加、自减运算符(+、-)如果如果以后缀形式出现以后缀形式出现,则先参与其它运算再使变量的值增,则先参与其它运算再使变量的值增1 1(或(或减减1 1)如果如果以前缀形式出现以前缀形式出现,则先使变量的值增,则先使变量的值增1 1(或减(或减1 1)后再参与其)后再参与其它运算;它运算;例:例:int i = 5 , x , y ; x = i+ ; y = i ;couti:i x:x y:yendl;例:
15、例:int i = 5 , x , y ; x = +i ; y = i ;couti:i x:x y:yendl;14C+C+中的基本算术运算中的基本算术运算自加、自减运算符(自加、自减运算符(+、-)当表达式中只有一个当表达式中只有一个+、或、或-运算时,前缀和后缀形式一样运算时,前缀和后缀形式一样, ,如如 i+; +i;副作用问题副作用问题x=i+y ;x=i+(+y) ;x=i+y ;x=i; x = x + y; i = i+1; x=i; y=y+1; x=x+y;i=i+1;15C+C+中的基本算术运算中的基本算术运算负号运算符负号运算符( - ):( - ):单元、单目、一元
16、单元、单目、一元例例1: int a=5,b=8; a = - a * - b + 1 ;a=(-a)*(-b)+1;例例2: int x , y = 3 ; x = - y + 2;x=-y; x=x+2; y=y+1; 16关系运算符关系运算符: ,=,=(: ,=,=(等于等于),!=(),!=(不等于不等于) )运算符运算符对应的初等数学运算符对应的初等数学运算符含义含义小于小于大于大于=大于等于大于等于= =等于等于!=!=不等于不等于17关系运算符运算出的结果为关系运算符运算出的结果为 0 0 和和 非非 0 0:0 0 表示假,即该关系不成立;表示假,即该关系不成立;非非0 0
17、表示真,即该关系成立;表示真,即该关系成立;绝大多数编译器,关系运算得到的非绝大多数编译器,关系运算得到的非 0 0 结果为结果为 1 1,但是不要,但是不要利用这个利用这个 1 1;用关系运算符连接操作数组成的表达式成为关系表达式;用关系运算符连接操作数组成的表达式成为关系表达式;优先级、双目、左结合性优先级、双目、左结合性, = , = 优先级相同,优先级相同,=, != =, != 优先级相同,且前优先级相同,且前 4 4 个运算符的优先级高于后面个运算符的优先级高于后面 2 2 个运算符的优先级;个运算符的优先级;关系运算符的优先级低于所有算术运算符的优先级;关系运算符的优先级低于所有
18、算术运算符的优先级;18例:例:#include int main() int x=2,y=3,z; z = 3-1 = x+1 = y+2; cout“x=”x“,y=”y“,z=”zendl; x=2, y=3, z=1Press any key to continue19注意注意等于号等于号 “=” =” 与赋值号与赋值号 “=” =” 的区别;的区别;!= != 误写误写= =!,!,= = 误写误写 = = 误写误写 =;避免对两个实数作相等或不相等的比较;避免对两个实数作相等或不相等的比较;x!=3 x!=3 与与 x=!3x=!3区别区别例:例:int z1,z2;float f
19、1,f2;f1 = 100.111119f;f2 = 100.1111191f;z1 = f1 = f2;z2 = fabs(f1 - f2) 1e-6; 20计算关系表达式的值与判断关系表达式的真假计算关系表达式的值与判断关系表达式的真假int z;z = 3 bc;21逻辑运算符:逻辑运算符:&( (逻辑与逻辑与) )、|( (逻辑或逻辑或) )、! !( (逻辑非逻辑非) )!是单目是单目, 高于算术运算;高于算术运算;& 和和 | 都是双元运算;都是双元运算;& 比比 | 优先级高,但都低于关系运算(关系运算低于算优先级高,但都低于关系运算(关系运算低于算术运算
20、);术运算);用逻辑运算符连接操作数组成的表达式成为逻辑表达式;用逻辑运算符连接操作数组成的表达式成为逻辑表达式;22运算规则运算规则运算量的值是运算量的值是非非0 0时时, ,认为是认为是“真真”, ,是是 0 0 时时, ,认为是认为是“假假”;当两个运算量都是当两个运算量都是“真真”时,时,&的值为真,其它情况为假;的值为真,其它情况为假; 当两个运算量都是假时当两个运算量都是假时, | , | 的值为假,其它情况为真;的值为假,其它情况为真;逻辑运算的结果为逻辑运算的结果为真真时,用时,用1 1表示,为表示,为假假时,用时,用0 0表示表示23例:例:int a =7,b=5,
21、c=8;( a b & b c);/a大于大于b,并且,并且b大于大于c,结果为假,结果为假( a b | b c); /a大于大于b,或者,或者b大于大于c,结果为真,结果为真( !a );/如果如果a是是0,结果非,结果非0;如果;如果a是非是非0,结果是,结果是0并不改变并不改变a的值,的值,结果为假结果为假24要学会把分支结构中的要学会把分支结构中的条件条件用关系或逻辑表达式描用关系或逻辑表达式描述出来述出来例:例:下列数学式子下列数学式子3x5并且并且y5或或y3 & x93=x & x5 & y5 | y3x5) 例:判断某个字符例:判断某个字符 c
22、h 是否为大写字母是否为大写字母 char ch; cinch; ch = A25例:判断某年例:判断某年year是否是闰年。是否是闰年。 闰年的条件是符合下面两者之一:闰年的条件是符合下面两者之一: A:能被:能被4整除,但不能被整除,但不能被100整除整除 B:能被:能被400整除整除 int year,t1,t2,t3,t; scanf(%d, &year); t1=year%4 = 0; t2=year%100 != 0; t3=year%400 = 0; t=t1&t2|t3; 26短路表达式短路表达式求求 0&a 0&a 或或 1|a 1|a 时,则
23、不必计算表达式时,则不必计算表达式a a的值的值如果多个表达式用如果多个表达式用 &连接,则一个假表达式将使整个连连接,则一个假表达式将使整个连接都为假接都为假如果多个表达式用如果多个表达式用 | | 连接,则一个真表达式将使整个连连接,则一个真表达式将使整个连接都为真接都为真27例:例:#include int main( ) int x,y,z; x=y=0; z = x+&y+; coutx=”x“ty=”y“tz=“zendl; x=1 y=0 z=0Press any key to continue28例:例:#include int main( ) int i=0,
24、 j=0, k=5,z; z = (+i0)|(+j0)|(k+); couti=”i“tj=”j“tk=”k“tz=”“z= 18 ? nIsAdult =1: nIsAdult =0; 30作为作为分隔符分隔符使用使用如:如:float f1, f2, f3, f4float f1, f2, f3, f4;作为作为运算符运算符使用使用逗号表达式的一般形式逗号表达式的一般形式: :表达式表达式1 1,表达式,表达式2,2,表达式表达式n n逗号表达式的值是最右边表达式的值、优先级最低逗号表达式的值是最右边表达式的值、优先级最低如果逗号表达式的最后一个表达式为左值,则该逗号表达式为左值如果逗号
25、表达式的最后一个表达式为左值,则该逗号表达式为左值int x,y,a,b;x=(y=10,y+2);cout“x:”x“ y:”yendl; b=(a=4*5,2*a , a+6) ;cout“a:”a“ b:”bendl;(a=1,b,x+1,y)=5;couta:a b:b x:x y:yendl;31一般形式为一般形式为: :sizeof(sizeof(数据类型);数据类型);sizeof(sizeof(变量名);变量名);sizeof(double)long double a; sizeof(a)32位运算符位运算符: 、 、& 、 、| (优先级由高到低)(优先级由高到低)位
26、运算量只能是整型或字符型的数据位运算量只能是整型或字符型的数据 &:按位与运算按位与运算:按位异或运算按位异或运算|:按位或运算按位或运算:按位求反按位求反:按位右移运算按位右移运算aba&ba|baba00000101011110011011110033按位与运算符按位与运算符 & &运算规则:如果参加运算的两个运算量的相应位都是运算规则:如果参加运算的两个运算量的相应位都是1,1,则则该位的结果值为该位的结果值为1 1,否则为,否则为0 0。 应用:对字节中某应用:对字节中某N N位进行清零位进行清零例:例: char a = 0 x7a; char b =
27、 0 x98; a: 01111010 b: 10011000&: 00011000例例2:short a = 15;只保留最低位不变,其余位置只保留最低位不变,其余位置0 a: 00001111 b: 00000001&: 0000000134例例3:判断一个数据的某位是否为:判断一个数据的某位是否为1? int a; cina; 判断判断 a 是正数还是负数?是正数还是负数?10000000 00000000 00000000 00000000分析:分析:int text = 0 x8000; a: 1# # 0# # text: 10000000 00000000 100
28、00000 00000000&:35按位或运算符按位或运算符 | |运算规则:如果两个运算量的相应位不同,则该位的结果运算规则:如果两个运算量的相应位不同,则该位的结果值为值为1 1,相同则为原值,相同则为原值应用:对字节中某应用:对字节中某N N位进行置位进行置1 1 11111010例例1: char a=0 x7a; char b=0 x98; a: 01111010 b: 10011000|例例2:short a = 15;只保留最高位不变,其余位置只保留最高位不变,其余位置1 a: 00001111 b: 01111111| 0111111136按位异或运算符按位异或运算符
29、运算规则:如果两个运算量的相应位不同,则该位的结果运算规则:如果两个运算量的相应位不同,则该位的结果值为值为1 1,否则为,否则为0,0,又称不进位加又称不进位加应用:对数据进行简单的加密,两次异或运算又恢复为原应用:对数据进行简单的加密,两次异或运算又恢复为原值值 1110 0010例例1: char a=0 x7a; char b=0 x98; a: 0111 1010 b: 1001 1000例例2:short a = 15; a: 0000 1111 b: 0111 1011 0111 0100 0000 1111 0111 101137按位取反按位取反 运算规则:对操作数的各位取反,
30、即运算规则:对操作数的各位取反,即0 0变为变为1 1,1 1变为变为0 0。应用:对数据进行简单的加密,两次取反运算又恢复为原应用:对数据进行简单的加密,两次取反运算又恢复为原值值 1000 0101例例1: char a=0 x7a; a: 0111 1010 38左移位左移位 运算规则:对操作数运算规则:对操作数 X X 的每一位向右平移的每一位向右平移n n位位, ,当当X X为有符号数时,左边空位补符号位上的值,算术移位;为有符号数时,左边空位补符号位上的值,算术移位;当当X X为无符号数时,左边空位补为无符号数时,左边空位补0 0,逻辑移位;,逻辑移位;应用:快速地实施整数的乘法,
31、右移应用:快速地实施整数的乘法,右移 n n 位相当于除以位相当于除以2 2n n位运算与赋值运算的复合位运算与赋值运算的复合: &=, |=, =, =, = 0011 1100 60例例1: 0000 1111 15 2 2 0000 0011 339C+C+语言规定了运算符的优先级和结合性语言规定了运算符的优先级和结合性在求解表达式时,先按运算符的优先级别高低次序执行,例在求解表达式时,先按运算符的优先级别高低次序执行,例如先乘除后加减,如如先乘除后加减,如 a-ba-b* *c c 相当于相当于a-(ba-(b* *c)c)如果在一个运算对象两侧的运算符的优先级别相同,如如果在
32、一个运算对象两侧的运算符的优先级别相同,如a-a-b+cb+c,则按规定的,则按规定的“结合方向结合方向”处理处理算术运算符的结合方向为算术运算符的结合方向为“自左至右自左至右”,即先左后右;,即先左后右;“自自左至右的结合方向左至右的结合方向”又称又称“左结合性左结合性”,即运算对象先与左,即运算对象先与左面的运算符结合面的运算符结合有些运算符的结合方向为有些运算符的结合方向为“自右至左自右至左”,即右结合性(例如,即右结合性(例如赋值运算符)赋值运算符)“结合性结合性”的概念在其他一些高级语言中是没有的,是的概念在其他一些高级语言中是没有的,是C C和和C+C+的特点之一,参见教材表的特点之一,参见教材表3-13-140举例:用举例:用C+语言的表达式表示下列数学式子语言的表达式表示下列数学式子1. 3x2+4xy+y2+5 v 在程序中可以使用下列在程序中可以使用下列数学函数数学函数: fabs(x):求一个实数:求一个实数x的绝对值,如的绝对值,如fabs(-4.5)的值为的值为4.5 abs(x ):求一个整数:求一个整数x的绝对值,如的绝对值,如abs(6)的值为的值为6 sin(x):求三角的正弦值,参数:求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030苏打水行业市场发展现状及发展前景与投资机会研究报告
- 2025-2030翡翠戒指行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030精炼铜行业市场发展分析及前景趋势与投资研究报告
- 2025-2030矿用车行业市场发展分析及投资前景研究报告
- 2025-2030皮肤美容行业发展分析及投资战略研究报告
- 2025-2030电动内衣行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030狗厕所行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030激光开料机市场发展分析及行业投资战略研究报告
- 2025-2030数据中心燃料电池行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030年高铁零部件行业市场深度调研及发展趋势与投资战略研究报告
- 2025医院护理面试题库及答案
- 餐厅供餐协议书范本
- 供水公司笔试试题及答案
- 安徽省粮油经贸有限公司招聘笔试真题2024
- 基于单片机的电饭煲设计
- 大棚改造施工合同协议
- 食堂员工培训
- 2025年上海中考复习必背英语考纲词汇表默写(汉英互译)
- 饲料与饲料学试题及答案
- 2025至2030中国磷石膏市场行情走势监测及未来发展展望报告
- 国家发展改革委低空经济司
评论
0/150
提交评论