C语言程序设计教程第2章北京邮电大学出版社.ppt

上传人:桔**** 文档编号:571453709 上传时间:2024-08-10 格式:PPT 页数:47 大小:339KB
返回 下载 相关 举报
C语言程序设计教程第2章北京邮电大学出版社.ppt_第1页
第1页 / 共47页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第2页
第2页 / 共47页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第3页
第3页 / 共47页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第4页
第4页 / 共47页
C语言程序设计教程第2章北京邮电大学出版社.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《C语言程序设计教程第2章北京邮电大学出版社.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程第2章北京邮电大学出版社.ppt(47页珍藏版)》请在金锄头文库上搜索。

1、第第 2 2 章章 C C语言的基本数据类型与表达式语言的基本数据类型与表达式 2.1 2.1 常量和变量常量和变量 2.2 2.2 C C语言的基本数据类型语言的基本数据类型 2.3 2.3 数据类型转换数据类型转换 2.4 2.4 运算符与表达式运算符与表达式C C语言程序设计教程语言程序设计教程1C语言程序设计教程10-Aug-24C C语言的数据类型语言的数据类型第2章 C语言的基本数据类型与表达式C C语言提供的数据结构,是以数据类型形式出现的。具体分语言提供的数据结构,是以数据类型形式出现的。具体分类如下:类如下:1.1.基本类型基本类型 分为整型、实型(又称浮点型)、字符型和枚举

2、型四种。分为整型、实型(又称浮点型)、字符型和枚举型四种。2.2.构造类型构造类型 分为数组类型、结构类型和共用类型三种。分为数组类型、结构类型和共用类型三种。3.3.指针类型。在第指针类型。在第9 9章中介绍。章中介绍。4.4.空类型空类型 C C语言中的数据,有语言中的数据,有常量常量和和变量变量之分,它们分别属于上述之分,它们分别属于上述这些类型。这些类型。2C语言程序设计教程10-Aug-24 字符字符型(型(charchar) 整型整型(short,int,long,unsignedshort,int,long,unsigned) 单精度型(单精度型(floatfloat) 实型实型

3、 双精度型(双精度型(doubledouble) 枚举类型(枚举类型(enumenum) 数组类型(数组类型( ) 构造类型构造类型 结构体类型(结构体类型(structstruct) 共用体类型(共用体类型(unionunion) 指针类型(指针类型(* *) 空类型(空类型(voidvoid)基本类型基本类型数据类型数据类型本章将介绍基本类型中的整型、实型和字符型三种数据。本章将介绍基本类型中的整型、实型和字符型三种数据。3C语言程序设计教程10-Aug-24一、常量与符号常量 常量常量是指在程序运行中是指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。 常量常量又可分为直接常量

4、和符号常量。又可分为直接常量和符号常量。第2章 C语言的基本数据类型与表达式2.1 2.1 常量与变量常量与变量常量的类型,可通过书写形式来判别。常量的类型,可通过书写形式来判别。4C语言程序设计教程10-Aug-24 120 、 -100、 0; 0120、 072; 0xFFFF、 0x1e、0X28AF,0XED4 ; 120L, 200L ; 长整型常量长整型常量 3.14、 -3.1、 5.12E-6 ; 099、12f、 0xg 、48EA ; 019.5 、1e-08; 实型常量只能用十进制形式表示实型常量只能用十进制形式表示 2.1E10.2、E-6、6.4E+4.8、E9 ;

5、 changsha 、+?ab ; 第2章 C语言的基本数据类型与表达式1、直接常量:直接常量:是在程序中直接引用的数据。是在程序中直接引用的数据。请请判判断断这这些些常常量量正正确确与与否否:5C语言程序设计教程10-Aug-242、符号常量符号常量 是是用标用标识符来表示一个数据;识符来表示一个数据;在程序不能给它赋值。在程序不能给它赋值。 定义形式定义形式: #define标识符标识符常量数据常量数据例如例如:#definePI3.14159 在在程程序序预预处处理理时时,凡凡是是出出现现标标识识符符PI的的地地方方都都将将用用数数据据3.14159来替换。来替换。 如如: 2*2.3*

6、PI就就等价于等价于 2*2.3*3.14159。二、二、 变量变量1.1.变量的概念变量的概念 在程序运行过程中,其值可以被改变的量称为变量。在程序运行过程中,其值可以被改变的量称为变量。2.2.变量的两个要素变量的两个要素第2章 C语言的基本数据类型与表达式6C语言程序设计教程10-Aug-24(1)变变量量名名。每每个个变变量量都都必必须须有有一一个个名名字字变变量量名名,变变量量命命名遵循标识符命名规则。名遵循标识符命名规则。(2)变变量量值值。在在程程序序运运行行过过程程中中,变变量量值值存存储储在在内内存存中中。在在程程序中,通过变量名来引用变量的值。序中,通过变量名来引用变量的值

7、。3.标识符标识符命名规则命名规则(1)有有效效字字符符:只只能能由由字字母母、数数字字和和下下划划线线组组成成,且且以以字字母母或或下划线开头。下划线开头。(2)有有效效长长度度:随随系系统统而而异异,但但至至少少前前8个个字字符符有有效效。如如果果超超长,则超长部分被舍弃。长,则超长部分被舍弃。例例如如,由由于于student_name和和student_number的的前前8个个字字符符相相同同,有的系统认为这两个变量,是一回事而不加区别。有的系统认为这两个变量,是一回事而不加区别。在在TC V2.0中中,变变量量名名(标标识识符符)的的有有效效长长度度为为132个个字字符符,缺省值为缺

8、省值为32。7C语言程序设计教程10-Aug-24(3) C语言的关键字不能用作变量名。语言的关键字不能用作变量名。 注注意意:C语语言言对对英英文文字字母母的的大大小小敏敏感感,即即同同一一字字母母的的大大小小写写,被认为是两个不同的字符。被认为是两个不同的字符。 习习惯惯上上,变变量量名名和和函函数数名名中中的的英英文文字字母母用用小小写写,以以增增加加可可读性。读性。思思考考题题:在在C语语言言中中,变变量量名名total与与变变量量名名TOTAL、ToTaL、tOtAl等是同一个变量吗?等是同一个变量吗?标识符命名的良好习惯标识符命名的良好习惯见名知意:见名知意: 所所谓谓“见见名名知

9、知意意”是是指指,通通过过变变量量名名就就知知道道变变量量值值的的含含义义。通通常常应应选选择择能能表表示示数数据据含含义义的的英英文文单单词词(或或缩缩写写)作作变变量量名名,或汉语拼音字头作变量名。或汉语拼音字头作变量名。例例如如,name/xm(姓姓名名)、sex/xb(性性别别)、age/nl(年年龄龄)、salary/gz(工资)。工资)。8C语言程序设计教程10-Aug-244.4.变量的定义与初始化变量的定义与初始化在在语语言言中中要要求求对对所所有有用用到到的的变变量量,必必须须先先定定义义、后后使使用用;且称在定义变量的同时进行赋初值的操作为变量初始化。且称在定义变量的同时进

10、行赋初值的操作为变量初始化。(1)定定义义形形式式:类类型型标标识识符符: 变变量量名名1 ,变变量量名名2,变变量量名名3.; 例如例如:inta,b,c; floatx,y;charc1,c2;或或intc1,c2;自己设定,满足自己设定,满足标识符的规定。标识符的规定。如:如:int,int,float,charfloat,char;不可省;不可省(2)变量变量初始化初始化 在在说明说明变量的同时给变量一个初始值变量的同时给变量一个初始值。 int a=5, b=3; int a=5, b=3; int a=b=c=3; int a=b=c=3; int a,b,c; a=b=c=3;

11、int a,b,c; a=b=c=3; 例如例如9C语言程序设计教程10-Aug-24 mainmain( ) int x int x,y y,z z,w w; /* /*定义定义x x,y y,z z,w w为整型变量为整型变量* */ / unsigned int kunsigned int k; /* /*定义定义k k为无符号整型变量为无符号整型变量* */ / x=10x=10;y=-20y=-20;k=30k=30; z=x+k z=x+k;w=y+kw=y+k; printf printf(“x+k=%dx+k=%d,y+k=%dny+k=%dn”,z z,w w); ; 第2章

12、 C语言的基本数据类型与表达式例例2-1:程序运行结果为:程序运行结果为: x+k=40x+k=40,y+k=10y+k=1010C语言程序设计教程10-Aug-24 5 5、变量的作用域变量的作用域 C C语言程序是由函数组成的,且有且只能有一个语言程序是由函数组成的,且有且只能有一个mainmain函数。函数。 变量变量定义可以出现在函数内,亦可出现在函数外定义可以出现在函数内,亦可出现在函数外或者是函或者是函数的参数中。数的参数中。按照变量定义语句出现的位置,可以分为:按照变量定义语句出现的位置,可以分为:局部变量:局部变量:在函数内定义;在函数内定义; 只在该函数中才能使用。只在该函数

13、中才能使用。 全局变量:全局变量:在函数外定义;在函数外定义; 从它被定义的位置起从它被定义的位置起, ,在在之后的之后的所有函数中有效。所有函数中有效。形式参数:形式参数:定义为函数的参数;定义为函数的参数; 只在该函数中才能使用。只在该函数中才能使用。第2章 C语言的基本数据类型与表达式11C语言程序设计教程10-Aug-24变量的特点:变量的特点: 变量是指变量是指以以标识标识符符为为名字,其名字,其值值可以改可以改变变的量。的量。 变量代表计算机内存中的某一存储空间,该存储空变量代表计算机内存中的某一存储空间,该存储空间间中存放中存放的数据就是变量的值。的数据就是变量的值。 在同一程序

14、块中,在同一程序块中,变量变量不能被重复定义。不能被重复定义。 使用变量时必须使用变量时必须“先定义,后使用先定义,后使用”12C语言程序设计教程10-Aug-241 1、整型常量表示方法:整型常量表示方法: (1) (1) 十进制形式十进制形式: :与数学上的整数表示相同;与数学上的整数表示相同; 例如例如: 12, -100, 0: 12, -100, 0 (2) (2) 八进制形式八进制形式: :在数码前加数字在数码前加数字0 0; 例如例如: 012=1*8: 012=1*81 1+2*8+2*80 0=10(=10(十进制)十进制) (3) (3) 十六进制形式十六进制形式: :在数

15、码前加在数码前加0 0X X(数字数字0和字母和字母X)。)。 例如例如: 0: 0x12=1*16x12=1*161 1+2*16+2*160 0=18(=18(十进制)十进制)*八进制的数码范围为八进制的数码范围为07;018 *十六进制的十六进制的数码除了数字数码除了数字0 09 9外外, , 还使用英文字母还使用英文字母af(或或AF)表示表示1015。如:如:0x1e2.2 2.2 C C语言的基本数据类型语言的基本数据类型一、整型数据第2章 C语言的基本数据类型与表达式13C语言程序设计教程10-Aug-24 2、整型变量整型变量分类:分类: 根据数据所占的二进制位数分为根据数据所

16、占的二进制位数分为: :int、short、long;同样存储长度的数据又分同样存储长度的数据又分unsigned、signed; 故可组合出六种类型。故可组合出六种类型。3、整型变量整型变量值域值域: 由机器中数据的存储长度决定。由机器中数据的存储长度决定。 如如TurboC中,有中,有 short(2字节字节)int(2字节字节) long(4字节字节) 关键字关键字 所占位数所占位数 取值范围取值范围 short 16 short 16 -32768-327683276732767 unsigned short 16 unsigned short 16 0 06553565535 int

17、 16 int 16 -32768-327683276732767 unsigned 16 unsigned 16 0 06553565535 long 32 -2147483648 long 32 -214748364821474836472147483647 unsigned long 32 unsigned long 32 0 042949672954294967295第2章 C语言的基本数据类型与表达式14C语言程序设计教程10-Aug-244.4.数据在内存中的形式数据在内存中的形式以二进制的形式存放,以补码表示。以二进制的形式存放,以补码表示。 数据在内存中是以二进制的形式存放的,

18、数据在内存中是以二进制的形式存放的, 如定义如定义 intint i=12 i=12; 根根据据在在C C编编译译系系统统一一个个整整型型变变量量所所占占的的字字节节数数为为2 2,变变量量i i在在内存中的实际存放情况如图内存中的实际存放情况如图2-12-1所示。所示。 图图2-1 2-1 整型变量整型变量i i在内存中的存放示意图在内存中的存放示意图 实际上,数值是以补码表示的。实际上,数值是以补码表示的。正数的补码:正数的补码: 与原码相同与原码相同负负数数的的补补码码: : 负负数数取取绝绝对对值值二二进进制制按按位位取取反反再再加加11补码补码 000000000000101015C

19、语言程序设计教程10-Aug-243 3的原码的原码 按位取反按位取反 加加1 1 得得-3-3的补码的补码 由此可知,在整数的由此可知,在整数的1616位中,最左边的一位为符号位,位中,最左边的一位为符号位,为为0 0,表示数值为正;为,表示数值为正;为1 1,表示数值为负,表示数值为负000000000000010111111111111110101111111111111110例如:求例如:求-3在内存中的存放形式在内存中的存放形式16C语言程序设计教程10-Aug-245.整型数据的溢出:整型数据的溢出: 不同的整型数据有不同的取值范围,在程序运行过程不同的整型数据有不同的取值范围,在

20、程序运行过程中,如果出现数值超出整型数据的允许值范围,就会中,如果出现数值超出整型数据的允许值范围,就会出现出现“溢出溢出”。例如:例如:一个一个int型的变量的最大值为型的变量的最大值为(215-1)=32767,如果再如果再加加1,则产生溢出则产生溢出,其结果为:其结果为: -215 =-32768100000000000000032767-32768011111111111111117C语言程序设计教程10-Aug-241 1、实型常量表示方法实型常量表示方法:(1) (1) 十进制小数形式:十进制小数形式:由数字和小数点组成;由数字和小数点组成; 例如例如: 3.4, 4., .3:

21、3.4, 4., .3。(2) (2) 指数形式:指数形式:“十进制小数十进制小数”+ +“ e(e(或或E)E)”+ +“十进制数整十进制数整数数”。 例如例如: 12.5: 12.5e-6e-6表示表示12.512.51010-6 。 小数点不能单独出现;小数点不能单独出现; 0.0. .0 .0 . . e e或或E E的两边必须有数,且其后面必须为整数;的两边必须有数,且其后面必须为整数; 如:如: 6 6E0.2 E0.2 e5e5 2、实型变量实型变量分类:分类: 关键字关键字 字节数字节数 取值范围取值范围 精度精度( (位位) ) float 4 3.4float 4 3.41

22、010-38 3.43.4101038 7 7 double 8 1.7 double 8 1.71010-308 1.71.71010308 1515注意注意第2章 C语言的基本数据类型与表达式二、实型数据18C语言程序设计教程10-Aug-243 3实型数据的舍入误差实型数据的舍入误差void main()void main() float a=1234567.896; float a=1234567.896; float float b=1234567.848; b=1234567.848; printfprintf(“a=%f(“a=%fnbnb=%fn=%fn”,a,b);”,a,b

23、); void main()void main() double a=1234567.896; double a=1234567.896; double double b=1234567.848; b=1234567.848; printfprintf(“a=%f(“a=%fnbnb=%fn=%fn”,a,b);”,a,b); 结果:结果: a=1234567.875000a=1234567.875000 b=1234567.875000 b=1234567.875000结果:结果: a=1234567.896000a=1234567.896000 b=1234567.848000 b=123

24、4567.84800019C语言程序设计教程10-Aug-24为什么会出现这种情况?是由于实型数据是用为什么会出现这种情况?是由于实型数据是用有限的存储单元进行存储的,因而能提供的有效有限的存储单元进行存储的,因而能提供的有效数字有限,在有效数字以外的数字将被舍弃。对数字有限,在有效数字以外的数字将被舍弃。对于于floatfloat型变量,只能保证型变量,只能保证前前7 7位数字是准确的位数字是准确的,后面的数字是无意义的,而采用后面的数字是无意义的,而采用doubledouble型变量后,型变量后,其精度大幅度提高,其精度大幅度提高,能保证前能保证前1515位有效数字是准位有效数字是准确的确

25、的。另外,同样因为有效数字的位数问题,在。另外,同样因为有效数字的位数问题,在程序中应避免用一个很大的数加上或减去一个很程序中应避免用一个很大的数加上或减去一个很小的数,否则会丢失小的数。小的数,否则会丢失小的数。20C语言程序设计教程10-Aug-241 1、字符常量字符常量: (1) (1) 用单引号括起来的一个字符;如:用单引号括起来的一个字符;如:A、 1、?等等。 (2) (2) 用单引号括起来的由反斜杠用单引号括起来的由反斜杠( ( ) )引导的转义字符引导的转义字符。 转义转义是指在源程序中碰到是指在源程序中碰到这这种字符种字符组组合合时时,反斜杠的意,反斜杠的意义义已已经发经发

26、生生转变转变,变变成控制代成控制代码码和具有某些特殊用途的和具有某些特殊用途的单单个字符。例如,个字符。例如, n n已不再代表英文小写字母已不再代表英文小写字母n n,而而转义转义成成了了“换换行符行符”。 字符形式字符形式 功能功能 n n 换行换行 t t 横向跳格横向跳格 b b 退格退格 r r 回车回车 反斜杠字符反斜杠字符 单引号字符单引号字符 ddd 8ddd 8进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符 xhh 16xhh 16进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符第2章 C语言的基本数据类型与表达式四、字符类型21C语

27、言程序设计教程10-Aug-24例如:字符例如:字符A A的的ASCIIASCII码为:码为: 6565D D(十进制)十进制)=41=41H H(十六进制)十六进制)=101=101Q Q(八进制)八进制) 字符字符A A可以表示为可以表示为A A、x41x41、101101。2、分类:分类: char char 和和 unsigned charunsigned char;3 3、值域:值域: 每每个个字字符符型型数数据据在在内内存存中中占占一一个个字字节节;包包括括ASCIIASCII字字符符表中的所有字符(可显示字符和非显示字符)。表中的所有字符(可显示字符和非显示字符)。4 4、变量值

28、的存储变量值的存储 字字符符数数据据在在内内存存中中的的存存储储形形式式:以以二二进进制制的的ASCII码码形形式存储。式存储。 字字符符数数据据在在内内存存中中存存储储的的是是字字符符的的ASCII码码 一一个个无无符符号号整整数数,其其形形式式与与整整数数的的存存储储形形式式一一样样,所所以以语语言言允允许字符型数据与整型数据之间通用。许字符型数据与整型数据之间通用。第2章 C语言的基本数据类型与表达式22C语言程序设计教程10-Aug-24(1)一个字符型数据,既可以字符形式输出,也可以整)一个字符型数据,既可以字符形式输出,也可以整数形式输出。数形式输出。 案例案例2.1 字符变量的字

29、符形式输出和整数形式输字符变量的字符形式输出和整数形式输出。出。 /*程序功能:用字符形式和整数形式输出字符变量程序功能:用字符形式和整数形式输出字符变量*/ main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); 程序运行结果:程序运行结果: ch1=a,ch2=b ch1=97,ch2=9823C语言程序设计教程10-Aug-24(2)允许对字符数据进行算术运算,此时就是对它们的允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算

30、术运算。码值进行算术运算。案例案例2.2 字符数据的算术运算。字符数据的算术运算。 /*程序功能:字符数据的算术运算程序功能:字符数据的算术运算*/ main() char ch1,ch2; ch1=a; ch2=B;/*字母的大小写转换字母的大小写转换*/ printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); /*用字符形式输出一个大于用字符形式输出一个大于256的数值的数值*/ printf(ch1+200=%dn, ch1+200); printf(ch1+200=%cn, ch1+200); printf(ch1+256=%dn, ch1+256); prin

31、tf(ch1+256=%cn, ch1+256); 程序运行结果:程序运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a24C语言程序设计教程10-Aug-244 4、字符串:字符串: 是用一对双引号括起来的字符序列。是用一对双引号括起来的字符序列。 如:如:“SHANGHAISHANGHAI”,“AbcdeFGHijkAbcdeFGHijk”,“How are youHow are you”。字符串中字符的个数称为字符串长度。长度为字符串中字符的个数称为字符串长度。长度为0 0的字符串(即的字符串(即一个字符都没有的字符

32、串)称为空串,表示为一个字符都没有的字符串)称为空串,表示为“ ” “ ” (一对紧(一对紧连的双引号)。连的双引号)。例如例如“How do you do.”How do you do.”、“Good morning.”“Good morning.”等,都是字符等,都是字符串常量,其长度分别为串常量,其长度分别为1414和和1313(空格也是一个字符)。(空格也是一个字符)。 如果反斜杠和双引号作为字符串中的有效字符,则必须使用如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。转义字符。例如:(例如:(1 1)C:msdosv6.22 C:msdosv6.22C:msdosv6.

33、22 C:msdosv6.22 (2 2)I say:Goodbye! I say:Goodbye!“I say:Goodbye! I say:Goodbye!“注意注意 a a与与“a a”的区别。的区别。25C语言程序设计教程10-Aug-24字字符符串串的的存存储储:C C语语言言规规定定在在存存储储字字符符串串常常量量时时,由由系系统统在在字符串的末尾自动加一个字符串的末尾自动加一个00作为字符串的结束标志。作为字符串的结束标志。注意:在源程序中书写字符串常量时,不必加结束字符注意:在源程序中书写字符串常量时,不必加结束字符00,否则画蛇添足。,否则画蛇添足。 如果有一个字符串为如果有

34、一个字符串为“CHINA”CHINA”,则它在内存中的实际存则它在内存中的实际存储如下所示:储如下所示: 所以最后一个字符所以最后一个字符00是系统自动加上的,它占用字是系统自动加上的,它占用字节而非字节内存空间。节而非字节内存空间。综上所述,字符常量综上所述,字符常量 AA与字符串常量与字符串常量 AA是两回事:是两回事:(1 1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2 2)长长度度不不同同:字字符符常常量量的的长长度度固固定定为为1 1,而而字字符符串串常常量量的的长长度度,可可以以是是0 0,也可以是某个整数

35、;,也可以是某个整数;(3 3)存存储储要要求求不不同同:字字符符常常量量存存储储的的是是字字符符的的ASCIIASCII码码值值,而而字字符符串串常常量,除了要存储有效的字符外,还要存储一个结束标志量,除了要存储有效的字符外,还要存储一个结束标志00CHINA026C语言程序设计教程10-Aug-24 C C语言允许整型、实型、字符型数据进行混合运算。语言允许整型、实型、字符型数据进行混合运算。 有有3 3种转换方式:自动转换、赋值转换和强制转换。种转换方式:自动转换、赋值转换和强制转换。 一、一、类型自动转换类型自动转换 如如果果一一个个运运算算符符两两侧侧的的操操作作数数的的数数据据类类

36、型型不不同同,则则系系统统按按“先先转转换换、后后运运算算”的的原原则则,首首先先将将数数据据自自动动转转换换成成同同一一类类型型,然后在同一类型数据间进行运算。转换规则如图所示。然后在同一类型数据间进行运算。转换规则如图所示。 注注意意:箭箭头头方方向向只只表表示示数数据据类类型型由由低低向向高高转转换换,不不要要理理解解为为intint型型先先转转换换成成unsignedunsigned型型,再再转转换换成成longlong型型,最最后后转转换换成成doubledouble型型第2章 C语言的基本数据类型与表达式2.3 2.3 数据类型转换数据类型转换 1 1)横向向左的箭头,表示必须)横

37、向向左的箭头,表示必须的转换。的转换。charchar和和short short 型必须型必须转换成转换成 intint 型,型,floatfloat型必须型必须转换成转换成doubledouble型。型。 2 2)纵向向上的箭头,表示不同)纵向向上的箭头,表示不同类型的转换方向。类型的转换方向。doublelongunsignedintfloatchar,short高高低低27C语言程序设计教程10-Aug-24 int x=2;float y=1.6;char c=A;int x=2;float y=1.6;char c=A; 则:则:c+x*y = c + x * yc+x*y = c

38、+ x * y 65(int)+ 2(int) * 1.6(double) 65(int)+ 2(int) * 1.6(double) = 68.2(double) = 68.2(double)二、 赋值转换赋值转换 在在赋值时将赋值符右边值的类型转换成与其左边变量类赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。型一致的类型。 有下列几种情况:有下列几种情况: (1) (1) 实型实型 整型(字符型):去掉小数部分;整型(字符型):去掉小数部分; 例如例如char c=68.5;printf(“%c”,c);第2章 C语言的基本数据类型与表达式28C语言程序设计教程10-Aug-

39、24(2) (2) 整型(字符型)整型(字符型) 实型:实型: 补足有效位;补足有效位;(3)(3)对对charchar、intint、shortshort、longlong、unsignedunsigned型数据:型数据: 赋值符右边数据(赋值符右边数据(a a位)位) 赋值符左边的变量(赋值符左边的变量(b b位)位) 若若 a=b a=b 原样照赋;原样照赋; ab ab 截断高截断高a-ba-b位,送低位,送低b b 位;位; 有符号数据有符号数据 有符号变量:符号扩展;有符号变量:符号扩展; 其他情况:高其他情况:高b-a b-a 位全补位全补0 0。 符号扩展:符号扩展: 符号位为

40、符号位为0 0,剩余的高位补,剩余的高位补0 0; 符号位为符号位为1 1,剩余的高位补,剩余的高位补1 1。aba(1级级) 算术运算符(算术运算符(2 级)级) (高于)(高于)单目运算符(单目运算符(1个优先级)个优先级) 移位运算符(移位运算符(1级)级) (共有共有10个优先级)个优先级)双目运算符双目运算符 关系运算符(关系运算符(2级)级)三目运算符(三目运算符(1个优先级)个优先级) 位逻辑运算符(位逻辑运算符(3级)级)赋值运算符(赋值运算符(1个优先级)个优先级) 逻辑运算符(逻辑运算符(2级)级)逗号运算符(逗号运算符(1个优先级)个优先级)图图3.5 运算符优先的简洁记

41、忆图运算符优先的简洁记忆图34C语言程序设计教程10-Aug-24 二二、 算术运算符和算术表达式算术运算符和算术表达式1.1.五种基本算术运算符五种基本算术运算符 + +、- -(减法(减法/ /取负)、取负)、* *、/ /、% %(求余数)(求余数)(1 1)关于除法运算)关于除法运算/ /C C语言规定:两个整数相除,其商为整数,小数部分被舍弃。语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,例如,5 / 2 = 25 / 2 = 2。 但但5.0 / 2 = 2.55.0 / 2 = 2.5; (2 2)关于求余数运算)关于求余数运算要求两侧的操作数均为整型数据,否则出错。

42、要求两侧的操作数均为整型数据,否则出错。 例如:例如: 5%35%3的值为的值为2 2; -5%3-5%3的值为的值为-2-2; 5%(-3)5%(-3)的值为的值为2 2; -5%(-3)-5%(-3)的值为的值为-2-2; 12.3%3 12.3%3 若若a a能被能被b b整除,则有:整除,则有:a%b=0 a%b=0 第2章 C语言的基本数据类型与表达式35C语言程序设计教程10-Aug-242.2.表达式和算术表达式表达式和算术表达式(1 1)表达式的概念:)表达式的概念: 用运算符和括号将运算对象(常量、用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式

43、子变量和函数等)连接起来的、符合语言语法规则的式子(2 2)算术表达式的概念:表达式中的运算符都是算术运算符。)算术表达式的概念:表达式中的运算符都是算术运算符。(3 3)优先级:()优先级:() * *、/ /、% +% +、- -(4 4)结合性:从左至右;)结合性:从左至右;(5 5)表达式的值:数值型)表达式的值:数值型( (intint、longlong、unsignedunsigned、double)double);例如:例如: 已知:已知: float a=2.0;float a=2.0; int b=6,c=3; int b=6,c=3; 求解:求解: a*b/c-1.5+a*

44、b/c-1.5+a a+fabs(-5)=+fabs(-5)=?第2章 C语言的基本数据类型与表达式36C语言程序设计教程10-Aug-24 double float long unsigned int char,short float a=2.0;float a=2.0; int b =6,c =3; int b =6,c =3; a*b/c -1.5 +a*b/c -1.5 +a a +fabs(-5) +fabs(-5)12.012.0/3/354.0 4.0 - 1.5- 1.52.5 2.5 + 97(int)+ 97(int)99.5 99.5 + 5+ 5104.5104.5(d

45、ouble)(double)第2章 C语言的基本数据类型与表达式37C语言程序设计教程10-Aug-243 3、自增与自减自增与自减运算符运算符: :自增运算使单个变量的值增,自减运自增运算使单个变量的值增,自减运算使单个变量的值减。算使单个变量的值减。用法与运算规则用法与运算规则(1)前置运算)前置运算:运算符放在变量之前:运算符放在变量之前: +i,-ii,-i。 先使变量的值增(或减),然后再以变化后的值参与其它先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减、后运算。运算,即先增减、后运算。(2)后置运算)后置运算运算符放在变量之后:运算符放在变量之后: i+,i-i+

46、,i-。 变量先参与其它运算,然后再使变量的值增(或减),即变量先参与其它运算,然后再使变量的值增(或减),即先运算、后增减。先运算、后增减。例如:例如: 等价于等价于 i=i+1;i=i+1;j=i;i+; j=i;i+; 所以所以i i的值为的值为4 4,j j的值为的值为3 3。i+;j=i; i+;j=i; 所以所以i i的值为的值为4 4,j j的值为的值为4 4。(1) i+; +i;(1) i+; +i;(2) i=3; j=i+; (2) i=3; j=i+; (3) i=3; j=+i;(3) i=3; j=+i;第2章 C语言的基本数据类型与表达式38C语言程序设计教程10

47、-Aug-24 结合性:自右至左。结合性:自右至左。 如:如: i = 2;i = 2; j = -i+; j = -i+; 等价于:等价于:j=-(i+);j=-(i+); 即:即: j=-i;i+; j=-i;i+; “+”与与”- -“是同优先级是同优先级 所以所以i i的值为的值为3 3,j j的值为的值为-2-2。第2章 C语言的基本数据类型与表达式 注意注意 “ “+”+”或或“-”-”自增与自减运算符的使用。自增与自减运算符的使用。 如:设如:设i=3i=3,k=(i+)+(i+)+(i+)k=(i+)+(i+)+(i+),k=k=? 如:设如:设i=3i=3,j=4j=4,k=

48、i+jk=i+j,k=k=?39C语言程序设计教程10-Aug-24案例案例2.4 自增、自减运算符的用法与运算规则示例。自增、自减运算符的用法与运算规则示例。/*程程序序功功能能:自自增增、自自减减运运算算符符的的用用法法与与运运算算规规则则示示例例*/main() int x=6, y; printf(x=%dn,x); /*输出输出x的初值的初值*/ y = +x; /*前置运算前置运算*/ printf(y=+x: x=%d,y=%dn,x,y); y = x-; /*后置运算后置运算*/ printf(y=x-: x=%d,y=%dn,x,y); 程序运行结果:程序运行结果:x=6y

49、=+x: x=7,y=7y=x-: x=6,y=740C语言程序设计教程10-Aug-24思思考考题题:如如果果将将案案例例“y=+x;”y=+x;”语语句句中中的的前前置置运运算算改改为为后后置置(y=x+;y=x+;),“y=x-;”“y=x-;”语语句句中中的的后后置置运运算算改改为为前置(前置(y=-x;y=-x;),),程序运行结果会如何?程序运行结果会如何?说明说明(1 1)自自增增、自自减减运运算算,常常用用于于循循环环语语句句中中,使使循循环环控控制制变变量量加加(或或减减),以以及及指指针针变变量量中中,使使指指针针指指向向下下(或上)一个地址。(或上)一个地址。(2 2)自

50、增、自减运算符,不能用于常量和表达式。)自增、自减运算符,不能用于常量和表达式。例如,例如,5+5+、-(-(a+b)a+b)等都是非法的。等都是非法的。(3 3)在在表表达达式式中中,连连续续使使同同一一变变量量进进行行自自增增或或自自减减运运算算时,很容易出错,所以最好避免这种用法。时,很容易出错,所以最好避免这种用法。41C语言程序设计教程10-Aug-24 1 1、赋值运算符赋值运算符 赋值符号赋值符号“=”=”就是赋值运算符,它的作用是将一个表达式的就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。值赋给一个变量。 赋值运算符的一般形式为:赋值运算符的一般形式为: 变量变量 =

51、 = 赋值表达式赋值表达式 优先级:优先级: ! ! 算术算术 关系关系 &和和| 赋值赋值 结合性:自右至左;结合性:自右至左;例如例如:(1) (1) x=(y=12)/4 yx=(y=12)/4 y值为值为1212,x x值为值为3 3,表达式的值为,表达式的值为3 3 (2) (2) x=y=12/4 x=y=12/4 y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3 (3) (3) x=(y=12/4) x=(y=12/4) y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3 (4) ( (4) (x=y)=12/4 x=y)=1

52、2/4 如果表达式值的类型,与被赋值变量的类型不一致,但都是如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。变量的数据类型,然后再赋值给变量。第2章 C语言的基本数据类型与表达式三、赋值运算符和赋值表达式42C语言程序设计教程10-Aug-242.2.复合赋值运算复合赋值运算 复复合合赋赋值值运运算算符符是是由由赋赋值值运运算算符符之之前前再再加加一一个个双双目目运运算算符符构构成的。成的。复合赋值运算的一般格式为:复合赋值运算的一般格式为:表达式表达式

53、1 1 op=op=表达式表达式2 2 它它等价于等价于:表达式表达式1 1 = = 表达式表达式1 1 opop (表达式表达式2 2)当当表表达达式式为为简简单单表表达达式式时时,表表达达式式外外的的一一对对圆圆括括号号才才可可缺缺省省,否则可能出错。否则可能出错。例如,例如,x += 3 x += 3 /* /* 等价于等价于x=x+3 */x=x+3 */ y *= x + 6 y *= x + 6/* /* 等价于等价于y=y*(x+6)y=y*(x+6),而不是而不是y=y*x+6 */y=y*x+6 */设设a=12a=12,计算表达式计算表达式a+=a-=a*12a+=a-=a

54、*12和和a+=a-=a*=12a+=a-=a*=12的值的值C C语言规定的语言规定的1010种复合赋值运算符如下:种复合赋值运算符如下:+=+=,-=-=,* *= =,/=/=,%=%=; /*/*复合算术运算符(复合算术运算符(5 5个)个)* */ /&=&=,=,|=|=,=;/*/*复合位运算符(复合位运算符(5 5个)个)* */ /43C语言程序设计教程10-Aug-243.3.赋值表达式赋值表达式由由赋赋值值运运算算符符或或复复合合赋赋值值运运算算符符,将将一一个个变变量量和和一一个个表达式连接起来的表达式,称为赋值表达式。表达式连接起来的表达式,称为赋值表达式。(1 1)

55、一般格式)一般格式 变量变量 (复合)赋值运算符(复合)赋值运算符 表达式表达式(2 2)赋值表达式的值)赋值表达式的值任任何何一一个个表表达达式式都都有有一一个个值值,赋赋值值表表达达式式也也不不例例外外。被赋值变量的值,就是赋值表达式的值被赋值变量的值,就是赋值表达式的值。例例如如,“a a = = 5”5”这这个个赋赋值值表表达达式式,变变量量a a的的值值“”就是它的值。就是它的值。注意注意: :复合运算符是一个运算符复合运算符是一个运算符, ,但功能上但功能上, ,是两个运是两个运算符功能的组合。算符功能的组合。44C语言程序设计教程10-Aug-24 1 1、逗号运算符:逗号运算符

56、: , 形式形式: : 逗号表达式逗号表达式1 1,逗号表达式,逗号表达式2 2,逗号表达式,逗号表达式n n 求解过程:自左至右,依次计算各表达式的值,求解过程:自左至右,依次计算各表达式的值,“表达式表达式n” n” 的值即为整个逗号表达式的值。的值即为整个逗号表达式的值。 例例如如,逗逗号号表表达达式式“( (a a = = 3 3 * * 5, 5, a a * * 4), 4), a a + + 5”5”的的值值=20=20:先先求求解解a a = = 3 3 * * 5 5,得得a=15a=15;再再求求a a * * 4=604=60;最最后后求求解解a + 5=20a + 5=

57、20,所以逗号表达式的值所以逗号表达式的值=20=20。 优先级:优先级: 最低;最低; 结合性:自左至右;结合性:自左至右; 表达式的值:最后一个表达式的值。表达式的值:最后一个表达式的值。第2章 C语言的基本数据类型与表达式四、其它运算符45C语言程序设计教程10-Aug-24例如:例如: a b y a b y 表达式表达式 y=a=4,b=5,a+b; 4 5 4 9y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=(a=4,b=5),a

58、+b; 4 5 5 9 y=a=(4,b=5),a+b; 5 5 5 10 y=a=(4,b=5),a+b; 5 5 5 10注意注意: : C C语言常用逗号作为分隔符语言常用逗号作为分隔符, , 例如例如: : int a=3,b=4,c=5;int a=3,b=4,c=5; printf(“%d,%d,%d”,(a,b,c); printf(“%d,%d,%d”,(a,b,c); printf(“%d,%d,%d”,a,(a,b,c),c); printf(“%d,%d,%d”,a,(a,b,c),c); 结果为结果为3 3,5 5,5 5第2章 C语言的基本数据类型与表达式46C语言程

59、序设计教程10-Aug-24 形式有两种:形式有两种: sizeof 变量名变量名 sizeof (类型名类型名) 结果为整型数。结果为整型数。 int aint a; float x float x; printf(“%d,%d”,sizeof a,sizeof x); printf(“%d,%d”,sizeof a,sizeof x); printf(“%d,%d”,sizeof(int),sizeof(float); printf(“%d,%d”,sizeof(int),sizeof(float); 以上两个以上两个printfprintf语句结果均为语句结果均为2 2,4 4。例如例如第2章 C语言的基本数据类型与表达式3 3、求求字节运算符:字节运算符: sizeof 作用:求得变量或某种数据类型所需的字节数。作用:求得变量或某种数据类型所需的字节数。47

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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