运算与表达式

上传人:woxinch****an2018 文档编号:45522817 上传时间:2018-06-17 格式:PPT 页数:37 大小:389KB
返回 下载 相关 举报
运算与表达式_第1页
第1页 / 共37页
运算与表达式_第2页
第2页 / 共37页
运算与表达式_第3页
第3页 / 共37页
运算与表达式_第4页
第4页 / 共37页
运算与表达式_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《运算与表达式》由会员分享,可在线阅读,更多相关《运算与表达式(37页珍藏版)》请在金锄头文库上搜索。

1、第3章运算与表达式 3.1 算术运算 l3.1.1基本算术运算符 l单目基本算术运算符 +正值运算符 -负值运算符 l双目基本算术运算符 +加法运算符 -减法运算符 *乘法运算符 / 除法运算符 %模(求余)运算符 3.1 算术运算 l3.1.1基本算术运算符 l注意:l如果两个操作对象是不同的类型。系统先把它们转成相 同类型(这个转换并不会改变操作对象的值),然后再进行 运算,运算结果值的类型也是转换后的类型。l除法运算的两个操作对象如果是整型,则结果是去掉小 数部分后的整型,如19/10的表达式值是1,如果操作对象是 整型且符号不同,则不同编译器出来方法可能不同,大部分 是按照绝对值进行计

2、算,结果去除小数部分后再加上负号。l求余运算如果操作对象有负数,则先按照两操作对象的 绝对值进行计算,然后表达式的值,即余数的值按照操作对 象1的符号确定,如-13%7、-13%-7两个表达式值都是-6, 13%-7、13%7表达式值都是6。3.1 算术运算 3.1.2 优先级与结合性 l复合表达式 由运算符、操作对象构成的有值的式子被称为 表达式 。 操作对象本身也可以是一个表达式 。 含有两个或更多操作符的表达式称为复合表达 式 。例如:a+b/3*c-15%3 l复合表达式按运算符的优先级别高低次序计算 基本算术运算符的优先级为 一级:单目运算:+、- 二级:双目运算:*、/、% 三级:

3、双目运算:+、-3.1.2 优先级与结合性l优先级相同按由运算符的结合性确定计算次序l右结合 一个运算对象左右两边的运算符如果优先级 相同时就先算右边的或有两个同级别的运算符就先算右 边的一个。 例如:单目运算符。l左结合 一个运算对象在左右两边的运算符如果优先 级相同时就先算左边的或有两个同级别的运算符就先算 左边的一个。 例如:双目运算符。 例如:10*2/5l使用括号 (2+10)*-2/5+(5+3)%4)*2 3.1 算术运算3.1.3 数据类型转换 l数据类型转换当表达式中出现不同类型数据的混合运算时,往往需 要先进行数据类型的转换后才能运算,这种转换并不会改变 原来变量的值和数据

4、类型。 l隐式类型转换l两个相同类型的数据(除short、char、float)直接可以 运算,不需要类型转换。l两个不同类型的数据运算时,系统会自动地将低类型操 作数转换为另一个高类型操作数的类型,然后再进行运算。lshort、char=int-unsigned int-long-unsigned long- float=double-long doublel强制类型转换l(类型名)(表达式) 例如:(double)x 例1,设int a=7;float x=2.1,y=4.4;求表达式 x+a%3*(int)(x+y)%2/4的值。 #include void main( ) int a=

5、7;float x=2.1,y=4.4; printf(“%dn“,a%3); printf(“%dn“,(int)(x+y); printf(“%dn“,a%3*(int)(x+y); printf(“%dn“,a%3*(int)(x+y)%2); printf(“%dn“,a%3*(int)(x+y)%2/4); printf(“%fn“,x+a%3*(int)(x+y)%2/4); 例2,设int a=2,b=3;float x=4.1,y=2.4;求表达式 (float)(a+b)/2+(int)x%(int )y的值。3.7 赋值运算 3.7.1 赋值运算符和赋值表达式 l一般形式为

6、:l变量 = 表达式 l说明l赋值运算符的优先级仅高于逗号运算符,赋值表 达式的求解过程为:先计算赋值运算符右边的表达 式的值,再将计算的值赋给运算符左边的变量。l赋值运算符具有计算和赋值的双重功能。赋值运算 复合赋值运算 l在赋值运算符之前加上其它运算符可以构成复合赋值 运算符 l一般形式如下: +=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 例如,已知x=3,y=2,求表达式x*=y+8的值。 又如,已知m=2,y=2,求表达式y+=y-=m*=y的 值。【例1】编写程序,实现从键盘

7、上输入学生的三门课成绩 ,计算并输出其总成绩和平均成绩。 #include void main() float a,b,c,sum,ave; /* 输入部分 */ printf(“Enter three float: “); scanf(“%f,%f,%f,“, /* 计算与输出部分 */ sum=a+b+c; ave=sum/3; printf(“sum=%6.2fnave=%6.2fn“,sum,ave); 应用举例 【例2】输入一个字符,求它的前驱和后继字符。并输出这三个字符 及其对应的ASCII码。一个字符的前驱字符是比该字符ASCII码值 小1的字符。一个字符的后继字符是比该字符AS

8、CII码值大1的字 符。 #include void main() char ch, prech, nextch; /* 输入部分 */ printf(“Enter a char: “); ch=getchar(); /* 计算与输出部分 */ prech= ch-1; nextch= ch+1; printf(“%c %c %cn“,ch,prech,nextch); printf(“%d %d %dn“,ch,prech,nextch); 应用举例 3.1 算术运算 3.1.4自增、自减运算 l自增运算符“+”l表达式形式:l运算符 操作对象l操作对象 运算符l自减运算符“-” l表达式形

9、式:l运算符 操作对象l操作对象 运算符l注意l自增对象必须是整型变量 l尽量避免在一个表达式中出现对同一个变量的多次自增 、自减运算3.1.4自增、自减运算 【例3.8】给出下面程序的输出结果 #include void main( ) int a=1,b=1,c; printf(“%d,“,+a); printf(“%d,“,a); printf(“%d,“,b+); printf(“%dn“,b); a=3;b=5;c=(-a)*b;printf(“a=%d,c=%dn“,a,c);a=3;b=5;c=(a-)*b;printf(“a=%d,c=%dn“,a,c); 输出结果: 2,2,

10、1,2 a=2,c=10 a=2,c=153.1 算术运算 3.2关系运算 l关系运算 l= =双目等于运算符、左结合l!=双目不等于运算符、左结合l双目大于运算符、左结合l=双目大于等于运算符、左结合l、=、 void main( ) int x=1,y=4,z=14; printf(“%d,“,x=x-y); printf(“%d,“,x+y!=z); printf(“%dn“,z3*y+10); printf(“%d,“,xyx); 程序运行结果: 1,0,1,1,0 1,0选择结构应用举例 if语句 if (表达式) 语句【例4.3】编写程序,从键盘输入整数,判定它是 否为大于100的

11、数。 #include void main() int a;/* 输入部分 */printf(“The program gets a number, “);printf(“and shows if it is larger than 100.n“);printf(“The number: “);scanf(“%d“, /* 计算与输出部分 */if(a100)printf(“The number %d is larger than 100.n“, a); if语句 if (表达式) 语句【例4.4】输出3个整数中的最小数 。 #include int main() int a,b,c,max;

12、 printf(“输入3个整数:n“); scanf(“%d,%d,%d“, min=a; if(b void main() int a,b,t; /* 输入部分 */ printf(“Enter two integer: “); scanf(“%d,%d,“, /* 计算与输出部分 */ if(ab) t=a; a=b; b=t; printf(“%d,%dn“,a,b); if语句 if (表达式) 语句选择结构应用举例 3.3 逻辑运算l三种逻辑运算符l! 单目逻辑非运算符、右结合l printf(“%d,“,x void main( ) int year; Printf(“请输入一个年

13、份:“); scanf(“%d“, printf(“%dn“,(year%4=0 3.3 逻辑运算3.4 位运算 3.4.1 按位逻辑运算l位逻辑符 l printf(“%dn“,x 3.4 位运算 l3.4.2 移位运算l移位运算 双目右移位运算符、左结合l表达式形式:l操作对象1 移位运算符 操作对象2左移位 运算符将操作对象1的二进制形式根据操作对象2的值左移 若干位,操作对象1右侧补0,左侧移出部分舍弃。 右移位 运算符将操作对象1的二进制形式根据操作对象2的值右移 若干位,操作对象1左侧补0,右侧移出部分舍弃。3.4 位运算 l3.4.2 移位运算l举例 char x=5,y=12

14、x2 = ? x x = ?(x2) 00000101 (5)00000001 (1)(x=a=b等价于a=ablp=a; l通过指针变量或地址常量获得地址值lint a=3,*p=lchar *p=”ABCDEFG”; l通过标准函数获得地址值 l“空”地址 3.5 指针运算 3.5.2 操作指针变量 l存取单元的数据两种方法l“直接存取”l“间接存取”l指针变量的使用注意事项 l先赋值后使用 l“lp = lq= llchar c, *pc=lprintf(“%d,%dn“,p,p+1);lprintf(“%d,%dn“,p,p-2);lprintf(“%d,%dn“,pc,pc+1);l

15、printf(“%d,%dn“,pc,pc-2);l3.5 指针运算 3.5.3 比较指针 l形式如下:l类型相同的两个指针变量之间可以进行大于、大 于等于、小于、小于等于、等于、不等于(、= 、 main() int x; x=sizeof(char); x=sizeof(x); 3.6 其它运算 3.6.2 逗号运算 l用逗号连接的表达式称为逗号表达式。逗号表达式的 形式为:l表达式1,表达式2,表达式3,表达式nl注意l逗号表达式的求解过程为,依次计算表达式1的值,表达 式2的值,表达式n的值。表达式n的值为逗号表达式的 值.l逗号运算符的优先级是所有运算符中最低的,其结合性 是自左向右

16、。l例如:lint x;lx=(3*5,12),100; 3.6 其它运算 3.6.3 条件运算 l条件表达式的一般形式为:l表达式1?表达式2:表达式3l先计算表达式1,如果表达式1的值非0,则执行表达式2,表达式2 的值作为整个条件表示的值;如果表达式1为0,则执行表达式3, 表达式3的值作为整个条件表示的值。 l【例3.26】输入三个整数,输出其中最大的一个。l#include lvoid main( )llint x,y,z,t;lscanf(“%d%d%d“,lt=xy?x:y;lt=tz?t:z;lprintf(“%dn“,t);l第2次上机内容和作业一、上机题 实验指导 P145, 14.1,14.2,15.1,15.2

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号