1、第三章 表达式与语句,杨章伟 e-mail:,课程内容安排,掌握语句的概念; 了解什么是语句块; 掌握表达式的概念; 熟悉表达式中的各种运算符; 掌握运算符的优先级和结合性。,运算符,表达式由操作数和运算符组成,操作数可以是各种数据类型的常量和变量,而运算符必须是符合C+语法规则的符号。在具体讲解表达式和语句的相关内容前,读者需要对C+所支持的各种表达式有详细的理解。读者需要注意的是,不同的运算符需要指定的操作数的个数并不相同。根据运算符需要的操作数的个数,可将其分为3种: 单目运算符(一个操作数):如取址运算符(&),其操作数只有一个变量。 双目运算符(两个操作数):如算术运算符,每个都需要
2、两个操作数。如“1+2”,“3*4”等等。 三目运算符(三个操作数):在C+中只有一个接受三个参数的运算符“?:”,,算术运算符,算术运算符包括加减乘除(四则运算)运算符(+-*/)和求模运算符(%)。算术运算符是双目运算符,其操作数一般是整数和浮点数(或者是结果为整数或浮点数的表达式)。C+语言中支持的算术运算符符号、名称、功能及其相关示例,自增和自减运算符是C语言中已包含的一类运算符,事实上其也可包含在算术运算符的范畴中。自增和自减运算符的表示形式和实现的功能如下所示。 前缀增量的一般形式为:+(-);,表示使用运算分量前其值加(减)1。 后缀增量的一般形式为:+(-);,表示使用运算分量
3、后其值加(减)1。,赋值运算符,赋值运算符是C+程序设计中最基本的运算符之一,利用赋值运算符可以给一个变量赋值。C+的赋值运算符以“=”来表示,其是一个二元运算符。其说明语句的一般形式为, =; 其中,各部分的作用如下: 表达式的类型需与变量的类型一致。 “=”为赋值运算符,其不同于数学上的等号。赋值运算的运算规则是先计算右边表达式的值,然后将值赋给左边的变量。,关系运算符,关系运算符的功能是将两个运算分量进行大小比较,其运算结果类型为布尔数据类型。若关系成立,则值为true,否则为false。C+中,支持的关系运算符主要有6种,C+中,一共提供了三种逻辑运算符,分别为单目运算符逻辑非(!)、
4、双目运算符逻辑与(&)和逻辑或(|)。这三种运算符的运算结果类型都为布尔型数据类型,其值为true或false。,逻辑运算符,条件运算符(?:)是C+中唯一的一个三目运算符。其语法格式如下: expr1 ? expr2 : expr3; 其含义是:如果子表达式expr1的结果是true,则整个表达式的结果是子表达式expr2的值;否则是子表达式expr3的值。例如,读者可以通过如下的表达式理解条件运算符的使用。 x=ab?a:b 上述表达式的含义为:如果ab成立,那么将a的值赋给x;如果ab不成立,则将b的值赋给x。这在实际程序中应用是比较多的。,条件运算符,在C+标准中支持逗号运算符的使用,
5、其可以使多个表达式写在一行上,从而大大地简化了程序,逗号表达式的一般形式为: , 该表达式的使用规则如下: 表达式的执行顺序是:先求解表达式1,再求解表达式2,最后求解表达式n,其最终结果为表达式n的值。 逗号运算符是优先级最低的运算符,其结合性为从左到右的。,逗号运算符,位运算符,读者知道,C语言之所以被称为中级语言,很大程度上在于其支持位运算,而C+也继承了同样的优点。C+中包含了支持数据位运算的6种位运算符,表达式,表达式是由运算符和操作数组成的式子,参与计算过程的数值称作是操作数,而表示操作的符号称作是运算符(或运算符)。一个表达式由一个或多个操作数,以及零或多个运算符构成。其中,操作
6、数包含了常量、变量、函数和其他一些命名的标识符。,语句,读者知道,表达式是由运算符和常量变量构成。而在C+中,语句是数据处理过程中的最小单位,其标志是结尾处的分号“;”。读者可以认为语句由表达式和分号组成。,小结,本章主要讲述C+中的运算符、表达式和语句。在C+程序中,数据通过运算符组合成表达式。一个表达式后面加上分号,则该表达式就变成了一个语句。在运算符部分,本章着重讲解了7种运算符:算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、逗号运算符、位运算符,在介绍这些运算符的基本概念后,都设置了一个简单示例用以说明这些运算符在具体程序中的使用,并对这些运算符的优先级和结合性进行了说明
7、。同样地,针对不同的运算符,在表达式部分也对这些表达式做了详细介绍。最后简要介绍了C+中常见的几种语句。,习题,【题目25】设int x = 10,则表达式 x=10?20:30 的值为多少? 【分析】该试题主要考查条件运算符,而条件运算符为一个三目运算符,对于其中的三个表达式的含义为:如果子表达式1的结果是true,则整个表达式的结果是子表达式2的值;否则是子表达式3的值。因此,该题首先判断表达式1即x=10是否成立,此处x的值为10,因此该表达式成立,其值为表达式2的值,即20。【题目26】若有下面的语句 int x=2,y=3,z=4,m; 则在计算表达式 m=(xz-4) 后,m的值为
8、多少?,【题目27】编写一个C+程序,要求从键盘上输入两个整数,将其存入整型变量x和y,并求出这两个整数进行四则算术运算、整除运算和取余运算的结果。例如,在用户屏幕输入2和5后,其返回结果如图3.17所示。,【题目28】若表达式(a + b) c * 2 则表达式的值为多少? 【分析】该试题涉及到了关系运算符、算术运算符、逻辑运算符等,在表达式的运算前,读者要清楚其优先级和结合性。其中算术运算符的优先级最高,其次为关系运算符,最后为逻辑运算符,但其中非运算(!)的优先级又高于算术运算符。因此,该表达式先计算括号,a+b的值为7,c*2的值为4,1/2的值为0。因此,整个表达式的值为:1。,【题
9、目29】编写一个C+程序,要求从键盘上输入两个整数,将其存入整型变量a和b,不用第三个变量,将变量a和b的值进行互换,并将交换前后的a和b的值输出。例如,输入a的值为2,b的值为5,输出结果如图3.18所示。,【题目30】设int b=12,表达式b+=b-=b*b求值后b的值是多少? 【分析】该试题同样考查算术运算和赋值运算,读者首先要考虑赋值号的结合性。在上述表达式中,复合赋值运算符的优先级最低,而算术运算符*的优先级较高。因此,得出变量b的值为-264。【题目32】设int a=4,b=8,则+a*b的结果是多少? 【分析】该试题主要考查递增运算符和算术运算符,其中要求考虑两个运算符的优
10、先级。对于递增运算符+和乘法运算符*而言,其优先级+高于*。因此,该表达式+a*b首先将计算+a,其值为5,从而得出整个表达式的值为40。,【题目31】下面程序段的输出结果是多少? #include using namespace std; int main() int a,b;a=b=10;cout“a=“a“,“b=“bendl;int c=10,d;d=(c=5 * (a + b);cout“c=“c“,“d=“dendl; system(“pause“);return 0; ,【题目33】编写一个C+程序,计算表达式(a+b)*c/d-a%b的值。其中,a,b,c,d的值分别为3,7,
11、5,8。【题目34】编写一个C+程序,计算表达式a+、a-、+a和a的输出结果,其中,a的初始值为10。 【题目35】编写一个C+程序,计算表达式s+=a、s+=a+、s*=(a+b)的值,其中,变量s、a、b的初值均为1。 【题目36】编写一个C+程序,计算表达式ab,a=b,a=b和a!=b的值,其中,变量a和b的初值分别为3和4。,【题目37】编写一个C+程序,计算表达式a&b,a|b,!a和a&(b|a)的值,其中,变量a和b的初值分别为0和1。 【题目38】编写一个C+程序,计算条件表达式(ab)?a-b:b-a的值。其中,变量a和b的初值分别为3和4。 【题目39】编写一个C+程序,计算逗号表达式(a=3,b=4,a+b)的值。 【题目40】编写一个C+程序,计算表达式a&b,a|b,a和ab的值,其中,变量a和b的初值分别为3和4。,