第2章基本数据类型和表达式_第1页
第2章基本数据类型和表达式_第2页
第2章基本数据类型和表达式_第3页
第2章基本数据类型和表达式_第4页
第2章基本数据类型和表达式_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、1主讲主讲: : 计算机学院计算机学院 朱立华朱立华第第 2 2章章 基本数据类型和表达式基本数据类型和表达式 2.1 C 2.1 C语言的基本语法单位语言的基本语法单位 2.2 2.2 数据和据类型数据和据类型 2.3 2.3 基本数据类型基本数据类型 2.4 2.4 运算符和表达式运算符和表达式1. 1. 基本符号基本符号按照按照C99C99的规定,的规定,C C语言的基本符号集包括:语言的基本符号集包括:(1) 26(1) 26个大写字母个大写字母(2) 26(2) 26个小写字母个小写字母(3) 10(3) 10个数字字符个数字字符(4) 29(4) 29个图形字符:个图形字符:! #

2、 % & ( ) ! # % & ( ) * * + , - . / : ; ? + , - . / : ; ? _ | _ | 值得注意的是上面符号均是半角符号,非全角符号,编码时需留值得注意的是上面符号均是半角符号,非全角符号,编码时需留意输入法的当前状态意输入法的当前状态22.1 C语言的基本语法单位 与程序控制结构有关的:与程序控制结构有关的: do while for if else switch case do while for if else switch case default goto continue break return default goto

3、continue break return32. 2. 关键字关键字 关键字是程序设计语言保留下来并被赋予特定语法关键字是程序设计语言保留下来并被赋予特定语法含义的单词或单词缩写,用来说明某一固定含义的语法含义的单词或单词缩写,用来说明某一固定含义的语法概念,程序中只能使用关键字的规定作用概念,程序中只能使用关键字的规定作用。 ( (类似于自类似于自然语言中具有特定含义的动、名词然语言中具有特定含义的动、名词) )C99 C99 中的中的3737个关键字,常用的有:个关键字,常用的有: 与数据类型有关的:与数据类型有关的: char int float double signed unsign

4、ed char int float double signed unsigned short long void struct union typedef short long void struct union typedef enum sizeof enum sizeof 与存储类别有关的:与存储类别有关的: auto extern register staticauto extern register static43. 3. 标识符标识符 就是用来标识变量名、符号常量名、函数名、类就是用来标识变量名、符号常量名、函数名、类型名、文件名等的有效字符序列。型名、文件名等的有效字符序列。(

5、(类似于自然语言中类似于自然语言中各种事物的名字各种事物的名字) )C C语言规定:语言规定:标识符只能由字母、数字和下划线三种字标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。符组成,且第一个字符必须为字母或下划线。例如:例如:合法标识符合法标识符:_22A:_22A,lea_1lea_1,avg3avg3,dayday,ABCde43xyw8ABCde43xyw8不合法标识符:不合法标识符:M.J.YORKM.J.YORK,$_238$_238,#xy#xy,a a* *b b,8Tea8Tea 注意:注意:在在C C语言中,大小写字母不等效。因此,语言中,大小

6、写字母不等效。因此,a a和和A A,I I和和i i,SumSum和和sumsum,分别是两个不同的标识符,分别是两个不同的标识符52.2 C语言的基本语法单位1. 1. 常量与符号常量常量与符号常量 常量是在程序运行过程中其值不能被改变的量。例如,常量是在程序运行过程中其值不能被改变的量。例如,100100、0 0、-13-13为整型常量,为整型常量,3.143.14、-0.5-0.5、3.8e23.8e2为实型常量,为实型常量,AA、33为字符常量。为字符常量。 为了增加程序的可读性,程序中经常用一个标识符来代表一为了增加程序的可读性,程序中经常用一个标识符来代表一个常量,即给常量个常量

7、,即给常量命名,命名,其语法格式如下:其语法格式如下: #define #define 标识符标识符 常量常量62.3 基本数据类型程序如下:程序如下: #include #include #define PI 3.14 #define PI 3.14 /宏定义,符号常量宏定义,符号常量PIPI代表实数代表实数3.143.14 int main()int main() double r, perimter; double r, perimter; r=10.0;r=10.0; / /实型常量实型常量10.010.0 perimter=2perimter=2* *PIPI* *r; r; /使用

8、符号常量使用符号常量 printf(perimter=%fn,perimter);printf(perimter=%fn,perimter); return 0; return 0; 例例2-12-1:阅读程序。程序功能是计算半径为阅读程序。程序功能是计算半径为1010的圆的周长。的圆的周长。2. 2. 变量变量 变量是程序运行过程中其值可以改变的量。变量是程序运行过程中其值可以改变的量。C C语言规定,程语言规定,程序中使用变量时,必须序中使用变量时,必须“先定义,再赋值,后使用先定义,再赋值,后使用”。 变量定义是指在程序中确定变量名和数据类型。程序编译时变量定义是指在程序中确定变量名和数

9、据类型。程序编译时根据数据类型为变量分配不同大小的存储单元。变量定义语句根据数据类型为变量分配不同大小的存储单元。变量定义语句一般位于函数体的声明部分,其语法形式如下:一般位于函数体的声明部分,其语法形式如下: 数据类型关键字数据类型关键字 变量名变量名1, 1, 变量名变量名2, , 2, , 变量名变量名n;n;8例如:例如:int num, count, i; /int num, count, i; /定义三个定义三个intint类型变量类型变量float radius, area; /float radius, area; /定义两个定义两个floatfloat类型变量类型变量char

10、 ch; /char ch; /定义一个定义一个charchar类型变量类型变量为了给变量设定一个初始值,可以采用如下形式:为了给变量设定一个初始值,可以采用如下形式:int num=100, count=0, i=0;int num=100, count=0, i=0;float radius=0, area=0;float radius=0, area=0;char ch= A;char ch= A;1. 1. 整型整型CC语言中最常用最基本的类型。语言中最常用最基本的类型。根据整型数据所占内存空间大小分为:根据整型数据所占内存空间大小分为: shortshort 、 intint 、lo

11、nglong根据二进制数最高位的意义分为:根据二进制数最高位的意义分为:signedsigned、unsignedunsigned不同的整数类型表示数值的范围不同,如下表所示不同的整数类型表示数值的范围不同,如下表所示:类型名称类型名称类型关键字类型关键字字字节节数数位数位数数值范围数值范围完整写法完整写法省略写法省略写法有有符符号号短整型短整型short intshort216-215215-1基本整型基本整型int 216-215215-1432-231231-1长整型长整型long intlong432-231231-1无无符符号号短整型短整型unsigned short intu n

12、s i g n e d short2160216-1基本整型基本整型unsigned intunsigned2160216-14320232-1长整型长整型unsigned long intu n s i g n e d long4320232-1如果程序在计算过程中,数值超出类型表示的数值范围,会产如果程序在计算过程中,数值超出类型表示的数值范围,会产生溢出错误,得到错误结果;另一方面,一味用占空间大的整生溢出错误,得到错误结果;另一方面,一味用占空间大的整型变量,变量数多时,空间浪费问题需要重视。型变量,变量数多时,空间浪费问题需要重视。整型常量整型常量 在在C C语言源程序中,可以用十进

13、制、八进制、十六进制这三种制语言源程序中,可以用十进制、八进制、十六进制这三种制式的数来表示各种类型的整型字面值常量式的数来表示各种类型的整型字面值常量 形式:形式: 例:十进制整数:例:十进制整数:1212、-91-91、-12L-12L、93U93U、123Lu123Lu、902LU902LU 八进制整数:八进制整数: 012012、-071-071、-016L-016L、072U072U、 016LU016LU、072lu072lu、 十六进制整数:十六进制整数: 0XA20XA2、-0X9C3-0X9C3、-0X16L-0X16L、0 x1AU0 x1AU、0X2fLu0X2fLu N

14、 N进制数转为十进制数的方法:每一位的位值乘以位权再求和进制数转为十进制数的方法:每一位的位值乘以位权再求和 十进制数转为十进制数转为N N进制数的方法:除以进制数的方法:除以N N取余,本次商作为下一次被取余,本次商作为下一次被除数,再除以除数,再除以N N取余,直到被除数为取余,直到被除数为0 0,所求余数按相反顺序输出,所求余数按相反顺序输出 例:例:072=7072=7* *8+2=58 8+2=58 117 7正号正号+可以缺省,负可以缺省,负号号-必须要有必须要有符号位符号位制式前缀制式前缀该进制数字该进制数字( (字母字母) )序列序列后缀后缀十进制数无前缀十进制数无前缀八进制数

15、有前缀八进制数有前缀0十六进制数有前缀十六进制数有前缀0 x(0X)十进制数字:十进制数字:09八进制数字:八进制数字:07十六进制数字加字母:十六进制数字加字母:09、AF(或或af)长整型后缀长整型后缀L(或或l)无符号数后缀无符号数后缀U(或或u)所以:所以:58=07258=07258588 87 70 02 28 8整型变量整型变量 变量定义实质上是为数据创建变量空间,需要指明类型和空间的变量定义实质上是为数据创建变量空间,需要指明类型和空间的名称即变量名。名称即变量名。C C语言通过定义语句来完成这项工作。语言通过定义语句来完成这项工作。 例:例: / /定义三个定义三个intin

16、t类型的整型变量,并初始化类型的整型变量,并初始化c c为为1010 int a, b, c=10; int a, b, c=10; / /定义一个定义一个longlong类型的整型变量类型的整型变量 long len; long len; / /定义一个无符号的定义一个无符号的shortshort类型的整型变量类型的整型变量 unsigned short x; unsigned short x; 12整型数据的存储格式整型数据的存储格式 所有数据在计算机中均以二进制数的形式存在于内存中所有数据在计算机中均以二进制数的形式存在于内存中 整数的二进制数有整数的二进制数有3 3种编码方式:原码、反

17、码、补码,为了将减种编码方式:原码、反码、补码,为了将减法统一到加法运算中,法统一到加法运算中,C C语言中有符号整数采用了补码。语言中有符号整数采用了补码。 正数:原码、反码、补码形式统一,最高位为正数:原码、反码、补码形式统一,最高位为0 0表示是正数,余表示是正数,余下的二进制码是其等效二进制表示下的二进制码是其等效二进制表示 例:例:shortshort型常量型常量9797转换为二进制数为:转换为二进制数为:11000011100001,则其原码、反,则其原码、反码、补码为:码、补码为: 负数的原码:最高位为负数的原码:最高位为1 1,其余位与其相反数相同,其余位与其相反数相同 负数的

18、反码:最高位为负数的反码:最高位为1 1,其余位是其原码各位取反,其余位是其原码各位取反 负数的补码:最高位为负数的补码:最高位为1 1,其余位是其反码最低位加,其余位是其反码最低位加1 113-97-97的原码的原码10000000 01100001-97-97的反码的反码11111111 10011110-97-97的补码的补码00000000 011000010的原码有两种形式:的原码有两种形式:00000000 0000000010000000 000000000的反码有两种形式:的反码有两种形式:00000000 0000000011111111 111111110的补码只有一种形式

19、:的补码只有一种形式:00000000 00000000 同一个二进制数码序列,当表示的整数是有符号数时,最高位代同一个二进制数码序列,当表示的整数是有符号数时,最高位代表正负;当表示的整数是无符号数时,默认为正数,无符号位,表正负;当表示的整数是无符号数时,默认为正数,无符号位,最高位也是数值位。最高位也是数值位。 例:例:10000000 0000000010000000 0000000014当表示无符号数时,此位代表数值本身,即当表示无符号数时,此位代表数值本身,即215=32768当表示有符号数时,此位代表负数。其绝对值为后面当表示有符号数时,此位代表负数。其绝对值为后面各位取反再加各

20、位取反再加1 1,得到:,得到:10000000 00000000,即即215=32768,因此该数的值为:因此该数的值为:-32768整型数据的存储格式整型数据的存储格式 例例2-22-2:阅读程序:阅读程序#include #include int main() int main() int n1=4294967295; int n1=4294967295; unsigned n2=4294967295; unsigned n2=4294967295; int m=2147483647; int m=2147483647; printf( printf(作为有符号作为有符号intint类型

21、输出:类型输出:n1=%d,n2=%dn, n1,n2);n1=%d,n2=%dn, n1,n2); printf( printf(作为无符号作为无符号intint类型输出:类型输出:n1=%u,n2=%un, n1,n2);n1=%u,n2=%un, n1,n2); printf(m =%dn,m,m); printf(m =%dn,m,m); m=m+1; m=m+1; printf(m+1=%dn,m,m); printf(m+1=%dn,m,m); return 0; return 0; 作为有符号作为有符号int类型输出:类型输出:n1=-1,n2=-1作为无符号作为无符号int类型

22、输出:类型输出:n1=4294967295,n2=4294967295m =2147483647m+1=-21474836482.2.实型数据。也称浮点型,是实型数据。也称浮点型,是C C语言中常用的基本类型。语言中常用的基本类型。根据实型数据精度以及所占字节数的不同,划分为单精度浮点型、根据实型数据精度以及所占字节数的不同,划分为单精度浮点型、双精度浮点型和长精度浮点型。双精度浮点型和长精度浮点型。C99C99规定的实型数据类型规定的实型数据类型,如下表所示:,如下表所示:类型名称类型名称类型关键字类型关键字字节字节有效数字有效数字数值范围(绝对值)数值范围(绝对值)单精度单精度floatf

23、loat4 467670, 1.20, 1.21010-38-38 3.4 3.410103838双精度双精度doubledouble8 8151615160, 2.30, 2.31010-308-308 1.7 1.71010308308长双精度长双精度long doublelong double1616171817180, 3.40, 3.41010-4932-4932 3.4 3.4101049324932十进制整数或小数形式的实数十进制整数或小数形式的实数E(E(或或e)e) 十进制整数十进制整数后缀后缀实型常量实型常量 在在C C语言源程序中,只能用十进制实数来表示实型字面值常量语言

24、源程序中,只能用十进制实数来表示实型字面值常量 具体有两种形式:具体有两种形式: (1 1)小数形式的实数,形式:)小数形式的实数,形式: (2 2)指数形式的实数,形式:)指数形式的实数,形式: 例:合法的实数:例:合法的实数:0.00.0、.25.25、6.6.、0.230.23、-23.41 -23.41 、314.159F 314.159F -123e3 -123e3、.123e6.123e6、123.e-3123.e-3、3.14159E2L 3.14159E2L 非法的实数:非法的实数:1,23.41,23.4、-12-12、23.4D23.4D、E90E90、 12E4.512E

25、4.5、1E4001E400 17正号正号+可以缺省,负可以缺省,负号号-必须要有必须要有符号位符号位0909数字序列数字序列小数点小数点后缀后缀十进制整数,可以缺十进制整数,可以缺省,但是小数点左右省,但是小数点左右两边不能同时缺省两边不能同时缺省float型后缀型后缀F(或或f)Double型无后缀型无后缀long double型后缀型后缀L(或或l)0909数字序列数字序列必须有,不可缺省必须有,不可缺省十进制整数,可以缺十进制整数,可以缺省,但是小数点左右省,但是小数点左右两边不能同时缺省两边不能同时缺省尾数部分,不可缺省尾数部分,不可缺省必须有,不可缺省必须有,不可缺省指数部分,不可

26、缺省,注意指数部分,不可缺省,注意范围,只能是整数,表示乘范围,只能是整数,表示乘以以10的多少次方的多少次方float型后缀型后缀F(或或f)Double型无后缀型无后缀long double型后缀型后缀L(或或l)实型变量实型变量实数类型的关键字为:实数类型的关键字为:floatfloat、doubledouble、long doublelong double,定义字,定义字符变量的格式:符变量的格式:实数类型关键字实数类型关键字 实型变量名实型变量名1 1 ,字符变量名,字符变量名2 2, ; 例如:例如: float x, y; / float x, y; /定义两个定义两个float

27、float类型的实型变量类型的实型变量 double area; / double area; /定义一个定义一个doubledouble类型的实型变量类型的实型变量18实型数据的存储格式实型数据的存储格式 实型数据二进制数码序列包含有两个信息实型数据二进制数码序列包含有两个信息实数的尾数、指数,实数的尾数、指数,也就是说,尾数和指数都需要占用一定的存储空间。不同的实型也就是说,尾数和指数都需要占用一定的存储空间。不同的实型所占存储空间大小不同,分配给这两部分的比例也不一样,于是所占存储空间大小不同,分配给这两部分的比例也不一样,于是有了精度与范围上的差别。(有了精度与范围上的差别。(思考:整

28、型数据没有精度问题思考:整型数据没有精度问题) 实型数在内存的存储格式示意(忽略每一部分具体二进制位数)实型数在内存的存储格式示意(忽略每一部分具体二进制位数) 例:例:-111.1101B -111.1101B 在内存中的存储形式,先转化成:在内存中的存储形式,先转化成: -0.1111101B-0.1111101B2 211B11B( (保证尾数的小数点后第一位非保证尾数的小数点后第一位非0)0)阶符阶符阶码的数值阶码的数值尾符尾符尾数的数值尾数的数值阶码(指数)阶码(指数)尾数尾数0 011111 111111011111101阶码(指数)阶码(指数)尾数尾数例例2-32-3:阅读程序:

29、阅读程序 #include #include int main() int main() float f = 12345.67899; float f = 12345.67899; double d = 12345.67899; double d = 12345.67899; printf(f=%fn, f); printf(f=%fn, f); printf(d=%fn, d); printf(d=%fn, d); return 0; return 0; f=12345.678711d=12345.6789903.3.字符型数据字符型数据C C语言中采用语言中采用ASCIIASCII字符集中

30、的字符表示字符型字面值常量,每字符集中的字符表示字符型字面值常量,每个字符对应一个唯一的整数编码,占个字符对应一个唯一的整数编码,占1 1字节。字节。字符数据在程序中是采用编码形式进行存储和表示的,目前大字符数据在程序中是采用编码形式进行存储和表示的,目前大多数系统采用的是多数系统采用的是ASCIIASCII码,其基本字符集包括了码,其基本字符集包括了127127个字符。个字符。详细的字符及其编码对照见附录详细的字符及其编码对照见附录A A。字符常量字符常量在在C C语言源程序中,字符字面值常量需要用一对单引号作为定语言源程序中,字符字面值常量需要用一对单引号作为定界符将字符值括起,有两种表示

31、方法:界符将字符值括起,有两种表示方法:(1 1)用单引号括起的一个字符,例)用单引号括起的一个字符,例如:如:AA、99、%。(2 2)用单引号括起的以反斜杠开头的转义字符,例)用单引号括起的以反斜杠开头的转义字符,例如:如:nn、aa、 tt、 、 、”两种通用的转义字符表示:两种通用的转义字符表示:(1 1)dddddd:1 1到到3 3位八进制数所代表的字符位八进制数所代表的字符 (2 2)xhhxhh:1 1到到2 2位十六进制数所代表的字符位十六进制数所代表的字符 例如字符例如字符A A常量就有常量就有3 3种等效的表示:种等效的表示:AA、101101和和x41x41 例如换行符

32、有例如换行符有3 3种等效的表示:种等效的表示:nn、1212和和xAxA这种表示通常用于这种表示通常用于可见字符可见字符 这种表示通常用于这种表示通常用于控制字符控制字符。控制字符不可直接显示,而控制字符不可直接显示,而是起特定的控制作用是起特定的控制作用 可以用来表示任何字符,实可以用来表示任何字符,实际上是用该字符际上是用该字符ASCIIASCII码码的八的八进制和十六进制数来表示进制和十六进制数来表示 常用的转义字符常用的转义字符23表示形式表示形式含义说明含义说明ASCIIASCII码码00空字符空字符0 0aa响铃响铃7 7bb退格,当前输出位置回到前一位退格,当前输出位置回到前一

33、位8 8tt水平制表,当前输出位置跳到下一个制表位水平制表,当前输出位置跳到下一个制表位9 9nn换行,当前输出位置跳到下一行的开始位置换行,当前输出位置跳到下一行的开始位置1010vv垂直制表,当前输出位置跳到下一个垂直制表,当前输出位置跳到下一个HomeHome位置位置1111ff换页,当前输出位置跳到下一页的开始位置换页,当前输出位置跳到下一页的开始位置1212rr回车,当前输出位置跳到当前行的开始位置回车,当前输出位置跳到当前行的开始位置1313双引号双引号3434单引号单引号3939反斜线(反斜线( )字符)字符9292例例2-42-4:阅读程序:阅读程序 #include #inc

34、lude int main() int main() printf(Welcome to C Language!n); printf(Welcome to C Language!n); printf(Ittisnt an easy job.bx20); printf(Ittisnt an easy job.bx20); printf(to learn C.n); printf(to learn C.n); return 0; return 0; Welcome to C Language!It isnt an easy job to learn C.字符变量字符变量字符类型的关键字为:字符类型

35、的关键字为:charchar,定义字符变量的格式:,定义字符变量的格式:char char 字符变量名字符变量名1 1 ,字符变量名,字符变量名2 2, ;例如:例如: char c1, c2; / char c1, c2; /定义两个定义两个charchar类型变量类型变量c1c1和和c2c2 char digit=9; / char digit=9; /定义定义charchar类型变量类型变量digitdigit,并初始化值,并初始化值为字符为字符9925字符型数据的存储格式字符型数据的存储格式128128个标准字符和数值个标准字符和数值01270127一一 一对应,这种对应使字符型数一对

36、应,这种对应使字符型数据在内存中以据在内存中以1 1字节的整数二进制形式存储字节的整数二进制形式存储 因此在因此在C C语言中,字符型数据可以当作整型数据使用,而语言中,字符型数据可以当作整型数据使用,而01270127之间的整数也可以当作字符数据使用之间的整数也可以当作字符数据使用需要熟记的几个字符的需要熟记的几个字符的ASCIIASCII码:码:A- 65,A- 65,其他的大写字母字符依序增加,例:其他的大写字母字符依序增加,例:E-69E-69a- 97,a- 97,其他的小写字母字符依序增加,例:其他的小写字母字符依序增加,例:f-102f-1020-48,0-48,其他的数字字符依

37、序增加,例:其他的数字字符依序增加,例:7-557-55 -32, -32,空格字符的空格字符的ASCIIASCII码为码为3232熟练掌握以下两组转换关系:熟练掌握以下两组转换关系:对应大小写字母字符的转换:小写字母对应大小写字母字符的转换:小写字母-32=-32=大写字母大写字母对应数字字符与整数数字的转换:数字字符对应数字字符与整数数字的转换:数字字符-48=-48=整数数字整数数字26例:例:B B+32=+32=b bd d-32=-32=D D例:例:8 8-48=8-48=8或或8 8- -0 0=8;=8;8+48=8+48=8 8 或或 8+8+0 0= = 8 8例例2-5

38、2-5:阅读程序:阅读程序 #include #include int main() int main() char c=A; char c=A; int n=65; int n=65; printf(c=%c, n=%cn,c,n); printf(c=%c, n=%cn,c,n); printf(c=%d, n=%dn,c,n); printf(c=%d, n=%dn,c,n); c=c+32; / c=c+32; /计算计算c c对应的小写字母的对应的小写字母的ASCIIASCII码码 printf(c as char=%c,c as int=%dn,c,c);printf(c as c

39、har=%c,c as int=%dn,c,c); return 0; return 0; c=A, n=Ac=65, n=65c as char=a,c as int=97C C语言中的运算符语言中的运算符非常丰富非常丰富,主要包括:,主要包括:算术运算符:算术运算符:+ +、- -、* *、/ /、% %、+、-关系运算符:关系运算符: 、=、 、=、=、!=!=逻辑运算符:逻辑运算符:! !、&、|位运算符:位运算符:、 、 、& &、| |赋值运算符:赋值运算符:= =、复合赋值运算符、复合赋值运算符条件运算符:条件运算符:?:?:逗号运算符:逗号运算符:, ,

40、指针运算符:指针运算符:& &、* *求字节数运算符:求字节数运算符:sizeofsizeof强制类型转换运算符:强制类型转换运算符:( (类型关键字类型关键字) )分量运算符:分量运算符:-、. .数组下标运算符:数组下标运算符:其他运算符:括号其他运算符:括号()()、函数调用等、函数调用等学习运算符不需要死记硬背,伴随各章节的学习逐个掌握即可学习运算符不需要死记硬背,伴随各章节的学习逐个掌握即可2.4 运算符和表达式使用运算符时,需要考虑运算符的以下特征:使用运算符时,需要考虑运算符的以下特征:(1) (1) 运算符连接的运算对象的个数运算符连接的运算对象的个数 如果一个

41、运算符只能对一个运算对象进行运算,则称为单如果一个运算符只能对一个运算对象进行运算,则称为单目运算符。依次类推,可以连接两个运算对象的称为双目目运算符。依次类推,可以连接两个运算对象的称为双目运算符,连接三个运算对象的称为三目运算符。运算符,连接三个运算对象的称为三目运算符。(2) (2) 运算符的优先级运算符的优先级 当一个表达式中同时出现多个运算符时,优先级决定了运当一个表达式中同时出现多个运算符时,优先级决定了运算的先后次序。例如大家都熟知的算术运算算的先后次序。例如大家都熟知的算术运算“先乘除,后先乘除,后加减加减”的优先级规定。的优先级规定。C C语言对其种类繁多的运算符共规语言对其

42、种类繁多的运算符共规定了定了1515个级别的优先级。个级别的优先级。(3) (3) 运算符的结合性运算符的结合性 当多个具有相同优先级的运算符连续出现在表达式中时,当多个具有相同优先级的运算符连续出现在表达式中时,运算符的结合性规定了运算的先后次序。结合性分为运算符的结合性规定了运算的先后次序。结合性分为“左左结合结合”和和“右结合右结合”两种,左结合是指优先级相同的运算两种,左结合是指优先级相同的运算符按从左到右的顺序运算,右结合是从右到左运算。符按从左到右的顺序运算,右结合是从右到左运算。1.1.基本算术运算符。基本算术运算符。C C语言提供语言提供5 5个基本算术运算符和两个单目的正、负

43、运算符个基本算术运算符和两个单目的正、负运算符运算符运算符运算说明运算说明结合性结合性优先级优先级表达式示例表达式示例+ +正号,结果是运算数本身正号,结果是运算数本身右结合右结合1414+a+a、+12.5+12.5- -负号,结果是运算数的相反数负号,结果是运算数的相反数1414-a-a、-3-3* *乘乘左结合左结合1313a a* *2 2/ /除除1313a/2a/2% %模,结果是两个运算数相除的模,结果是两个运算数相除的余数余数1313a%2a%2+ +加加1212a+2a+2- -减减1212a-2a-22.2.自增运算符和自减运算符。自增运算符和自减运算符。 自增和自减运算符

44、是自增和自减运算符是C C语言中比较有特色的单目运算符,它们语言中比较有特色的单目运算符,它们的运算对象只能是一个数值类型的变量。其作用是使变量自身的的运算对象只能是一个数值类型的变量。其作用是使变量自身的值增加值增加1 1或减少或减少1 1,结合性为右结合。两种运算符语法形式分别有,结合性为右结合。两种运算符语法形式分别有两种:两种:+变量变量 或或 变量变量+-变量变量 或或 变量变量- 运算符位于变量前面时,先将变量的值加运算符位于变量前面时,先将变量的值加1 1(或减(或减1 1),变量的),变量的新值作为表达式的运算结果。运算符位于变量后面时,变量的原新值作为表达式的运算结果。运算符

45、位于变量后面时,变量的原值作为表达式的运算结果,然后再将变量的值加值作为表达式的运算结果,然后再将变量的值加1 1(或减(或减1 1)。)。例例2-62-6:阅读程序:阅读程序 #include #include int main() int main() int i=10,j=10; int i=10,j=10; printf(%d,%dn, i+, +j); printf(%d,%dn, i+, +j); return 0; return 0; 10,11例例2-62-6中,第中,第5 5行输出语句中,表达式行输出语句中,表达式“i+i+” ” 的结果是变量的结果是变量i i自增自增1 1

46、之前的值,而表达式之前的值,而表达式“+j+j”的值是变量的值是变量j j自增自增1 1之后之后的值,因此会产生相应的输出结果。的值,因此会产生相应的输出结果。3.3.赋值运算符和赋值表达式赋值运算符和赋值表达式C C语言采用语言采用“=”=”作为赋值运算符,其赋值表达式的语法形式如下:作为赋值运算符,其赋值表达式的语法形式如下:变量变量= =表达式表达式进行赋值运算时,有时会出现进行赋值运算时,有时会出现“=”=”右边的表达式的结果的数据类型与右边的表达式的结果的数据类型与左边的变量数据类型不一致的情况,此时以左边变量的数据类型为准,左边的变量数据类型不一致的情况,此时以左边变量的数据类型为

47、准,把右边表达式结果转换为左边变量的类型。例如:把右边表达式结果转换为左边变量的类型。例如:int a; double b;int a; double b;a=9.0/2; a=9.0/2; /右边表达式结果是右边表达式结果是doubledouble类型的类型的4.54.5,赋值时转换为,赋值时转换为intint类型,类型,a a为为4 4b=10; b=10; /右边是右边是intint型常量型常量1010,赋值时转换为,赋值时转换为doubledouble类型,类型,d d得到得到10.010.0复合赋值运算符和表达式复合赋值运算符和表达式为了使程序源代码书写简洁和进行代码效率优化,为了使

48、程序源代码书写简洁和进行代码效率优化,C C语言允许将语言允许将5 5种双目算术运算符和种双目算术运算符和5 5种双目位运算符放在种双目位运算符放在“=”=”左边构成左边构成1010种复种复合赋值运算符合赋值运算符复合赋值运算复合赋值运算作用说明作用说明复合赋值运算复合赋值运算作用说明作用说明x+=yx+=yx=x+yx=x+yx=yx=yx=xyx=x=yx=yx=xyx=xyx x* *=y=yx=xx=x* *y yx&=yx&=yx=x&yx=x&yx/=yx/=yx=x/yx=x/yx=yx=yx=xyx=xyx%=yx%=yx=x%yx=x%yx|=

49、yx|=yx=x|yx=x|y4.4.逗号运算符逗号运算符逗号运算符逗号运算符“,”,”可以将两个表达式连接起来,实际程序经常使可以将两个表达式连接起来,实际程序经常使用多个逗号将多个表达式顺序连接起来,其基本语法形式如下:用多个逗号将多个表达式顺序连接起来,其基本语法形式如下:表达式表达式1, 1, 表达式表达式2, 2, 表达式表达式3, , 3, , 表达式表达式n n例如:例如:/从左到右依次给三个变量赋值,逗号表达式的结果是从左到右依次给三个变量赋值,逗号表达式的结果是3 3x=1, y=2, z=3x=1, y=2, z=3/表达式运算后,表达式的值是表达式运算后,表达式的值是2

50、2,变量,变量x x的值是的值是8 8x=5+3, 5-3x=5+3, 5-3/该表达式是赋值表达式,将逗号表达式的结果该表达式是赋值表达式,将逗号表达式的结果2 2赋值给变量赋值给变量x xx=(5+3, 5-3)x=(5+3, 5-3)5. sizeof5. sizeof运算符运算符sizeofsizeof运算符是运算符是C C语言特有的一种运算符,其语法形式如下:语言特有的一种运算符,其语法形式如下:sizeof(sizeof(运算对象运算对象) )该运算符的作用是获得运算对象占用内存空间的字节数,结果是该运算符的作用是获得运算对象占用内存空间的字节数,结果是整数类型。其中,运算对象可以

51、是数据类型关键字、常量、变量整数类型。其中,运算对象可以是数据类型关键字、常量、变量和表达式。和表达式。例例2-72-7:阅读程序:阅读程序 #include #include int main() int main() float price; float price; printf(int printf(int类型占用类型占用%d%d个字节个字节.n, sizeof(int);.n, sizeof(int); printf( printf(变量变量priceprice占用占用%d%d个字节个字节.n, sizeof(price);.n, sizeof(price); printf( pri

52、ntf(实数实数3.143.14占用占用%d%d个字节个字节.n, sizeof(3.14);.n, sizeof(3.14); printf( printf(字符串字符串ABAB占用占用%d%d个字节个字节.n, sizeof(AB);.n, sizeof(AB); printf( printf(表达式表达式9+59+5的结果占用的结果占用%d%d个字节个字节.n, sizeof(9+5);.n, sizeof(9+5); return 0; return 0; intint类型占用类型占用4 4个字节个字节. .变量变量priceprice占用占用4 4个字节个字节. .实数实数3.143

53、.14占用占用8 8个字节个字节. .字符串字符串ABAB占用占用3 3个字节个字节. .表达式表达式9+59+5的结果占用的结果占用4 4个字节个字节. .6.6.混合运算与数据类型转换混合运算与数据类型转换 混合运算与数据类型转换混合运算与数据类型转换C C语言程序中允许表达式中存在不同语言程序中允许表达式中存在不同数据类型数据之间的运算,由于不同的数据类型的存储方式不同,数据类型数据之间的运算,由于不同的数据类型的存储方式不同,因此表达式在进行混合数据运算时要先进行数据类型的转换,把因此表达式在进行混合数据运算时要先进行数据类型的转换,把不同的数据类型转换成相同的数据类型后,再进行运算。不同的数据类型转换成相同的数据类型后,再进行运算。C C语言语言提供提供“自动类型转换自动类型转换”和和“强制类型转换强制类型转换”两种类型转换方式。两种类型转换方式。自动类型转换自动类型转换转

温馨提示

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

最新文档

评论

0/150

提交评论