运算与表达式

上传人:桔**** 文档编号:584805149 上传时间:2024-09-01 格式:PPT 页数:37 大小:389.02KB
返回 下载 相关 举报
运算与表达式_第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注意:1.如果两个操作对象是不同的类型。系统先把它们转成相同类型(这个转换并不会改变操作对象的值),然后再进行运算,运算结果值的类型也是转换后的类型。2.除法运算的两个操作对象如果是整型,则结果是去掉小数部分后的整型,如19/10的表达式值是1,如果操作对象是整型且符号不同,则不同编译器出来方法可能不同,大部分是按照绝对

2、值进行计算,结果去除小数部分后再加上负号。3.求余运算如果操作对象有负数,则先按照两操作对象的绝对值进行计算,然后表达式的值,即余数的值按照操作对象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的值。#i

5、nclude void main( )int a=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 赋值运算符和赋值表

6、达式赋值运算符和赋值表达式 l一般形式为:一般形式为: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,求

7、表达式x*=y+8的值。又如,已知m=2,y=2,求表达式y+=y-=m*=y的值。【例1】编写程序,实现从键盘上输入学生的三门课成绩,计算并输出其总成绩和平均成绩。#include void main()float a,b,c,sum,ave; /* 输入部分 */printf(Enter three float: );scanf(%f,%f,%f, &a, &b, &c);/* 计算与输出部分 */sum=a+b+c;ave=sum/3;printf(sum=%6.2fnave=%6.2fn,sum,ave); 应用举例应用举例 【例2】输入一个字符,求它的前驱和后继字符。并输出这三个字符

8、及其对应的ASCII码。一个字符的前驱字符是比该字符ASCII码值小1的字符。一个字符的后继字符是比该字符ASCII码值大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自增、自减运算自增、自

9、减运算 l自增运算符“+”l表达式形式:l运算符运算符 操作对象操作对象l操作对象操作对象 运算符运算符l自减运算符“-” l表达式形式: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; prin

10、tf(a=%d,c=%dn,a,c); a=3;b=5; c=(a-)*b; printf(a=%d,c=%dn,a,c);输出结果:2,2,1,2a=2,c=10a=2,c=153.1 算术运算算术运算 3.2关系运算关系运算 l关系运算 l= =双目等于运算符、左结合l!=双目不等于运算符、左结合l双目大于运算符、左结合l=双目大于等于运算符、左结合l双目小于运算符、左结合l、=、= 高于 =、!=关系运算符被用于对左右两侧的值进行比较。如果比较关系运算符被用于对左右两侧的值进行比较。如果比较运算的结果成立,即条件满足则表达式值为运算的结果成立,即条件满足则表达式值为1,不满足,不满足则表

11、达式值为则表达式值为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,xyyx);程序运行结果:1,0,1,1,01,0选择结构应用举例选择结构应用举例 if语句语句 if (表达式) 语句【例4.3】编写程序,从键盘输入整数,判定它是否为大于100的数。#include void main() int a; /* 输入部分 */ printf(The pro

12、gram gets a number, ); printf(and shows if it is larger than 100.n); printf(The number: ); scanf(%d, &a); /* 计算与输出部分 */ 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;printf(输入3个整数:n);scanf(%d,%d,%d,&a,&b,&c);min=a;if(bmin)

13、 min=b;if(cminc) min=c;printf(min=%dn,min);选择结构应用举例选择结构应用举例 【例4.5】输入两个整数,从小到大排序输出。#include void main()int a,b,t; /* 输入部分 */printf(Enter two integer: );scanf(%d,%d, &a, &b);/* 计算与输出部分 */if(ab)t=a;a=b;b=t;printf(%d,%dn,a,b);if语句语句 if (表达式) 语句选择结构应用举例选择结构应用举例 3.3 逻辑运算逻辑运算l三种逻辑运算符l! 单目逻辑非非运算符、右结合l& 双目逻辑

14、与与运算符、左结合l| 双目逻辑或或运算符、左结合l表达式形式:l! 操作对象 l操作对象1 & 操作对象2l操作对象1 | 操作对象2l逻辑运算符的优先级l!高于算术运算符l&低于关系运算符l| 低于&运算符逻辑运算的“真值表” ab! aa&ba|b非0非0011非000010非010100100逻辑运算符被用于对左右两侧操作对象的值进行逻辑运算,对于逻辑运算符,它左右两侧的操作对象只有0和非0的区别,运算结果表达式的值为0或1,逻辑运算不改变操作对象的值。 3.3 逻辑运算逻辑运算【例3.10】逻辑运算#include void main( )int x=2,y=3,z=4;printf

15、(%d,x=1 & y=3);printf(%d,x=1 | y=3);printf(%d,!(x=2);printf(%d,!(x=1 & y=3);printf(%dn,x2 | y=3 & z4);程序运行结果:0,1,0,1,03.3 逻辑运算逻辑运算l注意:(1)&运算:操作对象1&操作对象2,当操作对象1为0时,&运算的结果为0,操作对象2如果是一个表达式,将被忽略,不会再被运算;仅当操作对象1为非0时,才需计算操作对象2。(2)|运算:操作对象1 | 操作对象2,当操作对象1为非0时,|运算的结果为1,操作对象2如果是一个表达式,将被忽略,不会再被运算;仅当操作对象1为0时,才需

16、计算操作对象2。 3.3 逻辑运算逻辑运算 【例3.11】输入一个年份,编写程序判断如果是闰年输出1,否则输出0。 闰年的条件是:年份能够被4整除,但不能被100整除。或者年份能够被400整除。#include void main( )int year;Printf(请输入一个年份:);scanf(%d,&year);printf(%dn,(year%4=0 & year%100!=0)|(year%400=0);3.3 逻辑运算逻辑运算3.4 位运算位运算 3.4.1 按位逻辑运算l位逻辑符位逻辑符 l&双目按位与按位与运算符、左结合l| 双目按位或按位或运算符、左结合l 双目按位异或按位异

17、或运算符、左结合l 单目按位取反按位取反运算符、右结合l表达式形式:l操作对象1 & 操作对象2 l操作对象1 | 操作对象2l操作对象1 操作对象2l操作对象l举例lchar x=5,y=12lx & y =?lx | y =?lx y = ?l 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 (-

18、6)#include void main( )char x=5,y=12;printf(%dn,x & y);3.4 位运算位运算 l3.4.2 移位运算移位运算l移位运算移位运算 双目右移位运算符、左结合l表达式形式:l操作对象操作对象1 移位运算符移位运算符 操作对象操作对象2左移位左移位运算符将操作对象1的二进制形式根据操作对象2的值左移若干位,操作对象1右侧补右侧补0,左侧移出部分舍弃,左侧移出部分舍弃。右移位右移位运算符将操作对象1的二进制形式根据操作对象2的值右移若干位,操作对象操作对象1左侧补左侧补0,右侧移出部分舍弃。,右侧移出部分舍弃。3.4 位运算位运算 l3.4.2 移位

19、运算移位运算l举例char x=5,y=12x2 = ?x2 = ?y x = ?(x2) 00000101 (5) 00000001 (1)(x2) 00000101 (5) 00010100(20)赋值运算赋值运算 复合赋值运算复合赋值运算 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=a=b等价于等价于a=a=a=b等价于等价于a=ab&=a&=b等价于等价于a=a

20、&b=a=b等价于等价于a=ab|=a|=b等价于等价于a=a|b3.4 位运算位运算 l3.4.3 程序例子程序例子 l输入一个整数,把该数的二进制第5位清0。 l输入一个整数,判断该数的二进制第5位是否为1,是输出1,否则输出0。3.5 指针运算指针运算 3.5.1 取地址运算 l通过求地址运算符(&)获得地址值l表达式形式:l& 操作对象l例如:lint a=3,*p;lp=a; l通过指针变量或地址常量获得地址值lint a=3,*p=&a, *q;q=p;lchar *p=”ABCDEFG”; l通过标准函数获得地址值 l“空”地址 3.5 指针运算指针运算 3.5.2 操作指针变量

21、 l存取单元的数据两种方法l“直接存取”l“间接存取”l指针变量的使用注意事项 l先赋值后使用 l“&”和“*”优先级相同,结合性为右结合 lint a=3, *p,*q;lp = &a;lq= &p; l&*p的含义 l*&a的含义 l*q的含义 3.5 指针运算指针运算 3.5.3 移动指针移动指针 l形式如下:l指针 + 整型表达式l指针 整型表达式 l【例3.22】指针变量使用举例。l#include lvoid main( )llint a, *p=&a;lchar c, *pc=&c;lprintf(%d,%dn,p,p+1);lprintf(%d,%dn,p,p-2);lprin

22、tf(%d,%dn,pc,pc+1);lprintf(%d,%dn,pc,pc-2);l3.5 指针运算指针运算 3.5.3 比较指针比较指针 l形式如下:l类型相同的两个指针变量之间可以进行大于、大于等于、小于、小于等于、等于、不等于(、=、=、=、!=)的比较运算。此外,任何,指针变量都可以和0或空指针进行等于或不等于的关系运算 l两个同类型指针之间也可以进行减法运算,减法运算的结果是两个指针之间相差的内存单元个数,即两者相差内存地址值除以指针指向数据类型所占内存的大小3.6 其它运算其它运算 3.6.1 sizeof运算 lsizeof是一个单目右结合运算符,运算结果是一个无符号的整型。

23、sizeof表达式形式如下:sizeof(操作对象操作对象)l求指定数据类型存储的字节数求指定数据类型存储的字节数#include main()int x;x=sizeof(char); x=sizeof(x);3.6 其它运算其它运算 3.6.2 逗号运算逗号运算 l用逗号连接的表达式称为逗号表达式。逗号表达式的用逗号连接的表达式称为逗号表达式。逗号表达式的形式为:形式为:l表达式表达式1,表达式,表达式2,表达式,表达式3,表达式,表达式nl注意注意l逗号表达式的求解过程为,依次计算表达式逗号表达式的求解过程为,依次计算表达式1的值,表达式的值,表达式2的值,的值,表达式,表达式n的值。表

24、达式的值。表达式n的值为逗号表达式的值的值为逗号表达式的值.l逗号运算符的优先级是所有运算符中最低的,其结合性是自逗号运算符的优先级是所有运算符中最低的,其结合性是自左向右。左向右。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,

25、则执行表达式,则执行表达式3,表达式表达式3的值作为整个条件表示的值。的值作为整个条件表示的值。 l【例例3.26】输入三个整数,输出其中最大的一个。输入三个整数,输出其中最大的一个。l#include lvoid main( )llint x,y,z,t;lscanf(%d%d%d,&x,&y,&z);lt=xy?x:y;lt=tz?t:z;lprintf(%dn,t);l第第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备13022795号 | 川公网安备 51140202000112号