运算与表达式.ppt

上传人:本田雅阁 文档编号:2709669 上传时间:2019-05-07 格式:PPT 页数:37 大小:389.01KB
返回 下载 相关 举报
运算与表达式.ppt_第1页
第1页 / 共37页
运算与表达式.ppt_第2页
第2页 / 共37页
运算与表达式.ppt_第3页
第3页 / 共37页
运算与表达式.ppt_第4页
第4页 / 共37页
运算与表达式.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

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

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

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

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

4、相同类型的数据(除short、char、float)直接可以运算,不需要类型转换。 两个不同类型的数据运算时,系统会自动地将低类型操作数转换为另一个高类型操作数的类型,然后再进行运算。 short、char=int-unsigned int-long-unsigned long-float=double-long double 强制类型转换 (类型名)(表达式) 例如:(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=7;float x=2.1,y=4.

5、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 赋值运算符和赋值表达式 一般形式为: 变量 = 表达式 说明 赋值运算符

6、的优先级仅高于逗号运算符,赋值表达式的求解过程为:先计算赋值运算符右边的表达式的值,再将计算的值赋给运算符左边的变量。 赋值运算符具有计算和赋值的双重功能。,赋值运算,复合赋值运算 在赋值运算符之前加上其它运算符可以构成复合赋值运算符 一般形式如下: += 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,“, ,应用举例,【例2】输入一个字符,求它的前驱和后继字符。并输出这三个字符及其对应的ASCII码。一个字符的前驱字符是比该字符ASCII码值小1的字符。一个字符的后继字符是比该字符ASCII码值大1的字符。 #include void main() char ch, prech, nextch; /* 输入部分 */ printf(“Enter a char: “);

8、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自增、自减运算 自增运算符“+” 表达式形式: 运算符 操作对象 操作对象 运算符 自减运算符“-” 表达式形式: 运算符 操作对象 操作对象 运算符 注意 自增对象必须是整型变量 尽量避免在一个表达式中出现对同一个变量的多次自增、自减运算,3.1.4自增、自减运算 【例3.8】给出下面程序的输出结果

9、 #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,1,2 a=2,c=10 a=2,c=15,3.1 算术运算,3.2关系运算,关系运算 = = 双目等于运算符、左结合 != 双目不等于运算符、左结合 双目大于运算符、左结合 = 双

10、目大于等于运算符、左结合 、=、= 高于 =、!=,关系运算符被用于对左右两侧的值进行比较。如果比较运算的结果成立,即条件满足则表达式值为1,不满足则表达式值为0,关系运算不改变操作对象的值。,【例3.9】关系运算 #include 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】编写程序,从键盘输入整数

11、,判定它是否为大于100的数。 #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语句 if (表达式) 语句,【例4.4】输出3个整数中的最小数。 #include int main() int a,b,c,max; printf(“输入3个整数:n“); scanf(“%d,%d,%d“, ,选择结构应用举例,【例

12、4.5】输入两个整数,从小到大排序输出。 #include void main() int a,b,t; /* 输入部分 */ printf(“Enter two integer: “); scanf(“%d,%d,“, ,if语句 if (表达式) 语句,选择结构应用举例,3.3 逻辑运算,三种逻辑运算符 ! 单目逻辑非运算符、右结合 & 双目逻辑与运算符、左结合 | 双目逻辑或运算符、左结合 表达式形式: ! 操作对象 操作对象1 & 操作对象2 操作对象1 | 操作对象2 逻辑运算符的优先级 ! 高于算术运算符 & 低于关系运算符 | 低于&运算符,逻辑运算符被用于对左右两侧操作对象的值

13、进行逻辑运算,对于逻辑运算符,它左右两侧的操作对象只有0和非0的区别,运算结果表达式的值为0或1,逻辑运算不改变操作对象的值。,3.3 逻辑运算,【例3.10】逻辑运算 #include void main( ) int x=2,y=3,z=4; printf(“%d,“,x=1 程序运行结果: 0,1,0,1,0,3.3 逻辑运算,注意: (1)&运算:操作对象1&操作对象2,当操作对象1为0时,&运算的结果为0,操作对象2如果是一个表达式,将被忽略,不会再被运算;仅当操作对象1为非0时,才需计算操作对象2。 (2)|运算:操作对象1 | 操作对象2,当操作对象1为非0时,|运算的结果为1,

14、操作对象2如果是一个表达式,将被忽略,不会再被运算;仅当操作对象1为0时,才需计算操作对象2。,3.3 逻辑运算,【例3.11】输入一个年份,编写程序判断如果是闰年输出1,否则输出0。 闰年的条件是:年份能够被4整除,但不能被100整除。或者年份能够被400整除。 #include void main( ) int year; Printf(“请输入一个年份:“); scanf(“%d“, ,3.3 逻辑运算,3.4 位运算,3.4.1 按位逻辑运算 位逻辑符 & 双目按位与运算符、左结合 | 双目按位或运算符、左结合 双目按位异或运算符、左结合 单目按位取反运算符、右结合 表达式形式: 操作

15、对象1 & 操作对象2 操作对象1 | 操作对象2 操作对象1 操作对象2 操作对象 举例 char x=5,y=12 x & y =? x | y =? x y = ? x = ?,【例3.12】用程序求5&12的值:,00000101 (5) (&) 00001100 (12) 00000100 (4),00000101 (5) (|) 00001100 (12) 00001101 (13),00000101 (5) ()00001100 (12) 00001001 (9),() 00000101 (5) 11111010 (-6),#include void main( ) char x

16、=5,y=12; printf(“%dn“,x ,3.4 位运算,3.4.2 移位运算 移位运算 双目右移位运算符、左结合 表达式形式: 操作对象1 移位运算符 操作对象2,左移位 运算符将操作对象1的二进制形式根据操作对象2的值左移若干位,操作对象1右侧补0,左侧移出部分舍弃。 右移位 运算符将操作对象1的二进制形式根据操作对象2的值右移若干位,操作对象1左侧补0,右侧移出部分舍弃。,3.4 位运算,3.4.2 移位运算 举例 char x=5,y=12 x2 = ? x x = ?,(x2) 00000101 (5) 00000001 (1),(x2) 00000101 (5) 00010

17、100 (20),赋值运算,复合赋值运算 在赋值运算符之前加上其它运算符可以构成复合赋值运算符 一般形式如下: += 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=ab &= a&=b 等价于a=a&b = a=b 等价于a=ab |= a|=b 等价于a=a|b,3.4 位运算,3.4.3 程序例子 输入一个整数,把该数的二进制第5位清0。 输入一个整数,判断该数的二进制第5位是否为1,是输出1,否则输出0。,3.5 指针运算,3.5.1 取地址运算

18、通过求地址运算符( char *p=”ABCDEFG”; 通过标准函数获得地址值 “空”地址,3.5 指针运算,3.5.2 操作指针变量 存取单元的数据两种方法 “直接存取” “间接存取” 指针变量的使用注意事项 先赋值后使用 “ &*p的含义 *&a的含义 *q的含义,3.5 指针运算,3.5.3 移动指针 形式如下: 指针 + 整型表达式 指针 整型表达式 【例3.22】指针变量使用举例。 #include void main( ) int a, *p= ,3.5 指针运算,3.5.3 比较指针 形式如下: 类型相同的两个指针变量之间可以进行大于、大于等于、小于、小于等于、等于、不等于(、

19、=、=、=、!=)的比较运算。此外,任何,指针变量都可以和0或空指针进行等于或不等于的关系运算 两个同类型指针之间也可以进行减法运算,减法运算的结果是两个指针之间相差的内存单元个数,即两者相差内存地址值除以指针指向数据类型所占内存的大小,3.6 其它运算,3.6.1 sizeof运算 sizeof是一个单目右结合运算符,运算结果是一个无符号的整型。sizeof表达式形式如下: sizeof(操作对象) 求指定数据类型存储的字节数 #include main() int x; x=sizeof(char); x=sizeof(x); ,3.6 其它运算,3.6.2 逗号运算 用逗号连接的表达式称

20、为逗号表达式。逗号表达式的形式为: 表达式1,表达式2,表达式3,表达式n 注意 逗号表达式的求解过程为,依次计算表达式1的值,表达式2的值,表达式n的值。表达式n的值为逗号表达式的值. 逗号运算符的优先级是所有运算符中最低的,其结合性是自左向右。 例如: int x; x=(3*5,12),100;,3.6 其它运算,3.6.3 条件运算 条件表达式的一般形式为: 表达式1?表达式2:表达式3 先计算表达式1,如果表达式1的值非0,则执行表达式2,表达式2的值作为整个条件表示的值;如果表达式1为0,则执行表达式3,表达式3的值作为整个条件表示的值。 【例3.26】输入三个整数,输出其中最大的一个。 #include void main( ) int x,y,z,t; scanf(“%d%d%d“, ,第2次上机内容和作业,一、上机题 实验指导 P145, 14.1,14.2,15.1,15.2.1,15.2.2 注意:15.1.3,15.1.5用到以下头文件和函数 #include 求平方根函数sqrt,例如求a的平方根为sqrt(a)。 二、作业 教材习题2.5,3.8有关题目 实验指导13章有关题目,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1