屌丝 c++语言程序设计 第三章 运算符和表达式

来源:互联网 发布:ajax引用json文件 编辑:程序博客网 时间:2024/06/06 14:00

【学习目标】
  熟练掌握C++各种运算符的使用方法。能熟练运用运算符组成需要的表达式。正确使用操作数的类型转换和运算符的优先级顺序和结合性。
【重点和难点】
  自增、自减运算符的运用;各个运算符的优先级顺序及其结合性;操作数的类型转换。
【学习方法指导】
  要在学习中注意区分运算符、表达式和语句的不同;不同类型的操作数赋值时,尽量进行显式转换,隐式转换容易犯错误;优先级和结合性也容易犯错误,一般说来,表达式中加上圆括号,比较保险,这也可以提高程序的可读性。
【知识点】
  算术运算符;自增、自减运算符;关系运算符;逻辑运算符;位运算符
  赋值运算符;求字节数运算符;逗号表达式;短路表达式;显式类型转换;隐式类型转换;优先级与结合性


第一节 c++运算符

所谓运算符就是指运算的符号,例如加运算符(+)、乘运算符(*)、取地址运算符(&)等。表达式与运算符密不可分,它由运算符与操作数组合而成,并由运算符指定对操作数要进行的运算,一个表达式的运算结果是一个值。本章中,我们将介绍C++语言基本的运算符、表达式,各种运算符的优先级、结合性,以及不同数据类型的值之间的转换。

C++语言中的运算符是可以让C++语言编译器能够识别的具有运算意义的符号。编译器把这些符号及其组成的表达式翻译成相应的机器代码,就可以由计算机运行得出正确的结果。
  其实,就象我们日常生活当中许多东西的名字,如冰箱、电视机等分别代表不同功能的电器设备一样,运算符就是代表C++语言中的各个运算功能的名字,这些名字是由制定C++语言规范的人员确定的。下面给出由运算符组成的表达式的例子:
  下面是几个表达式例子。如:
   100+200-300*200+1000/20+100%10
   a || b && c || d
   a = b + c + d*e
   a += b++
   c -= d--
  只要是按C++语法写出的表达式,编译器就能够解释其中的运算符和由运算符、操作数组成的表达式的意义。

第二节 优先级和结合性

当不同的运算符混合运算时,运算顺序是根据运算符的优先级而定的,优先级高的运算符先运算,优先级低的运算符后运算。在一个表达式中,如果各运算符有相同的优先级,运算顺序是从左向右,还是从右向左,是由运算符的结合性确定的。所谓结合性是指运算符可以和左边的表达式结合,也可以与右边的表达式结合。C++运算符的优先级和结合性参见表3-14。
  在表3-14中,"单"表示是单目运算符,"双" 表示是双目运算符,"三" 表示是三目运算符。表中有一些运算符,我们还没有介绍,以后我们会在有关的内容中学习。


表格表3-14 C++运算符的优先级和结合性 优先级运算符种类结合性最高: :(全局)     单从右到左最高: :(类域)     双从左到右.( )(括号及函数调用)- >..[ ]双从左到右.+
-++
--!
~*
&new
deletesizeof
(类型)单从右到左.- > *. *    双从左到右.+/%    双从左到右.+-     双从左到右.<<>>     双从左到右.<< =>> =  双从左到右.= =! =    双从左到右.&     双从左到右.^     双从左到右.|     双从左到右.& &     双从左到右.| |     双从左到右.? :     三从左到右.=     双从右到左最低,     双从左到右

  每种运算符都有一个优先级,优先级是用来标志运算符在表达式中的运算顺序的。优先级高的先做运算,优先级低的后做运算,优先级相同的右结合性决定计算顺序。
  大多数运算符都是按从左到右计算,只有三类运算符的结合性是从右到左。他们是:单目、三目和赋值。这一点一定要记住。


第三节 类型转换

3.3 类型转换
  C++中,一种数据类型能够被转化为另一种数据类型。例如3-3:
  从上面实例我们可以看到:类型标识符能被用于类型运算符。类型运算符是单目运算符,并位于其操作数的左边的圆括号里,称之显式类型转换,或强制类型转换。显式类型转换的一般形式为:
  (类型名)(表达式)
  需要注意的是: (int)(x+y)是将(x+y)转换为int 型,而(int)x+y是将x转换为int型后再与y相加。显式类型转换只是得到一个所需类型的中间变量,原来变量的类型并不发生变化。

例题例3-3 (int) 3.14 // 3.14 转换成整型数3
(long) 3.14 // 3.14转换成长整型数3L
(double) 2 // 2转换成双精度数2.0
(char) 122 // 122转换成Unicode码为122的字符
(unsigned short) 3.14 // 3.14转换成无符号整型数3
  如果类型标识符仅为一个单词,显式类型转换的形式也可以写成:类型表示符(表达式)。例如:
    int(3.14) // 等价于(int) 3.14
  在一般情况下,各种数据都按默认类型参与运算, 当两个不同的数据类型(整型、字符型、实型)进行运算时,数据将进行自动类型转换,转换后再参与运算。
  例:指出下面每个语句的执行结果。例题例3-4 char ch='c';
int a,b=13;
float x=2.0;
double y;
a=ch+5; //a=104,a先转化为int型,再参与运算。
x=b/2/x; //x=3.0,先作整除运算,然后再转换成double与x运算。
x=b/x/2; //x=3.25,b先转换成float型与x做除法,同时2也转化成float型,然后做除法运算。
y=x/b; //x=0.153846153846154,x和b分别转化成double然后做除法运算。
  又例如:例题例3-5 double d = 1; // d 的值1.0
int i = 10.5; // i的值10
i = i + d; // 等价于: i = int(double(i) + d)
  上例中,表达式i = i + d的变量i与d的类型不同,使得i首先被转换为double型(提升),再与d相加,其结果为一double型数。由于该double型数与赋值语句左边i的类型不匹配,所以在它被赋给i之前,再被转换为int型(下降)。
  上面的自动类型转换也称为隐式转换。

第四节 表达式

3.4.1表达式的种类
  表达式是由运算符和操作数组成的式子。运算符可以是前面讲过的那些。操作数包含了常量、变量、函数和其他一些命名的标识符。最见大的表达式是常量和变量。
  C++中由于运算符很丰富,因此表达式的种类也很多。常见的表达式有如下六种:
  已知int a;
  ·算术表达式。例如,a+5.2/3.0-9%5
  ·关系表达式。例如,'m'>='x'
  ·逻辑表达式。例如,!a && 8 | | 7
  ·条件表达式。例如,a>4 ? ++a:--a
  ·赋值表达式。例如,a=7
  ·逗号表达式。例如,a+5,a=7,a+=4

注意:
  1、在表达式中,连续出现两个运算符时,最好用空格符分隔。如:
    a+++b; (注意:在visual c++中这种写法是错误的,编译将不能通过)
  系统将默认为是a++ +b,因系统将按尽量取大的原则来分割多个运算符。如果想执行a加++b,则应写成
    a+ ++b;
  2、在写表达式中,有时记不清楚运算符的优先级时,可使用括号来确定运算符组合。


 


【本章小结】
  介绍了C++基本的各种运算符构成(算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符几其它运算符)以及它们的优先级和结合性。同时介绍了由运算符组成的各种表达式、表达式中操作数类型的显式及隐式转换。
  自增、自减运算符,前缀式先将操作数增1(或减1),然后取操作数的新值参与表达式的运算。后缀是先将操作数增1(或减1)之前的值参与表达式的运算,到表达式的值被引用之后再做加1(或减1)运算。
  关系运算符两边的数值结果必须是类型相同的。
  在实现优先级与实际需要不相符时,需要使用括号来改变。
  参加运算的两个操作数类型不同时,C++将自动作隐式类型转换,但有时要作强制类形转换。
  表达式和语句的一个重要区别是:表达式具有值,而语句是没有值的并且语句末尾要加分号。

课后习题

一:选择题
1.以下符号中不能作为标识符的是:
a._256
b.void
c.scanf
d.Struct
2.下面不能正确表示a*b/(c*d)的表达式是:
a.(a*b)/c*d
b.a*b/(c*d)
c.a/c/d*b
d.a*b/c/d
3.下列运算符中,运算对象必须是整型的是:
a./
b.%=
c.=
d.&
4.若x,y,z均被定义为整数,则下列表达式终能正确表达代数式1/(x*y*z)的是:
a.1/x*y*z
b.1.0/(x*y*z)
c.1/(x*y*z)
d.1/x/y/(float)z
5.已知a,b均被定义为double型,则表达式:b=1,a=b+5/2的值为:
a.1
b.3
c.3.0
d.3.5
6.如有int a=11;则表达式(a++*1/3)的值是
a.0
b.3
c.4
d.12
7.在下列运算符中,优先级最低的是:
a.||
b.!=
c.<
d.+
8.表达式9!=10的值为:
a.非零值
b.true
c.0
d.1
9.能正确表示x>=3或者x<1的关系表达式是:
a.x>=3 or x<1
b.x>=3|x<1
c.x>=3||x<1
d.x> =3||x<1
10.下列运算符中优先级最高的是:
a.!
b.%
c.-=
d.&&
二:填空题
1.若a为double性的变量,表达式a=1,a+5,a++的值为 。
2.表达式7.5+1/2+45%10= 。
3.与! (x>2)等价的表达式是 。
4.表达式于语句的重要区别是 。
5.赋值运算符的结合性是由 至 。
6.x *= y+8等价于x= 。
7.给出下列程序的输出结果 。
 #include <iostream.h>
 void main()
 {
  int a=3,b=6;
  int c=a^b<<2;
  cout<<c<<endl;
 }
8. 给出下列程序的输出结果 。
 #include <iostream.h>
 void main()
 {
  int x=5;
  int y=2+(x+=x++,x+8,++x);
  cout<<y<<endl;
 }
9. 给出下列程序的输出结果 。
 #include <iostream.h>
 void main()
 {
  int a=7,b=4;
  float x,y=27.2,z=3.4;
  x=a/2+b*y/z+1/3;
  cout<<x<<endl;
 }
10. 给出下列程序的输出结果 。
 #include <iostream.h>
 void main()
 {
  int a=-1,b=4,k;
  k=(a++<=0)&&!(b--<=0);
  cout<<k<<a<<b<<endl;
 }
三:编程及简答题
1.x=2, y=3, z= 4时,计算下面表达式的值A1、A2
A1 = x + y +2/2+z和 A2=x+(y+2)/(2-z)


2.述算术运算符的组成


3.下列运算符从高到底进行排序:‘+’、‘*’、‘&&’、 ‘&’、 ‘>’、 ‘>=’、 ‘*=’。

4.述下列运算符各能代表几种意义:‘-’、‘&’、‘*’。


5.下列运算符的结合性如何:‘+’、‘&’、‘=’、‘||’。


6.计算下列表达式的值:
i.1/2 + 5/2 + 7/6
ii.1/2. + 5/2. + 3.
iii.1/2 + 5./2 + 2
iv.(unsigned char) 500 + 200
v.(unsigned char) (500 + 200)
vi.(unsigned int)(unsingned char)750


7.编程实现:由键盘输入两个整数,然后输出最大者。


8.int a=5, b=0; 问下面表达式运算后a和b的值是多少?
(1) ! a && a+b && a++
(2) !a||a++||b++


9.有变量说明
int a=4,b;
指出下面表达式运算后a和b的结果?
b+=b=++a;


10. 编程实现:测试你机器的 int,float,double,long,char 各类型变量存储的字节数

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高铁餐吧乘务员东西卖不出去怎么办 铁路局如果查出有乙肝怎么办 在火车站丢了东西怎么办 在新乡火车站丢了东西怎么办 自己的行李忘到高铁安检怎么办 高铁二等座睡觉怎么办 空少岁数大了怎么办 美国留学生办欧洲签证怎么办 苏州小区不让装充电桩怎么办 饿了么运力不足怎么办 书法落款写偏了怎么办 辐射4运行不流畅怎么办 vgs币忘了映射怎么办 货车把我的货物运输中损坏怎么办 道路货物运输从业资格证过期怎么办 高铁喷雾被扣了怎么办 宝宝不好好吸奶怎么办 宝宝不用劲吸奶怎么办 刚出生的宝宝不吃奶怎么办 老婆怀孕想吐怎么办呢 菜把下水道堵了怎么办 一楼厕所堵了怎么办 农村房屋确权有争议怎么办 盲审一个没过怎么办 本科生论文盲审不过怎么办 本科盲审没通过怎么办 一篇论文多次引用著作怎么办 学生毕业后改名学籍怎么办 大学毕业后改名字后学籍怎么办 考科目三下暴雨怎么办 挂科太多拿不到毕业证怎么办 挂科太多不给毕业证怎么办 大专毕业拿不到毕业证怎么办 高考差一分二本怎么办 3个月宝宝大小眼怎么办 华东交大理工学院没有评教怎么办 学校断4g网怎么办 学校移动4g网卡怎么办 没上专科线怎么办福建 联考没过本科线怎么办 拍婚纱拍的脸歪怎么办?