1、January 18, 2019,1,第四章 表达式,计算机教学实验中心 西安交通大学,January 18, 2019,2,表达式,由运算符和运算数组成的式子是表达式。 不同类型的表达式按不同运算规则进行计算。 计算结果是不同类型的值。,January 18, 2019,3,一、算术运算符和算术表达式,算术运算符:+ - * / % 运算对象:数值变量、常数、函数、表达式等 计算结果: 数值 优先级: 先乘、除、取余,后加、减 结合性: 从左至右 注意事项: 5X 应写成 5*X*X (x+y)(x-y) 改为(x+y)*(x-y),2,January 18, 2019,4,算术表达式举例,
2、设a=5,b=3,c=1,d=2,e=6,求: a+b-c/d+e%d= 5 + 3 - 0 + 0= 8,January 18, 2019,5,二、关系运算符和关系表达式,关系运算符: = ,=,= 高于 = , !=赋值运算 关系运算 算术运算 运算对象:算术、关系、赋值、字符表达式,January 18, 2019,6,三、逻辑运算符和逻辑表达式,逻辑运算符:&(与) |(或) !(非) 逻辑表达式:由逻辑运算符组成的表达式。 计算结果:逻辑值(“真”和“假”) 优先级:! & |赋值运算 &、| 关系运算 算术运算 ! 运算对象:算术、关系、赋值、字符及逻辑表达式,January 18
3、, 2019,7,举例,x*yz&x*y0&!isgreat(z) 判别闰年表达式: (year %4=0 & year%100!=0)|year%400=0 xc或xb至少之一成立x = b i和j均小于或等于100,或者i和j均大于k( I k & j k ) 选未婚、30岁以上女讲师和35岁以上男副教授! 婚否 &( (性别=男& 职称=副教授& 年龄=35) | (性别=女& 职称=讲师& 年龄=30)),January 18, 2019,8,四、赋值运算符和赋值表达式,赋值运算符 “=”:格式: V = e 将表达式的值赋值给变量V,其副作用是将表达式的值存入变量V。 复合赋值运算符
4、:格式: V op = e 等价于: V = V op e 例如: a += 5, 等价于 a = a + 5 复合赋值运算符有:+=、- =、*=、/=、%=等10个,January 18, 2019,9,举例,i=j=m*n;计算表达式m*n的值,将其结果存入变量j中,然后再将结果存入变量i中。 temp=a; a=b; b=temp;交换a和b的值,temp是工作单元。 sum=sum+i;(等价于 sum+=i;)计算sum与i的和,结果送sum。 stri = ch+A- a;将字符变量ch转换为大写字母,结果存入数组stri中。,January 18, 2019,10,五、自增、自
5、减运算符,表4-1 自增运算符和自减运算符的用法,January 18, 2019,11,举例一,i+ -i x=array+i s1i+=s2j+ s1i=s2j i=i+1 j=j+1,January 18, 2019,12,例4-1字符串连接,算法分析: 字符串连接就是将两个字符串首尾相接。 将“串2”连接于“串1”,结果是“串1串2” 要确定串1的长度,串2的元素,依序存于串1的后面。 串1的总长度大于等于串1和串2长度之和。 字符串处理用字符数组和一重循环来实现。 子函数中设两个形参,分别传递两个字符串。void strcat(char s1 , char s2 ),January
6、18, 2019,13,程序逻辑功能框图,求串的长度i istrlen(s1);,是,j=0;,s1 i+ = s2 j+ ;,s2j!=0?,否,January 18, 2019,14,VC0401.cpp子函数,/ 函数 strcat(): 连接两个字符串 #include #include void mstrcat(char destin, char source) int i = strlen(destin), j = 0;while(sourcej!=0)destini+ = sourcej+;destini = 0; ,January 18, 2019,15,VC0401.cpp主
7、函数,/ 用于调试函数的主函数 void main() char s181 = “abcdefghijklmnopqrstuvwxyz“;char s230 = “ABCDEFGHIJKLMNOPQRSTUVWXYZ“;strcat(s1, s2);cout“The result is: “s1“.“endl; ,January 18, 2019,16,7、问号表达式,格式为:e1 ? e2 : e3 规则是: 当表达式e1的值为真时,结果取e2的值;否则,结果取e3的值。 例如,z = xy ? x : y ; 例4-5求一个双精度数的绝对值 算法分析: 设一个形参x,传递要求绝对值的数据;
8、 处理公式选用:问号表达式。return x0 ? x : -x;,January 18, 2019,17,VC0402.cpp程序,/ Example 4-2:求双精度类型量的绝对值 double dabs(double x) return x0?x:-x; / 用于调试函数的主函数 main() double f1 = -12.0, f2 = 234.0;cout ”dabs(“f1“)=”dabs(f1)endl;cout “dabs(“f2“)=“dabs(f2)endl; ,January 18, 2019,18,4.8、位运算表达式,范围:只能是各种整型(char,int,long
9、) &与 |或 异或 反 右移,January 18, 2019,19,表4-2: 位操作的运算规则,January 18, 2019,20,short x,y; x=3,y=5;求x&y?,0000, 0000, 0000, 0011,& ) 0000, 0000, 0000, 0101,0000, 0000, 0000, 0001,举例一,January 18, 2019,21,short x=3 求x30000, 0000, 0000, 0011 ) 110000, 0000, 0001, 1000,举例二,January 18, 2019,22,例4-3 计算1!+2!+3!+4!+2
10、0!,/ Example 4-4:求级数和 #include void main() long sum = 0, t = 1;for(int i=1; i=20; i+) t = t*i;sum = sum+t;cout“sum = “sumendl; ,January 18, 2019,23,例4-4 编写程序制作九九乘法表,/ Example 4-5:制作乘法表 #include void main() int i,j; for(i=1; i10; i+) for(j=1; j=i; j+) cout i*j “t“; cout endl; ,January 18, 2019,24,例4-
11、5 根据三边长求三角形面积,/ Example 4-5:求三角形面积 #include “math.h” #include “iostream.h” void main() double a, b, c, s, area; cout a b c; s = (a+b+c)/2; area = sqrt(s*(sa)*(sb)*(sc); cout “area = “ area; ,January 18, 2019,25,例4-6 求一元二次方程的根,#include “math.h“ #include “iostream.h“ void main() double a, b, c, delta,
12、 p, q;cout a b c;delta=b*b4*a*c;p=b/(2*a); q = sqrt(fabs(delta)/(2*a);if(delta = 0)coutendl “x1 = “ p+q endl “x2 = “ pq endl;else cout endl “x1 = “ p “ + j“ q;cout endl “x2 = “ p “ j“ q endl; ,January 18, 2019,26,例4-7 求 的近似值,#include #include void main() int s = 1;double n = 1.0, t = 1.0, pi = 0.0;while(fabs(t)=1e4) pi = pi+t;n = n+2;s = s;t = s/n;cout “pi = “ 4*pi endl; ,January 18, 2019,27,10、作业,单元上机练习题目: 1、2、3、4 请预习第五单元,January 18, 2019,28,结束语,“纸上谈兵”学不出程序设计本领;只有大量上机、编程、调试,才能掌握。 学好程序设计语言的唯一途径是上机。 你的编程能力和你在机器上投入的时间成正比。,