C++第3周第2次课总第7次课_c语言第7章函数2次课
C++第3周第2次课总第7次课由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言第7章函数2次课”。
C++程序设计教案
第3周第2次课 总第7次课
课题:运算符与表达式
(二)教学目标:
掌握位运符等运符及表达式的应用
教学重点:
运算符
教学难点:
位运算符及表达式
教学方法:
讲授法
教学过程: 【导入新课】 【教学内容】位运算符
C++语言提供字位运算,这是其他高级语言不具备的。它对操作数的各个位进行操作。位运算符共有六个:~(按位取反)、>(右移)、&(按位与)、|(按位或)、^(按位异或)。其中按位取反为单目运算符,其余为双目运算符。(1)按位取反运算符“~”
将操作数的每个二进制位取反,即1变为0,0变为1。例如,整数a的值为10011011,则~a的值为01100100。(2)左移运算符“>”
与左移运算符类同,将左操作数向右移动右操作数指定的二进制位数,忽略移位后的小数部分,并在高位补0。一个整数右移n位相当于除以2n,但比除法快。例如,变量a的值为00010000,则a>>2的值为00000100,a的值仍为00010000。在C++6.0中有符号数右移时高位补符号位,如:
-32>>3
//-32右移3位,由11110000B得11111110B,结果为-2(4)按位与运算符“&”
将两个操作数的对应位逐一进行按位逻辑与运算。运算规则为:对应位均为1时,该位运算结果为1;否则为0。例如,整型变量a和b的二进制值分别为01001101和00001111,则a&b的值为00001101,用竖式更容易看出结果:
C++程序设计教案
a b a & b 01001101 00001111 00001101 该运算可用来将整数的某些位置0,而保留所需要的位,上例保留了低四位。(5)按位或运算符“|”
将两个操作数的对应位逐一进行按位逻辑或运算。运算规则为:只要有一个数对应位为1,该位运算结果即为1;两个数对应位均为0,该位结果为0。例如,对上例的整数a,b,a|b的值为01001111,用竖式表示为:
a b a | b 01001101 00001111 01001111 该运算符可用来将整数的某些位置1。上例高四位不变,低四位全1。(6)按位异或运算符“^”
将两个操作数的对应位逐一进行按位异或运算。运算规则为:当对应位的值不同时,该位运算结果为1,否则为0。例如,对上例的整数a,b,a^b的值为01000010,用竖式表示为:
a
b a ^ b 01001101 00001111 01000010 该运算符可用来将一个整数的某些位取反,或将整型变量的值置0(将整型变量与自身按位异或)。上例低四位取反,高四位不变。
需要说明的一点是,以上例子中的整数都只取了低8位一个字节。4 赋值运算符
对程序中的任何一种数据的使用包括赋值和引用。将数据存放到相应存储单元中称为赋值,如果该单元中已有值,赋值操作以新值取代旧值;从某个存储单元中取出数据使用,称为引用,引用不影响单元中的值,即一个量可以多次引用。常量只能引用,不能赋值。赋值通过赋值运算符“=”来完成,其意义是将赋值号右边的值送到左边变量所对应的单元中。赋值号不是等号,它具有方向性。C++将变量名代表的单元称为 “左值”,而将变量的值称为“右值”。左值必须是内存中一个可以访问且可以合法修改的对象,因此只能是变量名,而不能是常量或表达式,关于表达式的概念稍后介绍。例如下面的赋值运算是错误的:
3.1415926=pi x+y=z
const int N=30;N=40
//左值不能是常数 //左值不能是表达式 //左值不能是常变量自增、自减运算
C++中提供了两个具有给变量赋值作用的单目算术运算符:自增运算符“++”和自减运算符“– –”,其意义是使变量当前值加1或减1,再赋给该变量。例如:
i++ j– – //相当于i=i+1 //相当于j=j–1 由于具有赋值功能,这两个运算符要求操作数只能是变量,不能是常量或表达式。运算符的使用还分前置和后置两种,上例是运算符后置。当自增、自减的变量还参与其他运算时,运算符前置和后置的结果一般是不同的。前置是先增减后引用,即先对变量自加或自减,用新的值参与其他运算;后置则是先引用后增减,即用变量原来的值参与其他运算,然后再对变量进行自加或自减。例如:
int i=5, j=5, m, n;m=i++;n=++j;
//相当于m=i;i=i+1;结果i的值为6,m的值为5 //相当于j=j+1;n=j;结果j的值为6,n的值为6
C++程序设计教案sizeof()运算符
该运算符用于计算一个操作数类型或一个变量的字节数。一般格式为:
sizeof(数据类型)或
sizeof(变量名)其中数据类型可以是标准数据类型,也可以是用户自定义类型。变量必须是已定义的变量。另外括号可以省略,运算符与操作数之间用空格间隔。例如:
sizeof(int)sizeof float
double x;sizeof x
//值为4 //值为4 //值为8 使用该运算符是为了实现程序的可移植性和通用性,因为同一操作数类型在不同计算机上可能占用不同字节数。
其他运算符将在后续章节中陆续介绍。
2.5.2 表达式
由运算符、操作数及标点符号组成的,能取得一个值的式子称为表达式。表达式中的操作数可以是常量、变量或函数等。一个常数或一个变量即是最简单的表达式。表达式的求值要根据运算符的意义、求值次序、优先级、结合性以及类型转换约定进行。根据运算符的不同,表达式有算术表达式、关系表达式、逻辑表达式、赋值表达式、逗号表达式等。1 算术表达式
由算术运算符连接的表达式称为算术表达式。例如:
a+5*b(x+y)% n 使用算术表达式还应注意以下三点:
(1)表达式求值时必须保证其中的每个变量都有确定的值。例如上例中的变量a、b、x、y、n都应有确定的值。
(2)由于运算符的优先级和结合性比较复杂,因此在书写复杂表达式时尽量使用配对的括号,以省去记忆工作,既便于阅读也容易保证运算正确。(3)表达式的书写应尽量简洁,省去多余的运算符。
以上三点不仅适用于算术表达式,对其他表达式也同样适用。
另外,设计表达式时还应考虑数据溢出问题和运算精度问题。从算法上尽量避免以下几种情况的出现:
(1)两个很接近的数直接相减。(2)除数是一个很小的数。(3)整数的连续乘运算。2 关系表达式
由关系运算符连接的表达式称为关系表达式。关系表达式的值为true或false。这个值可对应整数1或0直接参与其他运算。例如:
a>b>c a+b>c+d //等同于(a>b)>c,先求a>b的值,再将结果0或1与c比较大小 //等同于(a+b)>(c+d),结果为0或1 3 逻辑表达式和逻辑表达式求值的优化
由逻辑运算符连接的表达式称为逻辑表达式。逻辑表达式的值为true或false。这个值可对应整数1或0参与其他运算。例如,求下列逻辑表达式的值:
int a=0, b=2, c=3;float x=1.8, y=2.4;a>b&&ay)-!a
C++程序设计教案
根据优先级,该表达式等同于
((a>b)&&(ay)-!a)求值顺序为:先求a>b,值为0,再求出ay,值为0,再求!a,值为1,再求0-1,值为-1,作为逻辑值为1,最后求0||1,值为1。所以整个表达式的值为1。
对于较为复杂的逻辑表达式,建议使用配对括号,以省去记忆并减少出错的可能性。C++在求逻辑表达式值的时候,并非先将所有逻辑运算符连接的表达式的值全部求出,再进行所有的逻辑运算,而是采用求值优化算法,其含义是,在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。例如,假定a=2, b=0, c=3,逻辑表达式
a||b++||c--产生的结果是:表达式值为1,a值为2,b值为0,c值为3。这是因为整个表达式作的是或运算,一个表达式a的值已经可以确定整个表达式的值,因此后面的算术表达式求值及逻辑表达式求值都不再计算。所以必须避免这种表达方式。同样,假定x=0, y=2, z=3,逻辑表达式:
x&&(y=y*y)&&(z=z+3)产生的结果是:表达式值为0,x值为0,y值为2,z值为3。
编程人员在使用逻辑运算时应当加以小心,优化计算固然提高了运算效率,但可能产生副作用。所谓副作用,就是出乎设计人员的意料,得到预想不到的结果。赋值表达式与复合赋值表达式 赋值表达式的格式为:
= 赋值表达式的含义是,先计算右边表达式的值,再将该值赋给左边的变量。赋值表达式本身也取得值,左值就是赋值表达式的值。请看以下几例:
a=5+6 d=c=b=a+1 //合法,计算5+6,将11赋给a,整个表达式的值为11 //合法,计算a+1,将12赋给b,再将表达式(b=a+1)的值12赋给c,再将//表达式(c=b=a+1)的值12赋给d,整个表达式的值为12 c=(a=1)+(b=2)//合法,将1赋给a,再将2赋给b,再将表达式(a=1)和(b=2)的值相加得3,//将3赋给c,整个表达式的值为3 a=3+b=2 //非法,因为算术运算符的优先级高,先计算表达式3+b,该表达式成为第//二个赋值号的左值
在C++中,所有的双目算术运算符和位运算符均可与赋值运算符组合成一个单一运算符,称为复合运赋值算符。包括以下10个:
+ =
– =
* =
/ =
% =
>>=
&=
| =
^ =
复合赋值运算符的格式与赋值运算符完全相同,表示为:
变量
复合赋值运算符
表达式
它等同于
变量 = 变量
运算符 表达式
例如:
a+=3 a*=b–c a–=(b+6)
// a=a+3 // a=a*(b–c)// a=a–(b+6)复合赋值运算表达式仍属于赋值表达式,它不仅简化书写,而且能提高表达式的求值速度。逗号表达式
用逗号连接起来的表达式称为逗号表达式。一般格式为:
C++程序设计教案
表达式1,表达式2,„,表达式n 它所作的运算是,从左到右依次求出各表达式的值,并将最后一个表达式的值作为整个逗号表达式的值。逗号运算符的优先级最低。例如:假定a=1,b=2,c=3,逗号表达式:
a=a+1,b=b*c,c=a+b+c 的运算过程是,将2赋给a,将6赋给b,将2+6+3即11赋给c,并将11作为整个逗号表达式的值。再如,以下三个表达式的结果是不同的:
c=b=(a=3,4*3)c=b=a=3,4*3 c=(b=a=3,4*3)//结果为:a=3,b=12,c=12,表达式的值为12 //结果为:a=3,b=3,c=3,表达式的值为12 //结果为:a=3,b=3,c=12,表达式的值为12 并非所有的逗号都构成逗号表达式,有些情况下逗号只作为分隔符,如函数的参数之间用逗号分隔:
max(a+b, c+d)
【课堂小结】
1、2、几种运算符的运算规则; 各种运算符的运算优先级。
【作业布置】
#include int main()
{ int i=16,j,x=6,y,z;
j=i+++1;
cout
x*=i=j;
cout
x=1,y=2,z=3;
x+=y=z;
couty?X++:y++);
x=y=z=-1;
++x||++y&&++z;
cout
【教学体会】
单个运算符的计算学生问题不大,但混在一起多了还是有一定的麻烦,因此要多加强练习,多看书,记住各种运算符的运算法则和他们的优先级。