C语言程序设计3-运算与表达式_第1页
C语言程序设计3-运算与表达式_第2页
C语言程序设计3-运算与表达式_第3页
C语言程序设计3-运算与表达式_第4页
C语言程序设计3-运算与表达式_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、运算与表达式 3.1 算术运算算术运算 n运算符(Operator):描述运算功能的符号n表达式(Expression):由运算符和操作对象构成的式子。n运算符分类: n根据操作数个数分类:单目运算符、双目运算符 、三目运算符n根据运算功能分类:n算数运算符n关系运算符n逻辑运算符n位运算符n其它3.1 算术运算算术运算 n3.1.1 算术运算符 n单目基本算术运算符【例3.1】n+ 正n- 负n双目基本算术运算符 【例3.2】n+ 加n- 减n* 乘n/ 除n% 求余数(要求两个操作数必须是整数)3.1 算术运算算术运算 n注意点1、若两个操作数的类型不同不同,则先转换为相同类型后再运算。2

2、、若两个操作数的类型相同相同:n若均为short int 或 char 类型,则转换为intn若均为float 类型,则转换为double3、除法运算符/:若两个操作数都是整型,则结果为整型(小数部分直接去掉)4、求余运算%:n两个操作数必须是整型,否则编译出错。n结果的符号与第一个操作数符号相同。3.1 算术运算算术运算3.1.2 优先级与结合性优先级与结合性 n优先级问题优先级问题 当一个表达式中有多个运算符时,先计算哪个? 例如:10+20/10n结合性问题结合性问题当一个表达式中有多个相同优先级的运算符时,是从左向右计算,还是从右向左计算?例如:10*2/5优先级优先级运算符运算符高高

3、& + - - & + - - (按位取反)(按位取反) ! !(逻辑非)(逻辑非) + +(正)(正) - -(负)(负) 右右左左* * / % / %左左右右+ +(加)(加) - -(减)(减)左左右右 (按位右移)(按位右移)左左右右 = =左左右右=(相等)(相等) != !=(不相等)(不相等)左左右右& &(按位与)(按位与)左左右右 (按位异或)(按位异或)左左右右| |(按位或)(按位或)左左右右&(逻辑与)(逻辑与)左左右右|(逻辑或)(逻辑或)左左右右?:?:(条件运算符)(条件运算符)右右左左= += -= = += -= *

4、*= /= %= = = /= %= = &= |= =&= |= =右右左左低低, ,(逗号)(逗号)左左右右请记录请记录3.1 算术运算算术运算3.1.3 数据类型转换数据类型转换 n数据类型转换n隐式类型转换n操作数为char或short int时,自动转换为整型n操作数为float时,自动转换为double型n当操作数类型不同时,将精度低的操作数的类型转换为精度高的另一个操作数类型。n强制类型转换n(类型名)(表达式) n(double)x signed charsigned short intsigned intsigned longunsigned charunsi

5、gned short intunsigned intunsigned longfloatdoublelong double请记录请记录3.1 算术运算算术运算 3.1.4自增、自减运算自增、自减运算 n自增运算符“+”n表达式形式:n运算符运算符 操作对象操作对象 如:如:+kn操作对象操作对象 运算符运算符 如:如:k+n自减运算符“-” n表达式形式:n运算符运算符 操作对象操作对象 如:如:-kn操作对象操作对象 运算符运算符 如:如:k-n注意注意n自增对象必须是整型变量整型变量 n尽量避免在一个表达式中出现对同一个变量的多次自增、自减运算 3.2关系运算关系运算 n关系运算符 n=

6、=双目等于左结合n!=双目不等于左结合n双目大于左结合n=双目大于等于左结合n双目小于左结合n、=、=、y) & (-x0)后,求x的值2、执行表达式(xy) | (-x0)后,求x的值3.4 位运算位运算 n3.4.1 按位逻辑运算 n&双目 按位与左结合n|双目 按位或左结合n 双目 按位异或左结合n单目 按位取反(非) 右结合n3.4.2 移位运算移位运算n双目 右移位左结合3.4 位运算位运算 n3.4.3 程序例子程序例子 n输入一个整数,把该数的二进制第5位清0 2个字节:1111 1111 1110 1111 F F E Fn输入一个整数,判断该数的二进制第5位是

7、否为1,若是则输出1,否则输出0 2个字节:0000 0000 0001 0000 0 0 1 0例3.18例3.19参考参考【例例3.183.18】编程练习编程练习输入一个无符号字符型整数,把该数的二进输入一个无符号字符型整数,把该数的二进制第制第2 2位清为位清为0 0,第,第3 3位置为位置为1 1。103.5 指针运算指针运算 3.5.1 取地址运算 n通过求地址运算符(&)获得地址值n表达式形式:& 操作对象n例如:int a=3,*p;p=a; n通过指针变量或地址常量获得地址值nint a=3,*p=&a, *q=p;nchar *p=ABCDEFG; n

8、通过标准函数获得地址值 n空指针:int *p=NULL; 或 int *p=0 或 int *p=0; 3.5 指针运算指针运算 3.5.2 操作指针变量 n存取单元的数据两种方法n直接存取:通过变量名称变量名称存取变量值n间接存取:通过变量地址变量地址存取变量值n指针变量的使用注意事项 n先赋值后使用 n“&”和“*”优先级相同,结合性为右结合 q p a int a, *p=&a, *q=&p;3.5 指针运算指针运算 3.5.3 移动指针移动指针 n形式如下:n指针 + 整型表达式n指针 整型表达式 n【例3.22】指针变量使用举例。#include void

9、main( )int a, *p=&a;char c, *pc=&c;printf(%d,%dn,p,p+1);printf(%d,%dn,p,p-2);printf(%d,%dn,pc,pc+1);printf(%d,%dn,pc,pc-2);app+1cpcpc+13.5 指针运算指针运算 3.5.3 比较指针比较指针 n形式如下:n类型相同的两个指针变量之间可以进行、=、=、=、!= 的比较运算。此外,任何指针变量都可以和0或空指针进行“=”或“!=”的关系运算 。n两个同类型指针之间也可以进行减法运算,减法运算的结果是两个指针之间相差的内存单元个数,即两者相差内存地址值

10、除以指针指向数据类型所占内存的大小。3.6 其它运算其它运算 3.6.1 sizeof运算 nsizeof是一个单目右结合运算符,运算结果是一个无符号的整型。格式:sizeof(操作对象操作对象)n操作对象可以是类型名、常量、变量或确定操作对象可以是类型名、常量、变量或确定类型的表达式类型的表达式n举例举例n操作对象为类型名,如:操作对象为类型名,如:sizeof(int)n操作对象为常量,如:操作对象为常量,如: sizeof(5) n操作对象为常量,如:操作对象为常量,如: sizeof(5.9) n操作对象为表达式,如:操作对象为表达式,如: sizeof(x+1)3.6 其它运算其它运

11、算 3.6.2 逗号运算逗号运算 n用逗号连接的表达式称为逗号表达式。用逗号连接的表达式称为逗号表达式。n逗号表达式的形式为:逗号表达式的形式为:表达式表达式1,表达式,表达式2,表达式,表达式3,表达式,表达式nn注意注意n逗号表达式的求解过程为:依次计算表达式逗号表达式的求解过程为:依次计算表达式1的值,表的值,表达式达式2的值,的值,表达式,表达式n的值。表达式的值。表达式n的值为逗号表的值为逗号表达式的值。达式的值。n逗号运算符的优先级是所有运算符中最低的,其结合性逗号运算符的优先级是所有运算符中最低的,其结合性是自左向右。是自左向右。n例如:例如:int x;x=3*5,12+15,

12、100/5; 3.6 其它运算其它运算 3.6.3 条件运算条件运算 n条件表达式的一般形式为:条件表达式的一般形式为:表达式表达式1 ? 表达式表达式2 : 表达式表达式3n先计算表达式先计算表达式1,如果表达式,如果表达式1的值非的值非0,则执行表达式,则执行表达式2,表达式,表达式2的值作为整的值作为整个条件表达式的值;如果表达式个条件表达式的值;如果表达式1为为0,则执行表达式则执行表达式3,表达式,表达式3的值作为整个的值作为整个条件表达式的值。条件表达式的值。 n【例例3.26】输入三个整数,输出其中最输入三个整数,输出其中最大的一个大的一个#include void main(

13、)int x,y,z,t;scanf(%d%d%d,&x,&y,&z);t = xy ? x : y;t = tz ? t : z;printf(%dn,t);3.7 赋值运算赋值运算 3.7.1 赋值运算符和赋值表达式赋值运算符和赋值表达式 n一般形式为:一般形式为:变量变量 = 表达式表达式 n说明n赋值运算符的优先级仅高于仅高于逗号运算符,赋值表达式的求解过程为:先计算赋值运算符右边的表达式的值,再将计算的值赋给运算符左边的变量。n赋值运算符具有计算和赋值计算和赋值的双重功能。3.7 赋值运算赋值运算 3.7.2 复合赋值运算复合赋值运算 n在赋值运算符之前加上其

14、它运算符可以构成复合在赋值运算符之前加上其它运算符可以构成复合赋值运算符赋值运算符 n一般形式如下:+=a+ =b等价于a=a+b-=a-=b等价于a=a-b*= a*=b等价于a=a*b/=a/=b等价于a=a/b%=a%=b 等价于a=a%b=a=b等价于a=a=a=b等价于a=ab&=a&=b等价于a=a&b=a=b等价于a=ab|=a|=b等价于a=a|b本章习题:1. 已知有定义:char ch;则下面赋值正确的有哪些:ch=X 对ch=55错ch=M 错ch=55错ch=55对本章习题:1. 已知有定义:char ch;则下面赋值正确的有哪些:ch=X 对ch=55错ch=M 错ch=55错ch=55对8. 给出下面程序的运行结果给出下面程序的运行结果(1)int x=0 x100100;char *p=(char *)&x;*p=A;等价于等价于*p=0 x41p=p+2;*p=50;等价于等价于*p=0 x32printf(%xn,x);00410110 3200低字节低字节高字节高字节pa 即61pb 即62c 即63d 即64低字节低字节高字节高字节e 即65f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论