C语言第2章数据表示及数据运算_第1页
C语言第2章数据表示及数据运算_第2页
C语言第2章数据表示及数据运算_第3页
C语言第2章数据表示及数据运算_第4页
C语言第2章数据表示及数据运算_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第2 2章章 数据表示及数据运算数据表示及数据运算2.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性22.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型

2、数据2.4 2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算32.1 2.1 数据类型的一般概念数据类型的一般概念第第2 2章章 数据表示及数据运算数据表示及数据运算42.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4

3、2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算52.2 常量与变量在程序执行过程中,其值不能被改变的量称为常量常量。例:12、 0、 -7 为整型常量 3.14、 -2.8 为浮点型常量 a、 b、 c 为字符常量 第第2 2章章 数据表示及数据运算数据表示及数据运算62.2 常量与变量有时候

4、,为了使程序更加清晰和便于修改,用一个标识符代表常量。有时候,为了使程序更加清晰和便于修改,用一个标识符代表常量。称为称为符号常量符号常量符号常量符号常量在使用之前必须先定义,其一般形式为:#define 标识符标识符 常量常量其中#define是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。使用符号常量的好处如下: 含义清楚。 在需要改变一个常量时能做到“一改全改”。第第2 2章章 数据表示及数据运算数据表示及数据运算例2.1 符号常量的使用。程序代码如下:#define PI

5、3.14#include void main() float area, r; r = 10; area = PI* r * r; printf(area=%fn, area);例2.1 符号常量的使用。程序代码如下:#define PI 3.14#include void main() float area, r; r = 10; area = PI* r * r; printf(area=%fn, area);注意:符号常量注意:符号常量是是“傻瓜式傻瓜式”的的替换。替换。92.2 常量与变量在程序执行过程中,其值可变的量称为变量。一个变量必须有一个名字,在内存中占据一定的存储单元,在该存

6、储单元中存放变量的值。 第第2 2章章 数据表示及数据运算数据表示及数据运算102.2 常量与变量变量名是一种标识符标识符,所谓标识符就是程序中用来为符号常量、变所谓标识符就是程序中用来为符号常量、变量、函数、数组、文件等命名的有效字符序列量、函数、数组、文件等命名的有效字符序列。标识符的命名规则如下:标识符的命名规则:标识符的命名规则: 只能由字母、数字和下划线组成。只能由字母、数字和下划线组成。 第一个字符必须为字母或下划线。第一个字符必须为字母或下划线。 不能使用不能使用C语言中的关键字。语言中的关键字。 区分大小写字母,区分大小写字母,sum和和Sum是不同的标识符。是不同的标识符。第

7、第2 2章章 数据表示及数据运算数据表示及数据运算112.2 常量与变量变量则必须作强制定义,即“先定义,后使用先定义,后使用”。这样做的目的有以下几点:凡未被事先定义的,不作为变量名,这就能保证程序中的变量名使用得正确。一个变量被指定为某一确定的数据类型,在编译时就能为其分配相应的存储单元。一个变量被指定为某一确定的数据类型,便于在编译时据此检查所进行的运算是否合法。第第2 2章章 数据表示及数据运算数据表示及数据运算12至此,我们学习了两种数据分类方法:至此,我们学习了两种数据分类方法:第一种:按照数据类型分类:第一种:按照数据类型分类:第第2 2章章 数据表示及数据运算数据表示及数据运算

8、第二种,按照数据的值是否能够改变分类:常量和变量第二种,按照数据的值是否能够改变分类:常量和变量13假设只考虑基本数据类型,则可有以下情况:假设只考虑基本数据类型,则可有以下情况:整型常量、整型变量整型常量、整型变量浮点型常量、浮点型变量浮点型常量、浮点型变量字符型常量、字符型变量字符型常量、字符型变量第第2 2章章 数据表示及数据运算数据表示及数据运算142.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符

9、及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算15 2.3 2.3 整型数据整型数据第第2 2章章 数据表示及数据运算数据表示及数据运算整型变量的定义整型变量的定义C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。变量定义的一般形式为: 类型声明符类型声明符 变量名标识符变量名标识符1, 变量名标识符变量名标识符2, .;162.3 整型数据1整型变量的分类整型变量可分为基本型、短整型

10、、长整型和无符号型4种。 基本型类型声明符为intint,在内存中占2个字节。 短整型类型声明符为short int或short,所占字节和取值范围均与基本型相同。 长整型类型声明符为long intlong int或longlong,在内存中占4个字节。 无符号型类型声明符为unsignedunsigned,存储单元中全部二进位(bit)都用作存放数本身,而不包括符号。第第2 2章章 数据表示及数据运算数据表示及数据运算 C+标准规定:int占一个机器字长。在32位系统中int占32位,也就是4个字节,而在老式的16位系统中,int占16位,即2个字节。而C+标准中只限制规定short in

11、t不能超过int的长度,具体长度的可以由C+编译器的实现厂商自行决定。目前流行的32位C+编译器中,通常int占4字节,short int占2字节。其中short int可以简写为short。1. 类似地,C+标准只限制了long int不得小于int的长度,具体也没有作出限制。172.3 整型数据1整型变量的分类整型变量可分为基本型、短整型、长整型和无符号型4种。 基本型类型声明符为intint,在内存中占2个字节。 短整型类型声明符为short int或short,所占字节和取值范围均与基本型相同。 长整型类型声明符为long intlong int或longlong,在内存中占4个字节。

12、 无符号型类型声明符为unsignedunsigned,存储单元中全部二进位(bit)都用作存放数本身,而不包括符号。第第2 2章章 数据表示及数据运算数据表示及数据运算例如:int a, b, c; /* a、b、c为整型变量*/short d,e; /* d、e为短整型变量*/long m, n; /* m、n为长整型变量*/unsigned int p, q; /* p、q为无符号整型变量*/192.3 整型数据变量定义时应注意以下几点: 允许在一个类型声明符后定义多个相同类型的变量,各变量名之间用逗号间隔。类型声明符与变量名之间至少用一个空格间隔。 最后一个变量名之后必须以分号(;)结

13、束。 变量定义必须放在变量使用之前。 可在定义变量的同时给出变量的初值。其格式为:类型声明符类型声明符 变量名标识符变量名标识符1 = 初值初值1, 变量名标识符变量名标识符2 = 初值初值2, .;例:例:int a=1,b=2;第第2 2章章 数据表示及数据运算数据表示及数据运算 例2.2整型变量的定义与初始化。程序代码如下#include void main( ) int a = 3, b = 5; printf(a+b=%dn, a + b);变量在内存中的存储形式数据在内存中是以二进制补码形式存放的 整型数据的溢出一个int型变量的取值范围是-3276832767,超过这个范围则溢出

14、 整型数据在内存中的存放形式整型数据在内存中的存放形式 在内存中以二进制形式存放 int i; i = 10;10i在内存中的表示:示意图0 0 0 0 0 0 0 00 0 0 0 1 0 1 0在内存中的实际存放情况实际上,数值是以补码表示的正数的补码是本身负数的补码是绝对值的二进制变反加一考虑表示-10的示意图及在内存中的存放情况?整型变量的溢出整型变量的溢出 一个int型变量的最大允许值为32767,加1后如何?例2.3 整型数据的溢出#include main() int a,b; a=32767; b=a+1; printf(%d,%d,a,b);运行结果:32767,-32768

15、进一步 若a=-32768,b=a-1;则结果为-32768,327670 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1327671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-32768其原因在于: 以补码表示1. 有符号位补码至原码:正数的原码是本身负数的原码是符号位不变,其它位变反加一242.3.2 2.3.2 整型常量整型常量 整型常量就是整常数。在整型常量就是整常数。在C语言中,使用的语言中,使用的整常数有八进制、十六进制和十进整常数有八进制、十六进制和十进制制3种种,使用不同的前缀来相互区分。除了前缀外,使用不同的前缀来相互区分。除了前缀外,C语言中还

16、使用后缀来区分语言中还使用后缀来区分不同的整数。不同的整数。1八进制整常数八进制整常数八进制整常数必须以八进制整常数必须以0 0开头,即以开头,即以0作为八进制数的前缀。作为八进制数的前缀。2十六进制整常数十六进制整常数十六进制整常数的前缀为十六进制整常数的前缀为0X0X或或0 x0 x。3十进制整常数十进制整常数十进制整常数没有前缀,数码取值为十进制整常数没有前缀,数码取值为09。4整型常数的后缀整型常数的后缀长整型数是用后缀长整型数是用后缀“L”或或“l”来表示的。来表示的。5整型常数的类型整型常数的类型(见教材第(见教材第25页)页)第第2 2章章 数据表示及数据运算数据表示及数据运算2

17、52.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算262.4 浮点型数据1浮点型变量的分类按照数值的取值范围不同分为以下三种:1)单精度型:类型声明符为floatflo

18、at,在内存中占4个字节。2)双精度型:类型声明符为doubledouble,在内存中占8个字节。3)长双精度型:类型声明符为long double,在内存中占16个字节。2. 浮点型变量的定义浮点型变量声明的格式和书写规则与整型相同。例如: float x, y; /* x、y为单精度变量*/也可在声明变量为浮点型的同时,给变量赋初值。例如:double a = 0.2, b = 1.3, c = 5.1第第2 2章章 数据表示及数据运算数据表示及数据运算272.4 浮点型数据1浮点型常量的表示形式有两种形式:十进制数形式和指数形式。1) 十进制数形式由数码09和小数点组成。例如0.0、.2

19、5、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。2) 指数形式一般格式是“实数+e(或E)+整数”,记为a E n,其值为a10n。2浮点型常量的类型许多C编译系统将实型常量作为双精度来处理第第2 2章章 数据表示及数据运算数据表示及数据运算 实型变量分类所占字节数float: 占4字节,提供7位有效数字Double: 占8字节,提供1516位有效数字long double:占16字节,提供1819位有效数字(不常用)float a; a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111

20、.111*/ 实型数据在内存中的存放形式看一看实数3.14159在内存中存放的示意图(书中(书中P26第二段,必须明白清楚其意义)第二段,必须明白清楚其意义)+.3141591数符小数部分指数部分 例2.4 演示float和double的区别。程序代码如下:#include void main( ) float a; double b; a = 33333.333333; b = 33333.333333333; printf(a=%fnb=%fn, a, b); 输出结果:输出结果: a=3333.332031 b=3333.333333312.1 2.1 数据类型的一般概念数据类型的一般概

21、念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算32 2.5 字符型数据字符常量字符常量是用一对单引号括起来的单个字符,如A、a、X、?、$等都是字符常量。注意单引号是定界符,不是字符常量的一部分。C语言还允许用一种特

22、殊形式的字符常量,即转义字转义字符符。转义字符以反斜线“”开头,后跟一个或几个字符。第第2 2章章 数据表示及数据运算数据表示及数据运算332.5 字符型数据转义字符表示含义反斜杠字符“”单引号字符”双引号字符n换行,将当前位置移到下一行开头t水平制表,横向跳到下一个输出区r回车,将当前位置移到本行开头f换页,将当前位置移到下页开头b退格,将当前位置移到前一列ddd1到3位八进制数所代表的字符xhh1到2位十六进制数所代表的字符第第2 2章章 数据表示及数据运算数据表示及数据运算区分一下:650650 x65nn”n”n65x65352.5 字符型数据字符变量字符变量用来存放字符常量,即单个字

23、符。每个字符变量被分配一个字节的内每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。存空间,因此只能存放一个字符。字符变量的类型声明符为char,字符变量类型声明的格式如下:char a, b; /* 定义字符变量 a和b */a = x, b = y; /* 给字符变量a和b分别赋值x和y */字符数据在内存中以ASCII码存储,它的存储形式与整数的存储形式相类似,所以也可以把它们看成是整型量。所以也可以把它们看成是整型量。 注意:整型数据为整型数据为2个字节个字节字符数据为字符数据为1个字节个字节当整型数据按字符型量处理时,只有低当整型数据按字符型量处理时,只有低8位参与处理。位

24、参与处理。第第2 2章章 数据表示及数据运算数据表示及数据运算 例2.6 字符变量的使用。程序代码如下:#include void main() char a, b; a = 120; b = 121; printf(%c,%cn%d,%dn, a, b, a, b); 例2.6 字符变量的使用。程序代码如下:#include void main() char a, b; a = 120; b = 121; printf(%c,%cn%d,%dn, a, b, a, b); 输出结果:输出结果:x,y120,121 例例2.7 将小写字母转换成大写字母。程序代码如下:将小写字母转换成大写字母。

25、程序代码如下:#include void main() char a, b; a = x; b = y; a = a-32; /* 把小写字母转换成大写字母把小写字母转换成大写字母 */ b = b-32; printf(%c,%cn%d,%dn, a, b, a, b); /* 以字符型和整型输出以字符型和整型输出 */392.5.3 字符串常量字符串常量是由一对双引号括起来的字符序列。字符串常量是由一对双引号括起来的字符序列。如:”CHINA”、”C program”、”$12.5”等都是合法的字符串常量。思考:思考:不能把一个字符串赋值给一个字符变量。那不能把一个字符串赋值给一个字符变量

26、。那么,么,a和和“a”究竟有什么区别呢?究竟有什么区别呢?可以输出一个字符串,例如:printf(Hello world!);第第2 2章章 数据表示及数据运算数据表示及数据运算C语言规定,在每一个字符串的结尾加一个字符串结束标记,以便系统据此判断字符串是否结束。C语言规定以字符0作为字符串结束标记。0是一个ASCII码为0的字符,也就是空操作字符,即它不引起任何控制动作,也不是一个可显示的字符。如字符串“WORLD”在内存中的实际存放形式为:412.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据

27、浮点型数据2.5 2.5 字符型数据字符型数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算422.6 变量赋初值第第2 2章章 数据表示及数据运算数据表示及数据运算在C语言中允许在定义变量的同时初始化,如:int a=3;float f=3.21;如果对几个变量都赋予相同的初值(如1),应写成:int x=1,y=1,z=1;注意:不能写成int x=y

28、=z=1;但可以写成:int x, y, z;x=y=z=1;变量初始化是在程序运行时赋予初值的,相当一个变量初始化是在程序运行时赋予初值的,相当一个赋值语句赋值语句如:如:int a=1;int a=1;相当于:相当于: int a;int a; a=1; a=1;int a, b, c=5;int a, b, c=5;相当于:相当于:int a, b, c;int a, b, c; c=5; c=5;442.1 2.1 数据类型的一般概念数据类型的一般概念2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据浮点型数据2.5 2.5 字符型数据字符型

29、数据2.6 2.6 赋值运算符及变量赋初值赋值运算符及变量赋初值2.7 2.7 不同数据类型数据间的混合运算不同数据类型数据间的混合运算2.8 2.8 运算符和表达式运算符和表达式2.9 2.9 运算符的优先级和结合性运算符的优先级和结合性第第2 2章章 数据表示及数据运算数据表示及数据运算452.7 不同数据类型数据间的混合运算整型、实型(包括单精度和双精度)、字符型数据间可以混合运算混合运算。10+a+1.5-12.34*b转换的方法有两种,一是自动转换,二是强制转换。第第2 2章章 数据表示及数据运算数据表示及数据运算46自动类型转换自动类型转换 若参与运算的类型不同,则先转换成同一类型

30、,然后进行运算。 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型混合运算时,先把int型转成long型后再进行运算。 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式也要先转换成double型,再作运算。 char型和short型参与运算时,必须先转换成int型。 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入丢失的部分按四舍五入向前舍入。第第2 2章章 数据表示及数据运算数据表示及数据运算 图中纵向纵向向上的箭

31、头表示必定发生的转换,如字符型数据必先转成整型,单精度数据先转成双精度数据等。 图中横向横向的箭头表示当运算对象为不同的类型时转换的方向。 假设i为整型变量,f为单精度实型变量,d为双精度实型变量,e为长整型变量。则表达式10+a+i*f-d/e的运算次序如下:(1) 进行10+a的运算,先将a转换成整数97,运算结果为107。(2) 进行i*f的运算,先将i和f都转换成双精度型,运算结果为双精度型。(3) 整数107和i*f的积相加,先将整数107转换成双精度型(107.000000),运算结果为双精度型。(4) 进行d/e的运算,先将e转换成双精度型,运算结果为双精度型。(5) 将10+a

32、+i*f的结果与d/e的商相减,结果为双精度型。上述的类型转换是由系统自动进行的。 强制类型转换强制类型转换(类型声明符类型声明符) (表达式表达式)其功能是把表达式的运算结果强制转换成类型声明符所表示的类型。 例如:(float)a把a转换为实型,(int)(x+y)把x+y的结果转换为整型。? (int)(2.5+3.6)? (int)2.5+3.6 例例2.8 类型的强制转换。程序代码如下:#include void main() float f = 5.75; printf(int)f=%d,f=%fn, (int)f, f); 例例2.8 类型的强制转换。程序代码如下:#includ

33、e void main() float f = 5.75; printf(int)f=%d,f=%fn, (int)f, f); 思考:思考:强制转换强制转换后原变量的值是否变化?后原变量的值是否变化?例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例 int i; float f; double d; long l;53第第2 2章章 数

34、据表示及数据运算数据表示及数据运算C运运算算符符算术运算符算术运算符:(:(+ - + - * * / % + - / % + -)关系运算符:(关系运算符:( = != = !=)逻辑运算符:(!逻辑运算符:(! & |& |)位运算符位运算符 :(:( | & | &)赋值运算符赋值运算符:(:(= = 及其扩展)及其扩展)条件运算符:(条件运算符:(?:?:)逗号运算符:(逗号运算符:(, ,)指针运算符:(指针运算符:(* * & &)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(. -. -)下标运算符:(

35、下标运算符:()其它其它 :(:(( ) -( ) -)542.8 运算符和表达式第第2 2章章 数据表示及数据运算数据表示及数据运算1算术运算符55 例:运算 结果2+3 52-3 -1 2*3 62/3 02.0/3 0.6666662%3 22.0%3 非法第第2 2章章 数据表示及数据运算数据表示及数据运算56第第2 2章章 数据表示及数据运算数据表示及数据运算(1) (1) 减法运算符减法运算符“-”-”可作取负值运算符,这时为单目运算符。例如可作取负值运算符,这时为单目运算符。例如- -(x+y)(x+y)、-10-10等。等。(2) (2) 使用除法运算符使用除法运算符“/”/”

36、时,若参与运算的变量均为整数时,其结果时,若参与运算的变量均为整数时,其结果也为整数也为整数( (舍去小数舍去小数) );若除数或被除数中有一个为负数,则舍入的方向;若除数或被除数中有一个为负数,则舍入的方向是不固定的。例如:是不固定的。例如:-7/4-7/4,在有的机器上得到结果为,在有的机器上得到结果为-1-1,而有的机器上,而有的机器上得到结果得到结果-2-2。多数机器上采取。多数机器上采取“向零取整向零取整”原则,例如:原则,例如:7/4=17/4=1,- -7/4=-17/4=-1,取整后向零靠拢。,取整后向零靠拢。注意事项:注意事项:57第第2 2章章 数据表示及数据运算数据表示及

37、数据运算(3) (3) 使用求余运算符使用求余运算符( (模运算符模运算符)“%”)“%”时,要求参与运算的变量必须均时,要求参与运算的变量必须均为整型,其结果值为两数相除所得的余数。一般情况下,所得的余数与为整型,其结果值为两数相除所得的余数。一般情况下,所得的余数与被除数符号相同。例如:被除数符号相同。例如:7%4=37%4=3,10%5=010%5=0,-8%5=-3-8%5=-3,8%-5=38%-5=3。58第第2 2章章 数据表示及数据运算数据表示及数据运算2 2算术表达式算术表达式 用运算符、圆括号将运算对象连接起来的符合用运算符、圆括号将运算对象连接起来的符合C C语法规则的式

38、子语法规则的式子,称为,称为表达式表达式。 用算术运算符、圆括号将运算对象用算术运算符、圆括号将运算对象( (或称操作数或称操作数) )连接起来的符合连接起来的符合C C语法规则的式子,称为语法规则的式子,称为算术表达式算术表达式。其中运算对象可以是常量、变。其中运算对象可以是常量、变量、函数等。量、函数等。 例如:例如: a a* *b/c-1.5+ab/c-1.5+a59第第2 2章章 数据表示及数据运算数据表示及数据运算C C算术表达式的书写形式与数学中表达式的书写形式是有区别的,算术表达式的书写形式与数学中表达式的书写形式是有区别的,在使用时要注意以下几点:在使用时要注意以下几点:(1

39、) C(1) C表达式中的乘号不能省略。例如:表达式中的乘号不能省略。例如:数学式数学式b2-4acb2-4ac,相应的,相应的C C表达式应写成表达式应写成b b* *b-4b-4* *a a* *c c。(2) C(2) C表达式中只能使用系统允许的标识符。例如:表达式中只能使用系统允许的标识符。例如:数学式数学式rr2 2相应的相应的C C表达式应写成表达式应写成3.143.14* *r r* *r r。60第第2 2章章 数据表示及数据运算数据表示及数据运算(3) C(3) C表达式中的内容必须书写在同一行,不允许有分表达式中的内容必须书写在同一行,不允许有分子分母形式,必要时要利用圆

40、括号保证运算的顺序。例子分母形式,必要时要利用圆括号保证运算的顺序。例如:如:数学式相应的数学式相应的C C表达式应写表达式应写(a+b)/(c+d)(a+b)/(c+d)。(4) (4) C C表达式不允许使用方括号和花括号表达式不允许使用方括号和花括号,只能使用圆,只能使用圆括号帮助限定运算顺序。可以使用多层圆括号,但左右括号帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。次计算表达式的值。61第第2 2章章 数据表示及数据运算数据表示及数据运算3 3算术运算符的优先级和结合性算术

41、运算符的优先级和结合性C C语言规定了在表达式求值过程中各运算符的优先级和结合性。语言规定了在表达式求值过程中各运算符的优先级和结合性。(1) (1) 优先级优先级:是指当一个表达式中如果有多个运算符时,则计算是有先后次序:是指当一个表达式中如果有多个运算符时,则计算是有先后次序的,这种计算的先后次序称为运算符的优先级。的,这种计算的先后次序称为运算符的优先级。(2) (2) 结合性结合性:是指当一个运算对象两侧的运算符的优先级别相同时,进行运算:是指当一个运算对象两侧的运算符的优先级别相同时,进行运算的结合方向。按的结合方向。按“从右向左从右向左”的顺序运算,称为右结合性;按的顺序运算,称为

42、右结合性;按“从左向右从左向右”的的顺序运算,称为左结合性。表顺序运算,称为左结合性。表2.62.6中给出了算术运算符的优先级和结合性。中给出了算术运算符的优先级和结合性。62第第2 2章章 数据表示及数据运算数据表示及数据运算例例2.9 算术运算符算术运算符/和和%举例。程序代码如下:举例。程序代码如下:#include void main() int x,y; x=10; y=3; printf(%dn,x/y); printf(%dn,x%y); x=1; y=2; printf(%dn,x/y); printf(%dn,x%y);自增、自减运算符自增、自减运算符 自增、自减运算符可以用

43、在运算量之前自增、自减运算符可以用在运算量之前( (如如+i+i、-i)-i),称为,称为前置前置运算;自增、自减运算;自增、自减运算符可以用在运算量之后运算符可以用在运算量之后( (如如+i+i、-i)-i),称为,称为后置后置运算。运算。 简单规则(以简单规则(以+为例):为例): 前置前置先自加,后引用先自加,后引用 后置后置先引用,后自加先引用,后自加 int i=3,j; int i=3,j;int i=3,j; int i=3,j; j=+i; j=i+; j=+i; j=i+;例2.10 以下程序的输出结果是( )。#includevoid main () int i=010,j

44、=10; printf(%d ,+i); printf(%dn,j- -); A)11 10 B)9 10 C)010 9 D)10 9赋值运算符和赋值表达式赋值运算符和赋值表达式 1赋值运算赋值运算 赋值符号“=”就是赋值运算符,由赋值运算符组成的表达式称为赋值表达式。其一般形式为: 变量名变量名 = 表达式表达式 赋值的含义是指将赋值运算符右边的表达式的值存放存放到以左边变量名为标识的存储单元中。 说明:(1) 赋值运算符的左边必须是变量,右边的表达式可以是常量、变量或表达式。例如,下面都是合法的赋值表达式: x = 10 y = x+10 y = func()(2) 赋值符号“=”不同于

45、数学中使用的等号,它没有相等的含义。例如x=x+1;的含义是取出变量x中的值加1后,再存入变量x中去。(3) 在一个赋值表达式中,可以出现多个赋值运算符,结合性是自右至左的。例如,下面是合法的赋值表达式: x = y = z = 0 /* 相当于x = (y = (z = 0)*/ a = b = 3 + 5 /* 相当于a = (b = 3 + 5) */(4) 进行赋值运算时,当赋值运算符两边的数据类型不同时,将由系统自动进行类型转换。 如: int i; float f; i=3.14; /* 等价于i=3,截取整数部分3 ,不四舍五入*/ f=3; /* 等价于f=3.0,填充小数部分

46、.0 */复合赋值运算符复合赋值运算符 为了提高编译生成的可执行代码的执行效率,C语言规定可以在赋值运算符“=”之前加上其他运算符,以构成复合赋值运算符。 其一般形式为: 变量变量 双目运算符双目运算符 = 表达式表达式 等价于:变量 = 变量 双目运算符 表达式; 例如: n += 1 /* 等价于n = n + 1 */ x *= y+1 /* 等价于x = x * (y+1)*/ /*+的优先级高于=/( (这样写法与这样写法与“逆波兰式逆波兰式”一致,有利于编译,能产生质量较高一致,有利于编译,能产生质量较高的目标代码。学过编译原理后对此较容易理解。的目标代码。学过编译原理后对此较容易理解。) )赋值表达式赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为: 变量变量 = 表达式表达式赋值表达式的求解过程如下: (

温馨提示

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

评论

0/150

提交评论