《程序设计基础:C语言》4ppt课件_第1页
《程序设计基础:C语言》4ppt课件_第2页
《程序设计基础:C语言》4ppt课件_第3页
《程序设计基础:C语言》4ppt课件_第4页
《程序设计基础:C语言》4ppt课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、2021/20212021/2021第二学期第二学期C C言语课程组言语课程组上一章知识复习上一章知识复习v讲述了实践问题向计算机程序转化的过程。讲述了实践问题向计算机程序转化的过程。v讲述了数据在计算机内部的存储方式。讲述了数据在计算机内部的存储方式。v讲述了数据类型的种类和区别。讲述了数据类型的种类和区别。v讲述了变量的声明和命名规那么。讲述了变量的声明和命名规那么。v讲述了常量和字面值的区别。重点了解字面值是讲述了常量和字面值的区别。重点了解字面值是有类型的。有类型的。v讲述了输入及输出函数的用法。讲述了输入及输出函数的用法。本讲教学目的本讲教学目的v了解左值及右值。了解左值及右值。v掌

2、握运算符的种类、重点掌握运算符优先级。掌握运算符的种类、重点掌握运算符优先级。v熟习各种运算符的功能及相关表达式的求值方法。熟习各种运算符的功能及相关表达式的求值方法。v了解了解sizeof运算符。运算符。v了解表达式副作用。了解表达式副作用。v掌握显式类型转换的方法,了解隐式转换。掌握显式类型转换的方法,了解隐式转换。v掌握溢出的计算方法,了解在什么情况下能够会掌握溢出的计算方法,了解在什么情况下能够会呵斥溢出。呵斥溢出。本章授课内容本章授课内容内存溢出内存溢出类型转换类型转换运算符与表达式运算符与表达式左值和右值左值和右值C程序的语法程序的语法本章授课内容本章授课内容内存溢出内存溢出类型转

3、换类型转换运算符与表达式运算符与表达式左值和右值左值和右值C程序的语法程序的语法C言语的言语的“单词单词v规范定义了多种类型的单词:规范定义了多种类型的单词:v关键词关键词(keywords):return、for、void、v标识符标识符(identifiers):x、y、z、v字面值字面值(literal):3、4、“Hello World!、v注释注释(comment):/*This is a comment.*/、v操作符操作符(operator):+、-、*、/、v分隔符分隔符(separator):、vC言语的运算言语的运算23 + 34算式运算符号表达式运算符由单个或多个操作数、

4、运算符组成的符合C言语规那么的式子叫做表达式。表达式的值就是经过计算以后所得到的值。从语法的角度看源文件从语法的角度看源文件/*源文件:源文件:demo.c*/#include int main(void) int x = 23; int y = 34; int z = x + y; printf(“C篮子中的苹果数量为篮子中的苹果数量为%dn“,z); system(“PAUSE); return 0;对于运算的含义就是我们接下来要学习和掌握的。对于运算的含义就是我们接下来要学习和掌握的。本章授课内容本章授课内容内存溢出内存溢出类型转换类型转换运算符与表达式运算符与表达式左值和右值左值和右值

5、C程序的语法程序的语法左值和右值左值和右值左值:左值:指的是援用对象指的是援用对象的一种特殊表达的一种特殊表达式,该表达式可式,该表达式可以访问或改动对以访问或改动对象。象。操作符操作符右值右值非左值表达式。非左值表达式。区别左值和右值区别左值和右值v例例4-1 左值及右值举例。左值及右值举例。左值右值总结左值右值总结v可以作为左值的表达式方式有:变量名、可以作为左值的表达式方式有:变量名、ek、(e)、、e-name、*e。v有些运算符要求某个操作数必需为左值,这样的有些运算符要求某个操作数必需为左值,这样的运算符有:运算符有:v&:操作数应为左值或函数名。:操作数应为左

6、值或函数名。v+、-:操作数应为左值。:操作数应为左值。v=、+=、-=、*=、/=、%=、=、&=、=、|=:左操作数应为左值。:左操作数应为左值。总结:可以出如今等号左侧的值都是左值总结:可以出如今等号左侧的值都是左值. .本章授课内容本章授课内容内存溢出内存溢出类型转换类型转换运算符与表达式运算符与表达式左值和右值左值和右值C程序的语法程序的语法C C言语中的运算符言语中的运算符(I)(I)vC言语运算符可分为以下几类:言语运算符可分为以下几类:v算数运算符:加算数运算符:加(+)、减、减(-)、乘、乘(*)、除、除(/)、求余或称模运算求余或称模运算(%)、自增、自增(+)、自

7、减、自减(-)v关系运算符:包括大于关系运算符:包括大于()、小于、小于(=)、小于等于、小于等于(=,=)C C言语中的运算符言语中的运算符(II)(II) 条件运算符: (?:).这是独一一个三目运算符。 位运算符:与(&)、位或(|)、位非()、位异或()、左移() 逗号运算符: (,) 指针运算符: (*)和 (&) 。 求字节数运算符: (sizeof)。 特殊运算符:括号(),下标,成员(,.)C C言语中运算符的优先级言语中运算符的优先级I IC C言语中运算符的优先级言语中运算符的优先级IIII算数运算符算数运算符v复习:加复习:加(+)、减、减(-)、乘、乘(

8、*)、除、除(/)、求余或、求余或称模运算称模运算(%)v加法运算符加法运算符“+为二元运算符,即应有两个操为二元运算符,即应有两个操作数参与加法运算,其相应的表达式方式为:作数参与加法运算,其相应的表达式方式为:操作数操作数1 + 操作数操作数2。v操作数操作数1 - 操作数操作数2v操作数操作数1 * 操作数操作数2v操作数操作数1 / 操作数操作数2v操作数操作数1 % 操作数操作数2例4-3 设有int x = 4, y; 请分析语句y = x*5+4;执行完后,y 的值是多少?例4-4 设有int x = 4, z = 5, y; 请分析语句y = z + x*(9 z) ;执行完后

9、,y 的值是多少?例4-7 设有int x = 4, y = 3, z; 请分析语句z = x%y;执行完后,z 的值是多少?例4-8 设有int x = 4, y = 3; double z1, z2;请分析语句z1 = x / y;,z2 = x % y;执行完后,z1 和z2 的值是多少?留意:对于留意:对于% %来说,结果的符号同被取余数一样来说,结果的符号同被取余数一样而且两个操作数必需为整数而且两个操作数必需为整数. .算数运算符算数运算符v自增运算符自增运算符(+):一元运算符,操作方式有两种:一元运算符,操作方式有两种:v+操作数操作数操作数提供计算值前,先使其值自动操作数提供

10、计算值前,先使其值自动加加1v操作数操作数+操作数提供计算值后,再使其值自动操作数提供计算值后,再使其值自动加加1v自减运算符自减运算符(-):一元运算符,操作方式有两种:一元运算符,操作方式有两种:v-操作数操作数操作数提供计算值前,先使其值自动操作数提供计算值前,先使其值自动减减1v操作数操作数-操作数提供计算值后,再使其值自动操作数提供计算值后,再使其值自动减减1例4-12 设有int x = 3, y;,请分析语句y = +x;执行后,x、y 的值?例4-13 设有int x = 3, y = 4, z;,请分析语句z = x+ + y;执行后,x、y、z 的值?例4-16 设有int

11、 x = 3, y = 4, z;,请分析语句z = x+ + -y;执行后,x、y、z 的值?算数运算符算数运算符v总结:总结:v+、-运算符的操作数必需是左值运算符的操作数必需是左值v+运算符和运算符运算符和运算符+的运用规范同理的运用规范同理-v+、-运算符的副作用运算符的副作用va=c+b+c+;a?vc=(i+)+(i+);c ?vprintf(“%dt%dn,i,i+);结果?结果?留意:留意:1.1.尽量分多行写尽量分多行写. .2.2.尽量运用多运用尽量运用多运用. .3.3.尽量不要再一行语句中对一个变量多次尽量不要再一行语句中对一个变量多次运用自增自减运用自增自减. .运算

12、符和表达式总结运算符和表达式总结v例例4-40,求代码结果。,求代码结果。/*源文件:demo4_4.c*/#include #include int main(void) int x = 3; int a; a = +x + +x + +x; printf(a = %d, a); system(PAUSE); return 0;运算符和表达式总结运算符和表达式总结v例例4-41,求代码结果。,求代码结果。/*源文件:demo4_5.c*/#include #include int main(void) int x = 3; int a; +x; +x; +x; a = x + x + x;

13、printf(a = %dn, a); system(PAUSE); return 0;运算符和表达式总结补运算符和表达式总结补v对于一个表达式而言,能够会产生副作用。所以对于一个表达式而言,能够会产生副作用。所以表达式可分为无副作用的和有副作用的。表达式可分为无副作用的和有副作用的。v序列点被定义为程序执行过程中的这样一个点:序列点被定义为程序执行过程中的这样一个点:该点前的表达式的一切副作用,在程序执行到达该点前的表达式的一切副作用,在程序执行到达该点之前发生终了;该点后的表达式的一切副作该点之前发生终了;该点后的表达式的一切副作用,在程序执行到该点时髦未发生。用,在程序执行到该点时髦未发

14、生。v序列点出现的位置序列点出现的位置v完好表达式终了时完好表达式终了时v&、|、?:或逗号运算符的第一个操作数之后或逗号运算符的第一个操作数之后v函数调用中求值参数和函数表达式之后函数调用中求值参数和函数表达式之后运算符和表达式总结运算符和表达式总结留意:留意:1.1.尽量不要利用表达式的副作用尽量不要利用表达式的副作用. .2.2.尽量引入中间变量,避开副作用歧义尽量引入中间变量,避开副作用歧义. .3.3.尽量尽量不要出现晦涩难懂尽量尽量不要出现晦涩难懂. .也不知道系也不知道系统将怎样执行的代码统将怎样执行的代码. .赋值运算符赋值运算符v赋值运算符:赋值运算符:v简单赋值简单

15、赋值(=)v复合算术赋值复合算术赋值(+=,-=,*=,/=,%=)v复合位运算赋值复合位运算赋值(&=,|=,=,=,)、小于、小于(=)、小于等于、小于等于( y;执行后,z 的值?例4-19 设有int x = 3, y;,请分析y = 2 = 8;执行后,y 的值?例4-20 设有int x = 3, y = 3, z = 5;,请分析表达式:x = y、x !=y、y != z、x = 3、x !=4 的计算结果?例4-21 设有int x = 3, y = 3, z;,请分析语句z = x = y != 4;执行后,z 的值?问题:假设把不同类型的变量相互赋值会怎样呢?逻辑

16、运算符逻辑运算符v逻辑运算符:与逻辑运算符:与(&)、或、或(|)、非、非(!)v非操作的普通方式:!操作数非操作的普通方式:!操作数1v对逻辑与,其简单表达式的普通方式为:操作数对逻辑与,其简单表达式的普通方式为:操作数1&操作数操作数2v对逻辑或,其简单表达式的普通方式为:操作数对逻辑或,其简单表达式的普通方式为:操作数1|操作数操作数2例4-22 设有int x = 3, y = 0, z;,请分析表达式x & y、x | y、!x、!y 的结果?例4-23 设有int a = 3, b = 2, c = 1, d = 5, e = 6, f;,请分析表达式f =

17、 a b | b c & c d| d b ? a : b;执行后,c 的值?位运算操作运算符位运算操作运算符v位运算符:位运算符:v与与(&)、位或、位或(|)、位非、位非()、位异或、位异或()、左移、左移()v运算符运算符v普通方式:普通方式:操作数操作数v作用:将操作数的二进制表示逐位取反。作用:将操作数的二进制表示逐位取反。v例例4-25 设有设有int x = 0 x0FA4, y;,请分析,请分析y = x;执行后,执行后,y 的值?的值?位运算操作运算符位运算操作运算符v&运算符普通方式:操作数运算符普通方式:操作数1&操作数操作数2v对操作数对

18、操作数1和操作数和操作数2的二进制数,进展按位求与的二进制数,进展按位求与v|运算符普通方式:操作数运算符普通方式:操作数1|操作数操作数2v对操作数对操作数1和操作数和操作数2的二进制数,进展按位求或的二进制数,进展按位求或v运算符普通方式:操作数运算符普通方式:操作数1操作数操作数2v对操作数对操作数1和操作数和操作数2的二进制数,进展按位求异的二进制数,进展按位求异或或例4-26 设有int x = 3, y = 4, z;,请分析语句z = x & y;执行后,z 的值?例4-27 设有int x = 0 xF4AB, y = 0 x1AFC, z;,请分析语句z = x |

19、y;执行后,z 的值?例4-28 设有int x = 0 xF4AB, y = 0 x1AFC, z;,请分析语句z = x y;执行后,z 的值?补充:原码、补码、反码补充:原码、补码、反码v概念:概念:v换算关系:换算关系:v反码反码=原码原码v补码补码=反码反码+1v原码原码=补码补码-1符号位不变符号位不变v例例4-35 求补码求补码(1111 1000)b 的原码,最高的原码,最高位为符号位。位为符号位。位运算操作运算符位运算操作运算符v运算符普通方式:操作数运算符普通方式:操作数1操作数操作数2v对操作数对操作数1的每一位都向左挪动操作数的每一位都向左挪动操作数2位位v留意:留意:

20、v以上操作的操作数以上操作的操作数1和操作数和操作数2应为整数类型;应为整数类型;v运算数的各二进位全部左移操作数运算数的各二进位全部左移操作数2指定值的位指定值的位数,移到边境之外的位被丢弃,低位补数,移到边境之外的位被丢弃,低位补0;v如操作数如操作数2是负数,那么移位运算符的结果是未是负数,那么移位运算符的结果是未定义的;定义的;v如操作数如操作数2的值大于或等于转换后左操作数的值大于或等于转换后左操作数1数值数值的位数,那么移位运算符的结果也是未定义的。的位数,那么移位运算符的结果也是未定义的。位运算操作运算符位运算操作运算符v例例4-29:设有:设有int x = 0 xE4AB,

21、y;,请分析,请分析语句语句y = x 3;执行后,执行后,x、y 的值?的值?位运算操作运算符位运算操作运算符v例例4-30 设有设有char x = a, y;,请分析语句,请分析语句y = x 4;执行后,执行后,y 的值?的值?v例例4-31 设有设有char x = a; int y;,请分,请分析语句析语句y = x 4;执行后,执行后,y 的值?的值?位运算操作运算符位运算操作运算符v例例4-34 设有设有int x = 0 xFAFF; char y;请请分析语句分析语句y = x 运算符普通方式:操作数运算符普通方式:操作数1操作数操作数2v对操作数对操作数1的每一位都向右挪

22、动操作数的每一位都向右挪动操作数2位位v留意:留意:v假设操作数假设操作数1为无符号整型数或带符号的非负为无符号整型数或带符号的非负数时,操作数数时,操作数1的各二进制位右移操作数的各二进制位右移操作数2指定指定的位数,高位补的位数,高位补0。如:将。如:将(0100 0110)b 右移右移两位将得到两位将得到(0001 0001)b。v假设操作数假设操作数1为带符号的负数时,操作数为带符号的负数时,操作数1的各二的各二进制位右移操作数进制位右移操作数2指定的位数:指定的位数:v有的在高位补有的在高位补0,此时将,此时将(1000 0110)(0010 0001)b。v有的将操作数有的将操作数

23、1移出的低位移入高位,此时将移出的低位移入高位,此时将(1000 0110)b (10100001)b。v含有对带符号的负数进展右移的程序是不可移植含有对带符号的负数进展右移的程序是不可移植的。的。位运算操作运算符位运算操作运算符 如操作数2是负数,那么移位运算符的结果是未定义的; 如操作数2的值大于或等于转换后左操作数1数值的位数,那么移位运算符的结果也是未定义的。位运算操作运算符位运算操作运算符v例例4-35 设有设有unsigned int x = 0XFAFF, y;,请分析语句,请分析语句y = x 3;执行后,执行后,y的值。的值。逗号运算符逗号运算符v逗号表达式又称顺序表达式包括

24、逗号分开的逗号表达式又称顺序表达式包括逗号分开的两个表达式。两个表达式。v普通方式为:表达式普通方式为:表达式1,表达式表达式2v留意:留意:v逗号表达式的结合律是从左至右。表达式逗号表达式的结合律是从左至右。表达式2的值的值作为整个逗号表达式的值。作为整个逗号表达式的值。v表达式表达式1和表达式和表达式2也可以是逗号表达式。也可以是逗号表达式。v并不是有逗号出现的地方,就可以被以为是逗号并不是有逗号出现的地方,就可以被以为是逗号表达式。表达式。逗号运算符逗号运算符v例例4-36 设有设有int x = 3, y;,请分析语句,请分析语句y= x+3,4;执行后,执行后,y的值?的值?v例例4

25、-37 设有设有int x = 3, y;,请分析语句,请分析语句y=(x+3,4);执行后,执行后,y的值?的值?v例例4-38 设有设有int x = 3, y;,请分析语句,请分析语句y=(x+3,4,5),x+6);执行后,执行后,y的值?的值?运算符表达式总结运算符表达式总结vC C言语运算符可分为以下几类:言语运算符可分为以下几类:v算数运算符:算数运算符:+ +、- -、* *、/ /、% %、+、-v关系运算符:关系运算符: 、 =、=,=,=v条件运算符:条件运算符:?:?:v位运算符:位运算符:& &、| |、 、 、v逗号运算符:,逗号运算符:,v指针运算

26、符:指针运算符:* *、& &v求字节数运算符:求字节数运算符:sizeofsizeofv特殊运算符:括号特殊运算符:括号()(),下标,下标,成员,成员(,.).)问题:假设把不同类型的变量相互运算会怎样呢?不同类型的变量进展运算不同类型的变量进展运算vint x = 5;float y = 4.6;vfloat z=x+y;vdouble z=x+y;vint z=x+y;问题:为什么会这样?什么时候结果正常,什么时候不正常呢?本章授课内容本章授课内容内存溢出内存溢出类型转换类型转换运算符与表达式运算符与表达式左值和右值左值和右值C程序的语法程序的语法类型转换类型转换v类型

27、转换分为隐式类型转换和显示类型转换。类型转换分为隐式类型转换和显示类型转换。int x = 0 x89898; /*等价于 int x = 0 x00089898;*/short y;y = x;隐式类型转换隐式类型转换v在表达式中假设有不同类型的变量或字面值参与在表达式中假设有不同类型的变量或字面值参与同一运算时,编译器将在编译时自动按照规定的同一运算时,编译器将在编译时自动按照规定的规那么将其转换为一样的数据类型,这种由编译规那么将其转换为一样的数据类型,这种由编译自动完成的转换即是隐式转换。自动完成的转换即是隐式转换。v整数转换级别:整数转换级别:隐式类型转换隐式类型转换v对于对于 操作

28、数操作数1=操作数操作数2,操作数,操作数1的类型为的类型为T1,操作数操作数2的类型为的类型为T2,实践的运算过程为:实践的运算过程为:v计算操作数计算操作数2的值,设得的值,设得v2v把把v2转换为转换为T1类型类型v计算操作数计算操作数1的值的值v用转换后的用转换后的v2的值更新操作数的值更新操作数1代表的对象值。代表的对象值。vint x=3,y=2;vfloat z = x/y;隐式类型转换隐式类型转换问题:隐式类型转换自动进展,我干嘛还要掌握规那么呢?隐式类型转换隐式类型转换v例例4-45 设有设有int x = 0 x00110000;short y; y = x; v例例4-4

29、6 设有设有short s = 0 xFFFF; unsigned int i; i = s;v例例4-47 设有设有int i; unsigned int u = 0 xFFFFFFFF; i = u;v例例4-48 设有设有unsigned int x = -1;int y = x;v例例4-49 设有设有unsigned int u = 3; float f = 3.14; short s = 5; int x; x = f + u * s;求求x。隐式类型转换隐式类型转换/*源文件:demo4_7.c*/#include #include int main(void) int i; u

30、nsigned int u; int y; printf(请输入i 值:); scanf(%d, &i); printf(请输入u 值:); scanf(%d, &u); y = i u? i : u; printf(i=%d、u=%d 中大的数是%dn, i, u, y); system(PAUSE); return 0;留意:留意: 在一个表达式中尽在一个表达式中尽量防止带符号和无符量防止带符号和无符号的数同时出现号的数同时出现. .隐式类型转换隐式类型转换留意:留意:1.1.隐式类型转换是编译器自动进展的隐式类型转换是编译器自动进展的. .2.2.隐式类型转换普通是向较大的类型转变隐式类型转换普通是向较大的类型转变. .显示类型转换显示类型转换v显式转换表达式的普通方式为:显式转换表达式的普通方式为:v(希望转换的类型希望转换的类型) 操作数操作数显示类型转换显示类型转换v例例4-49 设有设有int x = 3, y = 0 xFFFFFFFF; double f;,请分析以下语句执行

温馨提示

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

评论

0/150

提交评论