第二章 基本数据类型及其运算_第1页
第二章 基本数据类型及其运算_第2页
第二章 基本数据类型及其运算_第3页
第二章 基本数据类型及其运算_第4页
第二章 基本数据类型及其运算_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言语言第二章 基本数据类型及其运算C语言的数据类型1常量与变量2变量赋初值3各类数值型数据间的混合运算4运算符和表达式5C语言语言2.1 C语言的数据类型v数据是程序处理的对象。数据是程序处理的对象。C语言程序所处理语言程序所处理的数据根据其特定的形式是有类型之分的,的数据根据其特定的形式是有类型之分的, C语言的各种类型所能表示的数据是有范围语言的各种类型所能表示的数据是有范围的。程序设计的过程就是根据实际问题选的。程序设计的过程就是根据实际问题选择合适的类型来表示具体的数据对象,并择合适的类型来表示具体的数据对象,并对这些数据对象进行有效的操作。对这些数据对象进行有效的操作。C语言提语

2、言提供了丰富的数据类型,以满足表示各种类供了丰富的数据类型,以满足表示各种类型数据的需要。型数据的需要。C语言语言2.1 C语言的数据类型vC语言的数据类型包括:基本整型语言的数据类型包括:基本整型(int)、短、短整型整型(short)、长整型、长整型(long)、基本无符号、基本无符号整型整型(unsigned int)、无符号短整型、无符号短整型(unsigned short)、无符号长整型、无符号长整型(unsigned long)、字符类型、字符类型(char)、单精、单精度实型度实型(float)(浮点类型浮点类型)、双精度实型、双精度实型(double)、枚举类型、枚举类型(en

3、um)、数组类型、数组类型(array)、结构体类型、结构体类型(struct)、共用体类型、共用体类型(union)、指针类型以及空类型、指针类型以及空类型(void),如,如图图2-1所示。所示。C语言的基本数据类型有整型、语言的基本数据类型有整型、实型和字符型。实型和字符型。C语言语言2.1 C语言的数据类型数据类型基本类型字符型实型枚举类型构造类型指针类型空类型数组类型结构体类型共用体类型图2-1 C语言的数据类型整型C语言语言2.2 常量与变量v常量是在程序运行过程中,其值不可改变常量是在程序运行过程中,其值不可改变的量。的量。v变变量是在程序运行过程中,其值量是在程序运行过程中,其

4、值可以可以改变改变的量。的量。C语言语言2.2.1 常量1整型常量整型常量(1)整型常量的三种表示形式整型常量的三种表示形式1)十进制整数:如十进制整数:如1995,-18,0等。等。2)八进制整数:以八进制整数:以0开头的数是八进制数。如开头的数是八进制数。如0123表示八进制数表示八进制数123,即,即(123)8,等于十进制数,等于十进制数83。-011表示八进制数表示八进制数-11,即,即- (11)8,等于十进制数,等于十进制数-9。3)十六进制整数:以十六进制整数:以0 x开头的数是十六进制数。如开头的数是十六进制数。如0 x123表示十六进制数表示十六进制数123,即,即(123

5、)16,等于十,等于十进制数进制数301。-0 x11表示十六进制数表示十六进制数-11,即,即- (11)16,等于十进制数,等于十进制数-17。C语言语言2.2.1 常量(2)整型常量的分类整型常量的分类1)一个整型常量,如果其值在一个整型常量,如果其值在215+215-1(即即-3276832767)范围内,认为范围内,认为它是它是int型的。因为型的。因为Turbo C/C+ 3.0系统中系统中short int型与型与int型数据在内存型数据在内存中占据的字节长度相同,都是两个字节,所以它们的表数范围相同。因中占据的字节长度相同,都是两个字节,所以它们的表数范围相同。因此一个此一个i

6、nt型的常量也同时是一个型的常量也同时是一个short int型常量,可以赋给型常量,可以赋给int型、型、short int型及型及long int型的变量。型的变量。2)一个整型常量,如果其值超过了上述范围,在一个整型常量,如果其值超过了上述范围,在231+231-1 (即即-21474836482147483647)范围内,则认为它是范围内,则认为它是long int型的。可以将它型的。可以将它赋给一个赋给一个long int型的变量。型的变量。3)常量中没有常量中没有unsighed型。但一个非负值的整常量可以赋值给型。但一个非负值的整常量可以赋值给unsighed型型整变量,只要它的

7、范围不超过变量的表数范围即可。例如将整变量,只要它的范围不超过变量的表数范围即可。例如将2000赋给一赋给一个个unsighed型整变量是可以的,而将型整变量是可以的,而将7000赋给它是不行的。赋给它是不行的。4)在一个整常量后面加在一个整常量后面加l或或L,则认为它是,则认为它是long int型的。例如型的。例如123l、123L、0L等。这往往用于函数调用中,如果函数的形参为等。这往往用于函数调用中,如果函数的形参为long int型的,则要求型的,则要求实参也为实参也为long int型的,此时用型的,此时用123作实参不行,而要用作实参不行,而要用123l或或123L。C语言语言2

8、.2.1 常量2实型常量实型常量实数在实数在C语言中又称为浮点数。语言中又称为浮点数。(1)实数的两种表示形式实数的两种表示形式1)十进制数形式:它由数字和小数点组成十进制数形式:它由数字和小数点组成(注意:必须有小数点注意:必须有小数点),如,如0.123、.123、123.0、123.、0.0都是十进制数形式。都是十进制数形式。2)指数形式:如指数形式:如123e3或或123E3都代表都代表123103。但注意字母。但注意字母e或或E之前必须之前必须有数字,且有数字,且e后面指数必须为整数,如后面指数必须为整数,如e3、2.1e3.5、. e3、e等都是不合等都是不合法的指数形式。法的指数

9、形式。(2)实型常量的分类实型常量的分类 实型常量不分实型常量不分float型和型和double型。一个实型常量可以赋值给一个型。一个实型常量可以赋值给一个float型型或或double型变量。根据变量的类型截取实型常量中相应的有效位。假如型变量。根据变量的类型截取实型常量中相应的有效位。假如a已指定为单精度已指定为单精度float型变量:型变量:float a:a=111111.111;由于由于float型变量只能接受型变量只能接受7位有效数字,小数点后保留位有效数字,小数点后保留6位,因此位,因此a的值实际的值实际上是上是111111.100000。如果。如果a改为双精度改为双精度doub

10、le型变量,则能全部接受上型变量,则能全部接受上述述9位有效数字,位有效数字,a的值实际上是的值实际上是111111.111000。 C语言语言2.2.1 常量3字符型常量字符型常量(1)字符型常量的两种表示形式字符型常量的两种表示形式1)普通字符:用单引号普通字符:用单引号(即撇号即撇号)括起来的一个字符,如:括起来的一个字符,如:a、A、x、D、?、 (空格字符空格字符)等都是字符常量。注意:等都是字符常量。注意:a与与A是不同的字符常量。是不同的字符常量。2)转义字符:以一个转义字符:以一个开头的字符序列,这是一种特殊形式的字开头的字符序列,这是一种特殊形式的字符常量,叫转义字符。例如,

11、前一章中已经遇到过的在符常量,叫转义字符。例如,前一章中已经遇到过的在printf函数中的函数中的n,它代表一个换行符。这种非显示字符难以用一,它代表一个换行符。这种非显示字符难以用一般格式的字符表示,故规定用这种特殊形式表示。般格式的字符表示,故规定用这种特殊形式表示。常用的用常用的用开头的转义字符如开头的转义字符如表表2-1所示。所示。【例2.1】 输入一个字符,输出该字符的字形及其ASCII码值。#include void main()char ch;scanf(%c,&ch); / 输入一个字符printf(%c的ASCII值为%dn,ch,ch); C语言语言2.2.1 常量

12、4字符串常量字符串常量 字符常量是用一对单引号字符常量是用一对单引号(即撇号即撇号)括起来的单个字符,而字符串常量是用括起来的单个字符,而字符串常量是用一对双引号括起来的字符序列,例如,一对双引号括起来的字符序列,例如,“Good”、“Study hard! ”、“C语言程语言程序设计序设计”等。字符串常量中可以包含汉字。可以输出一个字符串,如:等。字符串常量中可以包含汉字。可以输出一个字符串,如: printf(Hello world! );注意:注意: u 每个字符串常量有一个字符串结束标志每个字符串常量有一个字符串结束标志0隐藏在串最后,标志着该字符串结隐藏在串最后,标志着该字符串结束。

13、字符串结束标志由系统自动添加在字符串常量最后。束。字符串结束标志由系统自动添加在字符串常量最后。 字符串字符串“Hello world! ”在内存中的存放形式如在内存中的存放形式如图图2-2所示。所示。u 它的长度不是它的长度不是12个字符,而是个字符,而是13个字符,最后一个字符为个字符,最后一个字符为0。但在输出时,。但在输出时,一个字符一个字符输出,直到遇到最后的一个字符一个字符输出,直到遇到最后的0,就知道字符串结束,停止输出,就知道字符串结束,停止输出,不输出不输出0。u 一个字符串中字符的个数称为该字符串的长度一个字符串中字符的个数称为该字符串的长度(不包括串结束标志不包括串结束标

14、志)。字符串中。字符串中每个汉字相当于每个汉字相当于2个字符,占个字符,占2个字节存储单元。个字节存储单元。u 不要将字符常量与字符串常量混淆,不要将字符常量与字符串常量混淆,a是字符常量,而是字符常量,而a是字符串常量,二是字符串常量,二者不同。字符常量可以赋值给一个字符变量,而一个字符串常量不能赋值给者不同。字符常量可以赋值给一个字符变量,而一个字符串常量不能赋值给一个字符变量,并且字符串没有变量。一个字符变量,并且字符串没有变量。 C语言语言2.2.1 常量5符号常量符号常量 符号常量是在程序中指定用符号名代表的一个常量。符号常量是在程序中指定用符号名代表的一个常量。 C语言中用编译预处

15、理命令定义符号常量,用来表示一个常量,系统处理时,语言中用编译预处理命令定义符号常量,用来表示一个常量,系统处理时,将程序中的所有符号名替换成对应的常量。例如:将程序中的所有符号名替换成对应的常量。例如: #define PI 3.14159 /*定义了符号常量定义了符号常量PI,PI即即3.14159*/ 在程序中,要使用在程序中,要使用3.14159这个数值时,只要用这个数值时,只要用PI代替,而在编译预处理时,代替,而在编译预处理时,程序中的所有程序中的所有“PI”均被替换成均被替换成“3.14159”。程序中已经定义的符号常量只。程序中已经定义的符号常量只能引用、不能再重复定义,不能被

16、重新赋值,也就是说符号常量的值是不能能引用、不能再重复定义,不能被重新赋值,也就是说符号常量的值是不能被改变的。被改变的。【例例2.2】 输入一个半径值,求圆周长和圆面积。输入一个半径值,求圆周长和圆面积。#include #define PI 3.14159void main()float r,k,s;scanf(%f,&r);k=2*PI*r;s=PI*r*r;printf(圆周长:圆周长:%.2f 圆面积:圆面积:%.2fn,k,s);C语言语言2.2.2 变量1变量的基本概念变量的基本概念 变量是在程序运行过程中,其值可以改变的量。变量在使用之前必须变量是在程序运行过程中,其值

17、可以改变的量。变量在使用之前必须要先强制定义,变量的一般定义格式如下要先强制定义,变量的一般定义格式如下( 括起来的部分表示可有可无括起来的部分表示可有可无): 存储类型存储类型 ,;u 存储类型指定变量是存放在静态存储区还是动态存储区。存储类型指定变量是存放在静态存储区还是动态存储区。u 类型标识符指定所定义变量的类型,变量的类型可以是基本类型如整型、类型标识符指定所定义变量的类型,变量的类型可以是基本类型如整型、实型、字符型等,也可以是用户自定义的构造类型标识符。实型、字符型等,也可以是用户自定义的构造类型标识符。u 变量名列表是用逗号隔开的若干个变量名,同类型的变量定义可放在同变量名列表

18、是用逗号隔开的若干个变量名,同类型的变量定义可放在同一语句中。其中变量名的取名应满足标识符的命名规则。一个变量应该一语句中。其中变量名的取名应满足标识符的命名规则。一个变量应该有一个自己的名字,在内存中占据一定的存储单元,在该存储单元中存有一个自己的名字,在内存中占据一定的存储单元,在该存储单元中存放该变量的值。放该变量的值。注意:注意:“变量名变量名”和和“变量值变量值”是变量的两个重要属性,是两个不同的概是变量的两个重要属性,是两个不同的概念。念。 如:如: int a; a=3; 这两个语句表示定义了一个整型变量,该变量的变量名是这两个语句表示定义了一个整型变量,该变量的变量名是a,该变

19、量,该变量的值是的值是3。 C语言语言2.2.2 变量u 取变量名的目的是为了系统在编译连接时,给变量分配一个内存地址,取变量名的目的是为了系统在编译连接时,给变量分配一个内存地址,同时根据该变量的类型分配一定的内存单元。在程序中调用该变量时,同时根据该变量的类型分配一定的内存单元。在程序中调用该变量时,就是通过变量名找到相应的内存地址,从其存储单元中读取数据;对变就是通过变量名找到相应的内存地址,从其存储单元中读取数据;对变量赋值时,就是通过变量名找到相应的内存地址,将数据写入其存储单量赋值时,就是通过变量名找到相应的内存地址,将数据写入其存储单元中。元中。u 理论上来说,任何合法的标识符都

20、可以作变量名,但实际上在选择标识理论上来说,任何合法的标识符都可以作变量名,但实际上在选择标识符作变量名时,应达到符作变量名时,应达到“见名知义见名知义”,即选有含义的英文单词,即选有含义的英文单词(或其缩写或其缩写)作变量名,如:作变量名,如:name,age,month等,除了数值计算程序外,一般不等,除了数值计算程序外,一般不要用代数符号要用代数符号(如如a,b,c,x1,y2等等)作变量名,以增加程序的可读性。作变量名,以增加程序的可读性。u 前面已经提及,在前面已经提及,在C语言中,要求对所有用到的变量要作强制定义,也就语言中,要求对所有用到的变量要作强制定义,也就是是“先定义,后使

21、用先定义,后使用”。这样做可以带来许多的好处:。这样做可以带来许多的好处: (1)保证程序中的变量名正确使用。例如:在保证程序中的变量名正确使用。例如:在main()中定义了一个整中定义了一个整型变量型变量int num;,但在,但在nam=10;赋值语句中,错把赋值语句中,错把num写成了写成了nam,在,在编译时屏幕上会出现编译时屏幕上会出现“Unfined symbol nam in function main ”的出的出错提示,表示变量在错提示,表示变量在main()中没有定义。中没有定义。 C语言语言2.2.2 变量 (2)编译时根据类型分配内存单元。如定义编译时根据类型分配内存单元

22、。如定义a,b为为int型,系统就会为型,系统就会为a,b各分配两个字节,各分配两个字节,并按整数方式存储其值。并按整数方式存储其值。(3)每一个变量属于一个类型,这便于在编译时每一个变量属于一个类型,这便于在编译时根据该变量所属的类型检查该变量所进行的根据该变量所属的类型检查该变量所进行的运算是合法,如:运算是合法,如: float a,b,c; c=a%b; 在编译时会提示该语句出错,因为在编译时会提示该语句出错,因为%是是“求余求余”运算,只使用于整型数据。运算,只使用于整型数据。C语言语言2.2.2 变量2整型变量整型变量(1)整型变量的分类与表示整型变量的分类与表示uC语言的整型变量

23、可分为基本整型语言的整型变量可分为基本整型(int)、短整型、短整型(short int,可简写为,可简写为short)和长整型和长整型(long int,可,可简写为简写为long)三种。整型数据中,按数据是否带符号,三种。整型数据中,按数据是否带符号,又分为有符号又分为有符号(signed)整数和无符号整数和无符号(unsigned)整整数。数。u在不同的在不同的C编译环境中整型数据所占据的内存空间的编译环境中整型数据所占据的内存空间的长度长度(即字节数即字节数)有所不同,但有一个基本规则,即:有所不同,但有一个基本规则,即:int型的长度大于或等于型的长度大于或等于short型,并且小于

24、或等于型,并且小于或等于long型。型。表表2-2所示为所示为Turbo C/C+ 3.0系统中整型系统中整型数据的长度、类型标识符与数值范围。本书中所有数据的长度、类型标识符与数值范围。本书中所有例子用到的整型数据都以表例子用到的整型数据都以表2-2为准。为准。C语言语言2.2.2 变量u整数在计算机内部是按该数的二进制补码形式存放整数在计算机内部是按该数的二进制补码形式存放的。其中最高位是符号位,符号位用的。其中最高位是符号位,符号位用“0”或或“1”分分别表示正数或负数。对于正整数,其原码、反码、别表示正数或负数。对于正整数,其原码、反码、补码相同。负整数的反码为其原码除符号位外按位补码

25、相同。负整数的反码为其原码除符号位外按位取反取反(即即0改为改为1、1改为改为0),而补码为其反码末位再,而补码为其反码末位再加加1。 例如:例如: 19的原码为:的原码为:0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 19的反码为:的反码为:0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 19的补码为:的补码为:0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 19的原码为:的原码为:1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 19的反码为:的反码为:1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 19的补码

26、为:的补码为:1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1C语言语言2.2.2 变量(1)整型变量的定义整型变量的定义u前面已经提及,在前面已经提及,在C语言中,要求对所有用到的变量要先定语言中,要求对所有用到的变量要先定义、后使用,即在程序中先定义其所属类型,同一类型的多义、后使用,即在程序中先定义其所属类型,同一类型的多个变量的定义可以集中在一个定义语句中完成,也可以分散个变量的定义可以集中在一个定义语句中完成,也可以分散用多个定义语句,例如:用多个定义语句,例如: int a,b; 等价于等价于 int a;int b; 等价于等价于 int a; int b; (指定

27、变量指定变量a,b为整型为整型)u变量在定义时可以同时初始化变量在定义时可以同时初始化(即给变量赋一个初始值即给变量赋一个初始值)。例如:。例如: int a=3; unsigned y1=65522; long x2=123456789;C语言语言2.2.2 变量u在变量定义中可以用在变量定义中可以用const限定符来限定变量,该限定符用于限定符来限定变量,该限定符用于制定该变量的值不能被改变。例如:制定该变量的值不能被改变。例如: const int pi=3.14159; const long upper=65535;【例例2.3】写出下面程序的运行结果。写出下面程序的运行结果。#inc

28、lude main()int a=1,b=-1;unsigned c,d;c=a;d=b;printf(%d,%d,%d, %u, %d, %u,a,b,c,c,d,d);C语言语言2.2.2 变量u在将一个整型常量赋值给一个整型变量时,要在将一个整型常量赋值给一个整型变量时,要注注意意以下几点:以下几点:1)一个取值范围为一个取值范围为-3276832767的整数,被看作是的整数,被看作是int型常型常量,可以给量,可以给int型和型和long型变量赋值;一个取值范围为型变量赋值;一个取值范围为-21474836482147483647的整数,被看作是的整数,被看作是long型常量,型常量,

29、只可以给只可以给long型变量赋值。型变量赋值。2)Turbo C/C+3.0规定规定int型和型和short int型数据占据相同长型数据占据相同长度的内存字节,即度的内存字节,即2个字节,所以个字节,所以int型常量同时也是型常量同时也是short int型常量,可以赋值给型常量,可以赋值给int型和型和short int型变量。型变量。 3)在函数调用中,如果形参是在函数调用中,如果形参是long int型的,那么实参也必型的,那么实参也必须是须是long int型的,具体内容见后面第五章。型的,具体内容见后面第五章。 C语言语言2.2.2 变量3实型变量实型变量(1)实型变量的分类与表

30、示实型变量的分类与表示uC的实型变量主要有的实型变量主要有float类型类型(32位位)和和double类型类型(64位位)两种,还有一种两种,还有一种long double类型类型(80位位),因,因为用得比较少,不准备在此作详细的介绍了。为用得比较少,不准备在此作详细的介绍了。u表表2-3列出了实型数据的数据长度、类型标识符、数列出了实型数据的数据长度、类型标识符、数值范围与有效位数,由于实型数据在内存中由有限值范围与有效位数,由于实型数据在内存中由有限的存储单元表示,因此所提供的有效位数是有限的。的存储单元表示,因此所提供的有效位数是有限的。不同的实型数据所占据的存储单元不同,有效位数不

31、同的实型数据所占据的存储单元不同,有效位数也不同。在编程时要根据实际需要正确地选择实型也不同。在编程时要根据实际需要正确地选择实型数据类型、处理可能出现的计算误差。数据类型、处理可能出现的计算误差。C语言语言2.2.2 变量(2)实型变量的定义实型变量的定义u实型变量的定义方法与整型变量完全一致。实型变量的定义方法与整型变量完全一致。u实型常量不分实型常量不分float型和型和double型。一个实型常量可型。一个实型常量可以赋值给一个以赋值给一个float型或型或double型变量,根据变量的型变量,根据变量的类型截取实型常量中相应的有效位数字。例如:类型截取实型常量中相应的有效位数字。例如

32、: float a; a=123456789.123456789; 由于由于float型变量只能接受型变量只能接受7位有效数字,因此整数部位有效数字,因此整数部分的最后两位以及小数部分取随机值。如果分的最后两位以及小数部分取随机值。如果a改为改为double型,则能全部接受整数部分的型,则能全部接受整数部分的9位有效数字,位有效数字,小数部分保留小数部分保留6位。位。C语言语言2.2.2 变量【例例2.4】 写出下面程序的运行结果。写出下面程序的运行结果。#include main()float a;a=123456789.123456789;printf(n%f,%e,a,a);C语言语言2

33、.2.2 变量4字符型变量字符型变量u字符型变量用来存放字符常量。一个字符型变量在字符型变量用来存放字符常量。一个字符型变量在内存中只占一个字节,只能存放一个字符。字符在内存中只占一个字节,只能存放一个字符。字符在内存中以内存中以ASCII码值存储。字符变量的定义形式如下:码值存储。字符变量的定义形式如下: char c1,c2;【例例2.5】 写出下面程序的运行结果。写出下面程序的运行结果。#include main()char c1,c2;c1= a;c2= A;printf(n%c,%c,c1,c2);printf(n%d,%d,c1,c2);printf(n%d,%c,c1,c1);p

34、rintf(n%d,%c,c2,c2);C语言语言2.2.2 变量uC语言允许将字符型数据视作整型数据对待,语言允许将字符型数据视作整型数据对待, 所以字符型数所以字符型数据可以参与整型数据所具有的算数运算;同样允许将整型数据可以参与整型数据所具有的算数运算;同样允许将整型数据视作字符型数据对待,当将整型数据视作字符型数据对待据视作字符型数据对待,当将整型数据视作字符型数据对待时,应将该整型数据与时,应将该整型数据与256作模运算,所得的结果即为对应字作模运算,所得的结果即为对应字符的符的ASCII码值。码值。 【例例2.6】 写出下面程序的运行结果。写出下面程序的运行结果。#include

35、main()char c1,c2,c3,c4;c1= a;c3=c1+4;c2= A;c4=c2-5;printf(n%c,%c,c1,c3);printf(n%c,%c,c2,c4);printf(n%d,%d,c1,c3);printf(n%d,%d,c2,c4);C语言语言2.3 变量赋初值v 变量定义后其初值一般是不确定的,不能直接使用。例如:变量定义后其初值一般是不确定的,不能直接使用。例如: int a; printf(%dn,a); 该语句执行后的输出结果是不确定的。该语句执行后的输出结果是不确定的。v 在定义变量的同时也可以同时对变量赋初值,称为变量的初在定义变量的同时也可以同

36、时对变量赋初值,称为变量的初始化。例如:始化。例如: int x,sum=0; double pi=3.14159,area; char c1=#,c2; 这三条语句分别定义了这三条语句分别定义了x、sum为为int类型变量,类型变量,pi、area为为double类型变量,类型变量,c1、c2为为char类型变量;并且为类型变量;并且为sum、pi、c1赋初值。赋初值。v 如果几个同类型变量的初值是相同的,也要分开赋值。例如:如果几个同类型变量的初值是相同的,也要分开赋值。例如: int a=1,b=1,c=1; 表示定义整型变量表示定义整型变量a. b. c并赋初始值均为并赋初始值均为1,

37、不能写成,不能写成“int a=b=c=1;”。 C语言语言2.4 各类数值型数据间的混合运算v各类型数据间的混合运算各类型数据间的混合运算v自动类型转换自动类型转换v强制类型转换强制类型转换C语言语言2.4 各类数值型数据间的混合运算C语言语言2.4 各类数值型数据间的混合运算C语言语言2.5 运算符和表达式v运算符运算符C语言提供的运算符非常丰富,按其功能分为以下几类:语言提供的运算符非常丰富,按其功能分为以下几类:1算术运算符:用于各类数值运算。包括加算术运算符:用于各类数值运算。包括加(+)、减、减(-)、乘、乘(*)、除、除(/)、求余、求余(或或称模运算,称模运算,%)、自增、自增

38、(+)、自减、自减(-)共七种。共七种。2关系运算符:用于比较运算。包括大于关系运算符:用于比较运算。包括大于()、小于、小于(=)、小于等于、小于等于(=,=)三类,共十一种。三类,共十一种。5位操作运算符:参与运算的量,按二进制位进行运算。包括位与位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或、位或(|)、位非位非()、位异或、位异或()、左移、左移()六种。六种。6条件运算符:这是一个三目运算符,用于条件求值条件运算符:这是一个三目运算符,用于条件求值(?:?:)。7逗号运算符:用于把若干表达式组合成一个表达式逗号运算符:用于把若干表达式组合成一个表达式(,

39、)。8求字节数运算符:用于计算数据类型所占的字节数求字节数运算符:用于计算数据类型所占的字节数(sizeof)。9指针运算符:用于取内容指针运算符:用于取内容(*)和取地址和取地址(&)二种运算。二种运算。10特殊运算符:有括号特殊运算符:有括号( ),下标,下标 ,成员,成员(-,.)等几种。等几种。C语言语言2.5 运算符和表达式v表达式表达式1.由运算符和括号将对应的运算对象由运算符和括号将对应的运算对象(也称操作数也称操作数)联系起联系起来、符合来、符合C语言规则的式子,就是表达式。那么,由算语言规则的式子,就是表达式。那么,由算术运算符和括号将对应的算术运算对象联系起来、符合

40、术运算符和括号将对应的算术运算对象联系起来、符合C语言规则的式子,就是算术表达式。语言规则的式子,就是算术表达式。2.运算符的运算对象可以是变量、常量、函数等。运算符的运算对象可以是变量、常量、函数等。3.根据运算符的优先级和结合性可以计算出各个表达式的根据运算符的优先级和结合性可以计算出各个表达式的值。一个表达式有一个值及其类型,值。一个表达式有一个值及其类型, 它们等于计算表它们等于计算表达式所得结果的值和类型。达式所得结果的值和类型。4.表达式求值按运算符的优先级和结合性规定的顺序进行。表达式求值按运算符的优先级和结合性规定的顺序进行。5.单个的常量、变量、函数可以看作是表达式的特例。单

41、个的常量、变量、函数可以看作是表达式的特例。C语言语言2.5.1 算术运算符和算术表达式vC语言中的算术运算符有以下语言中的算术运算符有以下8种,按优先级从高到种,按优先级从高到低排列依次为:低排列依次为: (取负取负)、+(自增自增)、- (自减自减) * (乘乘)、/(除除)、%(求余求余) + (加加)和和(减减) 其中:其中: (取负取负)、+(自增自增)和和- (自减自减)为单目运算符,为单目运算符,优先级相同,结合性为从右到左;其余为双目运算优先级相同,结合性为从右到左;其余为双目运算符,结合性均为从左到右。符,结合性均为从左到右。注意:注意:取余运算符取余运算符“%”是求整数除法

42、的余数,余数符是求整数除法的余数,余数符号与被除数的符号相同。号与被除数的符号相同。“%”不能用于实型数据的不能用于实型数据的运算。例如:运算。例如: 2%3 为为2,4%2 为为0,a%6 为为1,9%5 为为-4,9%-5 为为4,3.8%2非法等。非法等。 C语言语言2.5.1 算术运算符和算术表达式前缀格式:前缀格式:运算符运算符 变量变量先使变量加先使变量加(减减)1,再使用变量的值再使用变量的值单目运算符单目运算符+(自增自增)、- (自减自减)后缀格式:后缀格式:变量变量 运算符运算符先使用变量的原值,先使用变量的原值,再使变量加再使变量加(减减)1 对于变量i,“i+”和“+i

43、”都表示“i=i+1”,前缀格式和后缀格式在使用上没有什么区别;另外,“i-”和“-i”也是一样的。但是,当自增、自减运算作为表达式的一部分时,采用不同格式对表达式来说结果是不一样的。另外,自增、自减运算符一般用于循环语句中,使循环变量自动增1、减1,也用于指针变量,使指针指向下一个变量。 C语言语言2.5.1 算术运算符和算术表达式【例例2.7】 注意下列程序运行后变量注意下列程序运行后变量x与与y的区别。的区别。#include void main()int a=2,b=2,x,y;x=-a+2;y=b-+2;printf(x=%d y=%d a=%d b=%dn,x,y,a,b);【例例

44、2.8】 分析下面程序的运行结果。分析下面程序的运行结果。【例例2.9】 分析下面程序的运行结果。分析下面程序的运行结果。C语言语言2.5.2 关系运算符和关系表达式 关系运算是双目运算,用于对两个运算对象的大小进行比较。关系运算是双目运算,用于对两个运算对象的大小进行比较。用关系运算符将一些运算对象连接起来构成的式子,就叫关系表用关系运算符将一些运算对象连接起来构成的式子,就叫关系表达式。关系运算的结果是达式。关系运算的结果是“成立成立”或或“不成立不成立”,也就是逻辑意,也就是逻辑意义上的义上的“真真”或或“假假”。在。在C语言中没有设置表示逻辑值的数据语言中没有设置表示逻辑值的数据类型,

45、但规定用数值类型,但规定用数值1代表代表“真真”,用数值,用数值0代表代表“假假”;在判断;在判断参加运算的对象的真、假时,将非零的数值认作参加运算的对象的真、假时,将非零的数值认作“真真”,0认作认作“假假”。1关系运算符关系运算符C语言提供的关系运算符共语言提供的关系运算符共6个,分别为:个,分别为:(大于大于) =(大于或等于大于或等于) (小于小于) 、=、=”运算的优先级相同,运算的优先级相同,“=、!=”运算的优先级相同,且前者高于后者。运算的优先级相同,且前者高于后者。(2)关系运算符的优先级比算术运算符的优先级低、比赋值运算符的关系运算符的优先级比算术运算符的优先级低、比赋值运

46、算符的优先级高。优先级高。C语言语言2.5.2 关系运算符和关系表达式 2关系表达式举例关系表达式举例【例例2.10】 分析下面程序的运行结果。分析下面程序的运行结果。#include void main()int a,b,c;scanf(%d%d%d,&a,&b,&c);a=b!=c; / 第第5行行printf(a=%d,b=%d,c=%dn,a,b,c);a=(b=c+*3); / 第第7行行printf(a=%d,b=%d,c=%dn,a,b,c);a=bc2; / 第第9行行printf(a=%d,b=%d,c=%dn,a,b,c);C语言语言2.5.2 关系

47、运算符和关系表达式【例例2.11】 若有若有int x=2,y=3,z=5;,计算下列关系表达式的值。,计算下列关系表达式的值。(1) x%2=0: 表达式的值是表达式的值是1。“x%2”值为值为0,再计算,再计算“0=0”结果为结果为1。(2)z=x1=y2=1=”与与“=1”其值是其值是1,得,得“z=11”,再计算,再计算“11”为为0,故,故z及表达式的计算结果为及表达式的计算结果为0。(3)853: 表达式值是表达式值是1。根据运算符的结合性从左到右计算,先计算。根据运算符的结合性从左到右计算,先计算“85”其值为其值为0,再计算,再计算“03”,值为,值为1,表达式的值为,表达式的

48、值为1。【例例2.12】 分析下面程序的运行结果。分析下面程序的运行结果。C语言语言2.5.3 逻辑运算符和逻辑表达式 逻辑运算用于判断运算对象的逻辑关系,通常表示一些比逻辑运算用于判断运算对象的逻辑关系,通常表示一些比较复杂的条件。逻辑运算的对象除了关系运算结果较复杂的条件。逻辑运算的对象除了关系运算结果(逻辑量逻辑量)外,外,可以是任何类型的数据可以是任何类型的数据(包括整型、实型、字符型等包括整型、实型、字符型等),以运算对,以运算对象的值是零还是非零来判断它们是象的值是零还是非零来判断它们是“真真”还是还是“假假”。1逻辑运算符逻辑运算符C语言提供的逻辑运算符共语言提供的逻辑运算符共3个,分别为:个,分别为:!

温馨提示

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

评论

0/150

提交评论