第五章表达式.docx
- 文档编号:10027716
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:14
- 大小:153.48KB
第五章表达式.docx
《第五章表达式.docx》由会员分享,可在线阅读,更多相关《第五章表达式.docx(14页珍藏版)》请在冰豆网上搜索。
第五章表达式
第5章表达式
本章目标
1.熟练掌握C++的各种表达式
2.掌握算术运算、逻辑运算、关系运算、赋值运算、逗号运算等概念。
3.掌握运算符的优先级、左结合和右结合规则以及目数的概念。
4.掌握表达式求值时类型的自动转换和强制类型转换。
5.理解名字空间的概念。
授课内容
5.1表达式概述
5.2算术运算符和算术表达式
5.3关系运算符和关系表达式
5.4逻辑运算符和逻辑表达式
5.5赋值运算符和赋值表达式
5.6自增运算符和自减运算符
5.7表达式中各运算符的运算顺序
5.8类型不同的数据之间的混合算术运算
5.9名字空间
程序举例
5.1表达式概述
运算是数据的加工过程。
记述不同运算的符号称为运算符。
参加运算的数据成为操作数或运算数。
由运算符和运算数组成的式子是表达式。
不同类型的表达式按不同运算规则进行计算。
计算结果是不同类型的值。
5.2、算术运算符和算术表达式
算术运算符:
+-*/%
运算对象:
数值变量、常数、函数、表达式等
计算结果:
数值
优先级:
先乘、除、取余,后加、减
结合性:
从左至右
注意事项:
•5X2应写成5*X*X
•(x+y)(x-y)改为(x+y)*(x-y)
算术表达式举例
设a=5,b=3,c=1,d=2,e=6,
求:
a+b-c/d+e%d
=5+3-0+0
=8
%左右必须是整型,否则编译出错
5.3、关系运算符和关系表达式
关系运算是对两个运算数进行大小关系等的比较。
用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称关系表达式。
关系表达式
计算结果:
逻辑值(true和false)。
c语言没有逻辑型数据以“非0”代表“真”,以“0”代表“假”。
例如,关系表达式“5==3”的值为“假”;
“5>=0”的值为“真”
关系优先级:
{>,>=,<,<=}高于{==,!
=}
与其他运算符的优先级:
赋值运算<关系运算<算术运算
5.3逻辑运算符和逻辑表达式
计算结果:
逻辑值(“真”和“假”)
优先级:
!
>&&>||
赋值运算<&&、||<关系运算<算术运算<!
(非)
运算对象:
算术、关系、赋值、字符及逻辑表达式
举例
x*y>z&&x*y<100||-x*y>0&&!
isgreat(z)
判别闰年表达式:
(year%4==0&&year%100!
=0)||year%400==0
xc或xb至少之一成立
x<=c||x>=b
i和j均小于或等于100,或者i和j均大于k
(i<=100&&j<=100)||(i>k&&j>k)
选未婚、30岁以上女讲师和35岁以上男副教授
!
婚否&&((性别=‘男’&&职称=‘副教授’&&年龄〉=35)
||(性别=‘女’&&职称=‘讲师’&&年龄)=30))
5.4、赋值运算符和赋值表达式
赋值运算符“=”:
格式:
V=e表达式的值为e;
其副作用是将表达式的值存入变量V。
复合赋值运算符:
格式:
Vop=e
等价于:
V=Vope
例如:
a+=5,等价于a=a+5
复合赋值运算符有:
+=、-=、*=、/=、%=等10个
5.5、赋值运算符和赋值表达式
赋值运算符“=”:
格式:
其中:
“=”不同于数学中的符号,没有相等的含义
表达式的值等于“表达式”;
其副作用是将表达式的值存入变量V。
复合赋值运算符:
格式:
Vop=e
等价于:
V=Vope
例如:
a+=5,等价于a=a+5
复合赋值运算符有:
+=、-=、*=、/=、%=等10
举例
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。
str[i]=ch+‘A’-‘a’;
将字符变量ch转换为大写字母,结果存入数组str[i]中。
5.6、自增、自减运算符
表5-1自增运算符和自减运算符的用法
举例一
i++;//i增加1
i;//i减少1
x=array[++i];
//将array[i+1]的值赋给x,并使i增加1
s1[i++]=s2[j++];
//将s2[j]赋给s1[i],然后分别使i和j增加1
•s1[i]=s2[j]
•i=i+1
•j=j+1
表达式语句i=j=m*n;的作用和
•j=m*n;
•i=j;
例5.1字符串连接
算法分析:
•字符串连接就是将两个字符串首尾相接。
•将“串2”连接于“串1”,结果是“串1串2”
•要确定串1的长度,串2的元素,依序存于串1的后面。
•串1的总长度大于等于串1和串2长度之和。
•字符串处理用字符数组和一重循环来实现。
•子函数中设两个形参,分别传递两个字符串。
voidstrcat(chars1[],chars2[])
//Example5-1:
连接两个字符串
#include
#include
intmain()
{chardestination[81]="abcdefghijklmnopqrstuvwxyz";
charsource[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
inti=strlen(destination);
intj=0;
while(source[j]!
=0)
destination[i++]=source[j++];
destination[i]=0;
cout<<"Theresultis:
"< return0; } 5.7表达式中各运算符的运算顺序 5.8类型不同的数据之间的混合算术运算 1.级别低的类型转换为级别高的类型。 各类型按级别由低到高的顺序为char,int,unsigned,long,unsignedlong,float,double。 2.可以使用强制类型转换。 d1=(double)i1/i2; 5.9名字空间 简单的名字空间定义如下: namespaceMyName { inti=5; intj=10; } 例5-2名字空间的使用。 //Example5-2: 名字空间的使用 #include namespaceuniversity {intgrade=4;} namespacehighschool {intgrade=3;} intmain() { std: : cout<<"Theuniversity'sgradeis: "< : grade< : endl; std: : cout<<"Thehighschool'sgradeis: "< : grade< : endl; return0; } 5.10其他具有副作用的运算符 赋值运算符“=”: 格式: V=e表达式的值为e; 其副作用是将表达式的值存入变量V。 复合赋值运算符: 格式: Vop=e 等价于: V=Vope 例如: a+=5,等价于a=a+5 复合赋值运算符有: +=、-=、*=、/=、%=等10个 5.11问号表达式和逗号表达式 格式为: 规则是: 当表达式e1的值为‘真’时,结果取e2的值;否则,结果取e3的值。 例如,z=x>y? x: y; 例5-3编写一个求绝对值的函数 算法分析: •设一个形参x,传递要求绝对值的数据; •处理公式选用: 问号表达式。 returnx>0? x: -x; //5-3: 求双精度类型量的绝对值 doublemydabs(doublex) { returnx>0? x: -x; } //用于调试函数的主函数 intmain() {doublef1=-12.0,f2=234.0; cout<<”dabs(“< cout<<“dabs(“< return0; } 逗号表达式 在C语言中把若干个独立的表达式结合成一个表达式,简称逗号表达式。 它按从左到右的顺序执行组成逗号表达式的各表达式,而将最后一个表达式(即表达式n)的值作为逗号表达式的值。 程序设计举例 例5-5求一元二次方程ax2+bx+c=0的根,其中系数a,b,c为实数,由键盘输入 例5-6对于任意给定的一个正整数n,统计其阶乘n! 的末尾中0的个数 例5-7计算50! 例5-8编写一个用于对整型数组进行排序的函数,排序方法使用希尔排序法。 例5-9找出2~10000之内的所有完全数。 所谓完全数,即其各因子之和正好等于本身的数。 如6=1+2+3,28=1+2+4+7+14,所以6,28都是完全 //Example5-5: 解一元二次方程 #include #include intmain() {doublea,b,c,delta,p,q; cout<<"pleaseintputa,b,c=? "; cin>>a>>b>>c; delta=b*b-4*a*c;p=-b/(2*a); q=sqrt(fabs(delta))/(2*a); if(delta>=0) cout< else {cout< cout< } return0; } 5-6: 统计阶乘n! 的末尾中0的个数 #include intmain() {intn; intm; intsum=0; cout<<"Pleastinputapositivenumber: "; cin>>n; for(inti=5;i<=n;i=i+5)//只有5的倍数才含5的因子 {m=i; for(intk=0;m%5==0;k=k+1) m=m/5; sum=sum+k; } cout<<"Thenumberofzeroin"< is: "< return0; } //5-7: 利用数组计算阶乘50! #include intmain() {constintMAXSIZE=100;intarray[MAXSIZE]; intn=50;intsum,sc; for(inti=0;i array[0]=1; for(i=2;i<=n;i++) {sc=0; for(intj=0;j {sum=array[j]*i+sc;//上一次进位值和当前计算结果求和 sc=sum/10;//存放进位数值 array[j]=sum%10;//将余数存入数组} } for(i=MAXSIZE-1;i>=0;i--)cout< cout< return0; } 例5-8 编写一个用于对整型数组进行排序的函数,排序方法使用希尔排序法。 //Example5-9: 寻找完全数 #include intmain() {intk; intn=2; while(n<=10000) { k=0; for(intm=1;m<=n/2;m++) if(n%m==0)k=k+m; if(k==n) cout<<"findone: "< n++; } return0; } 本章要点 规范算术表达式 掌握比较、逻辑表达式 了解自增、减运算符 小记: •区分赋值、比较运算符(=与==) •了解类型转换,如 floata,intb;a=b=3.1415; floata,intb;a=(float)b/2;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 表达式