




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 C语言的语法基础,2.3 运算符与表达式,运算符与表达式,算术运算 关系、逻辑和条件运算 位运算 赋值运算 类型转换 逗号运算 长度运算,算术运算符,5种算术运算符号 :加法5+6;正号+12; :减法4.6-3.2;负号-3.1 *:乘法10*3 /:除法8/2 %:求余35%6 算术表达式 由算术运算符把运算对象连接起来,构成合法的式子,运算对象包括:常量、变量和函数。算术表达式的值为整数或实数,算术运算符的优先顺序 优先级从高到低分别为 ( ) 圆括号 +、- 正负号,+、- 增1、减1 *、/、% 乘、除、求余 +、- 加、减 说明 关于“%”运算:参加运算的对象必须为整数,计算结果为两数相除所得的余数,大部分情况下,余数的符号与左侧的运算对象的符号相同,如35%6=5, -35%6=-5。 关于“/”运算: 整数除:两个整数相除后值等于商的整数部分,如1/20 实数除:两个相除的数中至少有一个是实数,相除后值等于商本身,如1.0/2=0.5。,不同类型混合运算:整型、字符型和实型数据可以混合运算,在运算的时候需要进行类型转换。 必须转换:floatdouble;char,shortint 不同类型数据混合运算的转换规则,关于增1、减1运算:+,- 运算对象必须为变量,如3+是错误的。 既可作为前缀运算符也可以作为后缀运算符,以+为例: 区别: i=1;j=+i;1i,i+1i(i=2),ij(j=2) i=1;j=i+;1i,ij(j=1), i+1i(i=2) 相同: 只进行自增、自减运算,没有使用运算对象的值,如i+;和+i;是一样的。 +,-,+,-(正负号)的优先级别一样,结合方向都是从右到左, 如:i=1;j=-i+;1i,j=-i(j=-1),i+1i,(i=2),即:j=-(i+);而不是j=(-i)+; 避免在一个表达式中多次使用+和-运算符,else printf(“%dn%dn%dn“,a,a-,a);,验证,以下程序运行时,若从键盘输入5,则输出结果是()。(等级考试) main() int a; scanf(“%d“, (a)7 (b) 4 (c) 5 (d) 6,分析:a=5 y=a+;y=5,a=6 执行else语句 令z= a- z=6,a=5,main() int a; scanf(“%d“, ,验证,答案5,6,6,关系、逻辑、条件运算符,关系运算 两个数据进行比较,判定两个数据是否符合给定的关系 六种关系运算符:、=、b,a+bc-d,(a=3)=b,(ab)= =(bc),关系表达式的值逻辑值(“真”与“假”) 语言没有逻辑型数据,所以用非零值表示“逻辑真”,用整数“”表示“逻辑假”。 关系表达式的值只能为1或0,1为真,0为假。 例如,假设num1=3,num2=4,num3=5,求: num1num2(0) (num1num2)!=num3(1) num1num2num3(1) (num1num2)+num3(6) 数学表达式的3a5,在C语言中如何表示? 逻辑运算 &(逻辑与)相当于“同时” |(逻辑或)相当于“或者” !(逻辑非)相当于“否定”,运算规则: &:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”;(1&1=1,其他0) |:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”;(0|0=0,其他1) !:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”;(!10,!01) 例,x=5,则(x=0) & (x5)的值为“假”。 优先级: 从高到低:! &| 从高到低:! 算术运算 关系运算 & | 赋值运算 逻辑表达式 逻辑表达式的概念 用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子,逻辑表达式的值:和关系表达式一样,逻辑表达式的值也只有1或0两种,1代表真,0代表假。 逻辑表达式的“不完全计算”: 如:a=0; b=1; c=a+ 第3个式子,先计算表达式a+的值为0,然后a加1,逻辑表达式变为0&b+,因为此表达式的值必为0,所以系统不再计算b+,b仍旧为1,a由于自增,也为1。 第4个式子,同样先计算表达式a+的值为1,然后a加1,逻辑表达式变为1|b+,由于表达式的值必为1,所以系统不再计算b+,b仍旧为1,a由于自增,也为2。,条件运算 运算符:? : 一般形式:判定式?表达式1:表达式2 运算规则:先求判定式的值,若非零,则将表达式1的值作为条件表达式的值;若为0,则将表达式2的值作为条件表达式的值。 结合方向:从右到左 a=1;b=2; c=a4?5:6; 上面的条件表达式等价于:c=a4?5:6); 当表达式1和表达式2的类型不同时,以较高的类型作为条件表达式的类型。 float a,b; a=(1?1:5)/2; /*1?1:5的值为1,1/2为整数除,a的值为0.0*/ b=(1?1:5.0)/2;/*1?1:5的值为1.0,1.0/2为实数除,b的值为0.5*/,位运算,六种位运算符:、求i的值。 整数二进制数199的二进制数为:0000 0000 1100 0111 按位取反得:1111 1111 0011 1000 对应的是整型十进制数200在内存中的补码表达式。 关系式:i+i=-1,左移运算: 格式:运算对象位数 功能:向右端(低位)移动若干位数,移出的部分舍弃,正整数或无符号整数左端(高位)补0,负数补1; 例:char a=41,b;求b=a3的值 十进制数41对应的二进制数为:0010 1001 右移3位后得到:0000 0101 b的值为5,按位与运算:& 格式:运算对象&运算对象 功能:运算对象按位对齐后,相应的位进行与运算 例:求int a=41&165的值 十进制数41对应的二进制数: 0000 0000 0010 1001 十进制数165对应的二进制数: & 0000 0000 1010 0101 结果为十进制数33: 0000 0000 0010 0001 按位异或运算: 格式:运算对象运算对象 功能:运算对象按位对齐后,相应的位进行异或运算(不同为1,相同为0) 例:求int a=41165的值 十进制数41对应的二进制数: 0000 0000 0010 1001 十进制数165对应的二进制数: 0000 0000 1010 0101 结果为十进制数140: 0000 0000 1000 1100,按位或运算:| 格式:运算对象|运算对象 功能:运算对象按位对齐后,相应的位进行或运算 例:求int a=41|165的值 十进制数41对应的二进制数: 0000 0000 0010 1001 十进制数165对应的二进制数: | 0000 0000 1010 0101 结果为十进制数173: 0000 0000 1010 1101 不同数据类型之间的位运算 long: 0000 0000 0000 0000 0000 0000 0000 0000 int : 0000 0000 0000 0000 char: 0000 0000 右端对齐,正数和无符号左补0,负数左补1。 位运算符的优先关系 从高到低依次为:&|,赋值运算,赋值运算符及其表达式 一般形式:变量名=表达式 功能:先计算右边“表达式”的值,然后把这个值赋值给左边的变量 赋值表达式也有值,其值等于右边表达式的值 赋值运算符的结合方向是从右到左 如:i=j=3+5; 先计算3+5的值,然后赋值给j,最后把赋值表达式j=3+5的值赋值给i,所以j=8,i=8。相当于用连等的方式给多个变量赋同一个值。 优先级:仅高于逗号运算符,复合赋值运算 10种复合赋值运算符: *=、/=、%=、+=、-=(算术运算符+赋值运算符) =、 先计算i+6,得11,i仍为5 计算i*=11,即i=i*11,得55,i变为55 计算i+=55,即i=i+55,得110,i变为110,赋值运算中得类型转换规则 在赋值表达式中,如果右边的表达式和左边的变量的数据类型不一致但都是数值时,系统自动将右边的数据类型转换成左边变量的数据类型再赋值。 转换规则: 实数整数:舍弃小数部分 整数实数:数值不变,以浮点形式存储,补足精度 整型、字符型不同类型的整型、字符型 字节数相同:原样赋值 变量的字节数少:截取低位 变量的字节数多:高位补足 补0:有一个为无符号类型的,高位补0 符号扩展:两者都是有符号的数据类型,正数补0,负数补1,类型转换,格式:(类型名)(表达式) 功能:将一个表达式的值转换为所需的数据类型 1/2的值为0,(double)1/2的值为0.5 类型转换并不改变变量的数据类型 如:float i=5.6;int j; j=(int)i%2; 运行结果:i=5.6,j=1;,逗号运算,一般形式 表达式1,表达式2,表达式n 功能:从左到右计算每一个表达式的值,将最右边表达式的值作为整个逗号表达式的值。 main() int i,j,k; i=1; k=(j=+i,i+=j,i+=5); printf(“%d,%d,%dn”,i,j,k); ,运行结果: 9,2,9,长度运算符,运算符号:sizeof() 功能:计算变量或类型所占内存字节数的大小 sizeof(数据类型):如sizeof(int),sizeof(long) sizeof(变量名):如double f; sizeof(f); 例:#include main() char ch; printf(“double=%dtc=%dn“,sizeof 10.0,sizeof (c); printf(“char=%dtfloat=%dn“,sizeof ch,sizeof (float); getch();,以下是等级考试中填空题,下列语句中,符合C语言语法的赋值语句是()。 a=7+b+c=a+7; a=7+b+=a+7; a=7+b,b+,a+7; a=7=b,c=a+7; 已知double a =5 .2 ; 则正确的赋值表达式是()。 a += a -= (a=4)*(a=3) a = a*3 =2 a % 3 a = double(-3),已知char a = R;则正确的赋值表达式是()。 a = (a+)%4 a + 2 = 3 a += 256 - a = 078 已知int a =R ; 则正确的表达式是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论