1、第3章 C+简单程序设计,3.1 表达式 3.2 算术运算符 3.3 算术类型转换 3.4 增量与减量 3.5 关系与逻辑表达式 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序,3.1表达式表达式概述,概念:表达式、求值次序、结合性 C+语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为: l 单目运算符(一元运算符,只需一个操作数) l 双目运算符(二元运算符,需两个操作数) l 三目运算符(三元运算符,需三个操作数),3.1表达式左值和右值,左值=右值 如:a=3;b=a;,3.1表达式优先级和结合性,结合性:一般都是从左到右结合,但单目运算
2、符、条件运算符、赋值缩写运算符的结合性从右到左。 优先级:P35 表3-1,3.1表达式语句和块,语句以分号结束; 空语句:; 块:即复合语句,是指在一对花括号里的语句序列。,3.2 算术运算符操作符种类,+、-、*/:对于整数是整除,对于浮点数是一般除法 ,如:5/2=2;5.0/2=2.5%取余,只能对整数进行操作,如5%2=1;,3.2 算术运算符赋值缩写,x=x+y;=x+=y; x=x-y;=x-=y; x=x*y;=x*=y; x=x/y;=x/=y;,3.2 算术运算符溢出,溢出:一个变量被赋予一个超出其数据类型表示范围的数值。它一般不会发生编译错误,但会导致结果发生偏差。延伸:
3、计算机的数据采用补码的形式存放。 如:int weight=42896;结果变量值为-22640 1010011110010000 转二进制 1101100001101111 取反 1101100001110000 +1 -22640 简单方法:-(65536-42896),3.3 算术类型转换,转换总朝表达数据能力更强的方向,并且转换总是逐个运算符进行的。(短长),3.3 算术类型转换,隐式转换:即自动转换,由编译器自动完成的类型转换。如1+2.0 显式转换:即强制转换,由程序员显式指出的类型转换,转换格式如下:类型名(表达式)(类型名)表达式如:long(12)、(long )12,3.4
4、 增量和减量,自增+:自动加1 自减-:自动减1 前缀:变量值加(减)1,然后新值赋给变量。如:b=+a; -a; 后缀:变量值加(减)1,但修改变量值如:b=a+;a-; 综合:c=a+b; c=a+b; c=a+b;,3.5 关系运算符关系运算符,(1)关系运算符用于两个值进行比较,运算结果为true(真)或false(假),分别用值非0(true)或0(false)表示。 (2)关系运算符都是双目运算符,其结合性是从左到右,、=运算符的优先级相同,= =和!=运算符的优先级相同,前者运算的优先级高于后者。 (3)关系运算符的优先级低于算术运算符。,3.5 关系运算符逻辑运算符,C+中的逻
5、辑运算符为:&(逻辑与), |(逻辑或),!(逻辑非)。逻辑表达式的结果为真则为1,结果为假则为0。 逻辑非(!)是单目运算符,逻辑与(&)和逻辑或(|)是双目运算符。 逻辑非的优先级最高,逻辑与次之,逻辑或最低。 逻辑运算真值表如表1-3所示。,表1-3 逻辑运算真值表(真为非0,假为0),3.5 关系运算符短路表达式,如果多个表达式用,3.6 if语句if语句,语法格式如果 (我考试过了) 那么 我请大家吃饭if (ch=b)couta;if (ch=b)couta;if (ch=b);couta;,3.6 if语句ifelse语句,语法格式如果 (我考试过了) 那么 我请大家吃饭否则 你
6、帮我出报名费,呵呵if (ch=b)couta;elsecoutch;if (ch=b)couta;elsecoutch;,3.6 if语句解决二义性,就近未匹配原则:else连接到上面第一个没有配对且为可见的if上。p46,3.7条件运算符,(1)条件运算符“?:”是C+中惟一的三目运算符,其形式为: 表达式1 ? 表达式2 : 表达式3 (2)条件运算符的结合性是自右向左。 (3)条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。 x=ab?a:b;if(ab) x=a;elsex=b;,3.7条件运算符,如果后面两个表达式的值类型相同,均为左值,则该条件运算符表达式可在赋值
7、号左边。 (x?a:b)=1; (x?a:1)=1; 注意:C语言不支持此用法。 建议不用。,3.8逗号运算符,(1)逗号运算符用于将多个表达式连在一起,并将各表达式从左到右的顺序依次求值,但只有其最右端的表达式的结果,作为整个逗号表达式的结果。 (2)逗号表达式的一般格式为: 表达式1,表达式2,表达式n 如:d=(a=1,b=a+2,c=b+3);(a=1,b=a+2,c=b+3)=5;/C不支持,3.9求值次序与副作用,不同的编译器求值顺序不同,3.9求值次序与副作用,不同的编译器求值顺序不同 求值顺序使交换律失去作用 求值顺序使括号失去作用 消除副作用尽可能用简单语句,交复杂语句拆为多句。,变量IPO,加工厂 原料存放-变量 进料-Input 生产加工-Process 出料-Output,#include void main() int grade;cout grade;if(grade100|grade=90)cout =80)cout =70)cout =60)cout “D.n“;elsecout “E.n“; ,收获盘点,算术表达式 逻辑表达式 关系表达式 条件表达式 逗号表达式 If语句 变量IPO,课外实践,P51 练习作业:3.1 、3.2、3.6实验:3.3、3.6选做:3.5,