c第三章表达式和语句.ppt
《c第三章表达式和语句.ppt》由会员分享,可在线阅读,更多相关《c第三章表达式和语句.ppt(46页珍藏版)》请在三一文库上搜索。
1、C语言程序设计,第二章 表达式和语句,3.1 表达式 1. 表达式的概述 表达式时操作符、操作数和标点符号组成的序列,其目的时用来说明一个计算过程。 表达式可以嵌套,例如:2 + 3 + (5 * sizeof(int) / 345。 表达式根据某些约定、求值次序、结合和优先级规则来进行计算。 所谓约定,即类型转换的约定。例如: float a; a = 5 / 2 ; 结果a得到值为2。5 /2 是整数除法取整,因为5和2都是整数,不会由于a是float型而轻易改变运算的性质。,所谓求值次序,是指表达式中各个操作数的求值次序视编译器不同而不同。 所谓结合性,是指表达式中出现同等优先级的操作符
2、时,该先做哪个操作的规定。例如: d = a + b c ; /C+规定,加减法先左后右。先做a + b,其结果再减去c d = a = 3 ; /C+规定,等号先右后左。先做a = 3,其结果再赋给d 所谓优先级,是指不同优先级的操作符,总是先做优先级高的操作。例如: d = a + b * c ; / 乘法优先级比加法高。先做b * c,其结果再与a相加 2.左值和右值 左值是能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。例如:,int a = 3 ; /a是变量,所以a是左值 const int b = 4 ; /b是常量,所以b不是左值 显然常量不是左
3、值,因为C+规定常量的值一旦确定是不能更改的。 右值能出现在赋值表达式的右边。左值表达式也可以作为右值表达式。例如: int a , b = 6 ; a = b ; /b是变量,所以是左值,此处作为右值 a = 8 ; /8是常量,只能作为右值,不能作为左值 3.优先级和结合性 下表包含了C+所有的操作符,共有16级优先级。 每一级中的操作符是同优先级的。,4.语句与块 C+中所有的操作运算都能通过表达式来实现。由表达式组成的语句称为表达式语句,它由一个表达式后接一个分号“;”组成。 通过计算表达式即执行了表达式语句。 语句可以是空语句。空语句是只有一个分号而没有表达式的语句,其形式为: ;
4、它不产生任何操作运算,只作为形式上的语句,被填充在控制结构中。例如: if( x 9 ) ; else cout“not larger than 9n”;,块(或称复合语句)是指括在一对花括号里的语句序列。从语法上来说,块可以被认为是单个语句。例如: if( x 9 ) cout“The number is perfect.n”; cout“It is larger than 9n”; else cout“not larger than 9n”; 上面两条执行语句必须放在花括号中,因为if与else之间只能容纳一条语句,或一个语句块。而else后面的花括号则可以省略。,3.2 算术运算和赋值
5、操作符种类 C+提供了算术运算符 + , - , * , / , % 。 + , - , *是通常意义的加、减、乘法。 /对于整型数则为除法取整操作。例如:5/2得到结果2。 /对于浮点数则为通常意义的除法。例如:5.0/2.0得到结 果为2.5。 由此可见,/操作符可以对不同的数据类型进行不同的 操作。事实上, + , - , * , / , % 对不同数据类型的操作都不 同。 只能对整型数进行操作。其操作意义为取余。例如,52得到结果为1。 不允许对浮点数操作,如果对浮点数操作,则引起编译错误。 2.赋值缩写 算术表达式的赋值表示为: int x , y , z ; x = y * z ;
6、 x = y / z ; x = y + z ; x = y z ; x = y % z ; 当一个变量既出现在表达式的左边又出现在右边时,可以缩写。例如:,x = x * y ; 缩写为: x * = y ; x = x + y ; 缩写为: x + = y ; x = x - y ; 缩写为: x - = y ; x = x / y ; 缩写为: x / = y ; x = x % y ; 缩写为: x % = y ; 3.溢出 进行算术运算时,很可能溢出结果。发生溢出是由于一个变量被赋予一个超出其数据类型表示范围的数值。数值溢出不会引起编译错误的,只要分母不为0就不会引起除0进行故障,但
7、人使运行结果发生偏差。 例如,在16位机器上进行下面的操作: int weight = 42896 ; 在16位机器中将不能得到值42896,而是-22640。因为有符号整数的表示范围是-3276832767。,3.3算术类型转换 C+遇到两种不同数据类型的数值进行计算时,会将两个数作适当的类型转换,然后再进行运算。转换的方向见下图:,如果一个char型数和一个int型数相加,则将char型数转换成int型数,然后进行运算。如果一个long int型数和一个float型数相加,则先将两个数据类型都转换成double型数,然后进行运算。如果一个 int 型数和一个unsigned long 型数
8、相乘,则先将两数都转换成double 型数,然后进行运算。 转换总是朝表达数据能力更强的方向,并且转换总是逐个运算进行的。例如: float f = 3.5 ; int n = 6 ; long k = 21 ; double ss = f * n + k / 2 ; ss将会得到结果31。计算ss时,首先将f(float型)和n(int型)转换成double 型数,算的21,然后计算 k/2 的整除运算结果10(long int 型),再将long int 型的数字10转换成double,型数。 数据运算过程中自动进行的类型转换称为隐式类型转换。上例的表达式运算过程中进行的数据类型转换就是隐
9、式转换。 有时候,我们会面临现面计算结果不正确的问题: long m = 234 * 456 / 6; 即发现m为-4061,而不是17784。原因式语句先进行int 型数的乘法运算,结果仍以int 型数保留起来,中间结果有一个被截断的过程,所以,最后的结果式错的。如果让第1次乘法的结果以long 型数保留下来,就能得到正确的结果。这就要求参加乘法运算的2个数中至少有一个为long 型数。 例如,将其中之一标识以L或l(long),则可保证其正确 cout234 * 456L/6 endl;,输出结果为: 17784 还可以将整型数强制转换为long 型: cout (long)234*456
10、/6endl; 该语句使234成为long型数,与整数456相乘,先隐式转换,再相乘,得到一个long型数106704。再与6相除取整,从而得到正确结果。 强制转换又称显示转换,其语法式在一个数值或变量前加上带括号的类型名。也可以类型名后跟带括号的数值或表达式(C不可以)。如上面的语句也可以写成: coutlong(234) * 456 / 6endl; 如果类型名是带类型修饰的,则要给类型名加括号。例如:,cout(unsigned long )234 * 456 / 6endl; coutunsigned long (234) * 456 / 6endl; /error 注意下面语句不能产
11、生所期望的效果: coutlong(234*456)/6endl; 该语句首先执行括号里的乘法,得到一个int型整数,然后强制转换为long型数,再参加除6取整运算,所以得不到正确结果。 3.4增量和减量 增量和减量操作符表示为:+和-。 增量操作表示加1,减量操作表示减1。例如: a+ ; /相当于a = a + 1; +a ; /相当于a = a + 1;,a- ; /相当于a = a 1 ; -a ; /相当于a = a 1; 增量操作符有前增量与后增量之分。前增量操作+a的意义为:先修改操作数使之增1,然后将增1过的a值作为表达式的值。而后增量操作a+的意义为:先将变量a的值作为表达式
12、的值确定下来,再将a增1。对于增量和减量操作符,它要求操作数是左值,因为操作数的值要发生变化。例如: int a = 3 ; int b = +a ; couta“ ”bendl; int c = a+ ; couta“ ”cendl; 输出结果为: 4 4 5 4,b被赋予了4,因为前增量操作先将a自增为4,然后作为表达式赋值。c被赋予了4,因为后增量操作使表达式的值 (a)先赋给c,然后a再自增值为5。 由于增量与减量操作包含有赋值操作,所以操作数不能是常量,它必须是一个左值表达式。例如: 3+ ; /error 增量与减量操作符是两个+或两个- 的一个整体,中间不能有空格。如果有多于两个
13、+或两个- 连写的情况,则编译首先识别前面两个+ 或 为增量或减量操作符。 例如,对于“int a=1,b=5,c;”的变量定义,下面5个表达式,有些不允许: c=a+b; c=a+b; c=a+b; c=a+b; c=a+b;,3.5关系与逻辑运算 运算符 关系操作符有: 比较() 大于() 小于(=) 小于等于(=,= ,!=, ,&,|都是一个操作符的整体 ,所以中间不能有空格,而且前3个操作符中的字符次序不能,颠倒。例如:下面的语法都是不合法的。 =,=!, =,= =,! = 2.比较运算符 比较()和赋值()是两个不同的操作,所以用的操作符也不同。比较用于测试给定的2个操作数是否相
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 表达式 语句
链接地址:https://www.31doc.com/p-2201078.html