《C语言程序设计第02章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第02章.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式2.1 程序设计概述程序设计概述2.2 C语言的数据类型语言的数据类型2.3 常量和变量常量和变量2.4 整型数据整型数据2.5 实型数据实型数据2.6 字符型数据字符型数据2.7 算术运算与算术表达式算术运算与算术表达式2.8 赋值运算与赋值表达式赋值运算与赋值表达式2.9 C语言特有的运算和运算符语言特有的运算和运算符2.1 程序设计概述程序设计概述一个程序应包括对数据的描述和对数据处理的描述。一个程序应包括对数据的描述和对数据处理的描述。1对数据的描述,即数据结构。对数据的描述,即数据结构。在在C语言中,系统提供语言中,系统
2、提供的数据结构,是以数据类型的形式出现的。的数据结构,是以数据类型的形式出现的。2对数据处理的描述,即计算机算法。算法是为解决一对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃思提出一个公式:机科学家沃思提出一个公式:数据结构数据结构+算法算法=程序程序程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境 Return2.2 C语言的数据类型语言的数据类型C语言提供的数据结构,是以数据类型形式出现的。语言提供的数据结构,是以数据类型形式出现
3、的。具体分类如下:具体分类如下:1.基本类型基本类型分为整型、实型(又称浮点型)、字符型。分为整型、实型(又称浮点型)、字符型。2.构造类型构造类型分为数组、结构、枚举和共用体四种类型。分为数组、结构、枚举和共用体四种类型。3.指针类型指针类型4.空类型空类型C语语言言中中的的数数据据,有有常常量量和和变变量量之之分分,它它们们分分别别属属于于上上述述这这些类型。些类型。本章将介绍基本类型中的整型、实型和字符型三种数据。本章将介绍基本类型中的整型、实型和字符型三种数据。Return2.3 常量和变量常量和变量2.3.1 常量常量 1.常量的概念常量的概念 在程序运行过程中,其值不能被改变的量称
4、为常量。在程序运行过程中,其值不能被改变的量称为常量。2.常量的分类常量的分类 (1)整型常量)整型常量(2)实型常量)实型常量(3)字符常量)字符常量(4)符号常量)符号常量常量的类型,可通过书写形式来判别。常量的类型,可通过书写形式来判别。2.3.2 变量变量1.变量的概念变量的概念在程序运行过程中,其值可以被改变的量称为变量。在程序运行过程中,其值可以被改变的量称为变量。2.变量的两个要素变量的两个要素(1)变变量量名名。每每个个变变量量都都必必须须有有一一个个名名字字变变量量名名,变量命名遵循标识符命名规则。变量命名遵循标识符命名规则。(2)变变量量值值。在在程程序序运运行行过过程程中
5、中,变变量量值值存存储储在在内内存中。在程序中,通过变量名来引用变量的值。存中。在程序中,通过变量名来引用变量的值。.标识符命名规则标识符命名规则(1)有有效效字字符符:只只能能由由字字母母、数数字字和和下下划划线线组组成成,且以字母或下划线开头。且以字母或下划线开头。(2)有有效效长长度度:随随系系统统而而异异,但但至至少少前前个个字字符符有有效。如果超长,则超长部分被舍弃。效。如果超长,则超长部分被舍弃。例例如如,由由于于student_name和和student_number的的前前个个字字符符相相同同,有有的的系系统统认认为为这这两两个个变变量量,是是一一回回事事而而不不加区别。加区别
6、。(3)C语言的关键字不能用作变量名。语言的关键字不能用作变量名。注注意意:C语语言言对对英英文文字字母母的的大大小小写写敏敏感感,即即同同一一字字母母的的大大小小写,被认为是两个不同的字符。写,被认为是两个不同的字符。习习惯惯上上,变变量量名名和和函函数数名名中中的的英英文文字字母母用用小小写写,以以增增加加可可读性。读性。思思考考题题:在在C语语言言中中,变变量量名名total与与变变量量名名TOTAL、ToTaL、tOtAl等是同一个变量吗?等是同一个变量吗?标识符命名的良好习惯标识符命名的良好习惯见名知意见名知意所所谓谓“见见名名知知意意”是是指指,通通过过变变量量名名就就知知道道变变
7、量量值值的的含含义义。通通常常应应选选择择能能表表示示数数据据含含义义的的英英文文单单词词(或或缩缩写写)作作变变量量名名,或汉语拼音字头作变量名。或汉语拼音字头作变量名。例例如如,name/xm(姓姓名名)、sex/xb(性性别别)、age/nl(年年龄龄)、salary/gz(工资)。(工资)。4.变量的定义与初始化变量的定义与初始化在在语语言言中中,要要求求对对所所有有用用到到的的变变量量,必必须须先先定定义义、后后使使用用(编编译译时时为为其其分分配配存存储储单单元元);且且称称在在定定义义变变量量的的同同时时进进行行赋初值的操作为变量初始化。赋初值的操作为变量初始化。(1)变量定义的
8、一般格式)变量定义的一般格式 存储类型存储类型 数据类型数据类型 变量名变量名,变量名变量名2;例如,例如,float radius,length,area;(2)变量初始化的一般格式)变量初始化的一般格式存存储储类类型型 数数据据类类型型 变变量量名名=初初值值,变变量量名名2=初初值值2;例如,例如,float radius=2.5,length,area;引用变量前要先赋值。引用变量前要先赋值。Return2.4 整型数据整型数据2.4.1 整型变量整型变量 1.分类分类 根据占用内存字节数的不同,整型变量又分为类:根据占用内存字节数的不同,整型变量又分为类:(1)基本整型(类型关键字为
9、)基本整型(类型关键字为 int)(2)短整型(类型关键字为)短整型(类型关键字为short int)(3)长整型(类型关键字为)长整型(类型关键字为long int)(4)无符号整型。无符号型又分为无符号基本整型)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型()、无符号短整型(unsigned short)和无)和无符号长整型(符号长整型(unsigned long)三种,只能用来存储无符号)三种,只能用来存储无符号整数。整数。2.占用内存字节数与值域占用内存字节数与值域 上述各类型整型变量占用的内存字节数,上述各类型整型变量占用的内存字节数,随系统而异
10、随系统而异。在在16位操作系统中,一般用字节表示一个位操作系统中,一般用字节表示一个int型变量,且型变量,且long型(字节)型(字节)int型(字节)型(字节)short型(字节)型(字节)显然,不同类型的整型变量,其值域不同。占用内存字显然,不同类型的整型变量,其值域不同。占用内存字节数为节数为n的(有符号)整型变量,其值域为:的(有符号)整型变量,其值域为:-2n*8-1(2n*8-1-1);无符号整型变量的值域为:);无符号整型变量的值域为:0(2n*8-1)。)。例如,例如,PC机中的一个机中的一个int型变量,其值域为型变量,其值域为-22*8-1(22*8-1-1),即),即-
11、3276832767;一个;一个unsigned型变量的值域为:型变量的值域为:0(22*8-1),即),即065535。2.4.2 整型常量整型常量.三种表示形式三种表示形式整型常量即整常数,在语言中可用三种形式表示:整型常量即整常数,在语言中可用三种形式表示:(1)十进制)十进制例如例如10、36。(2)八进制)八进制(3)十六进制)十六进制0 x36、0 x9F.分类分类(1)基基本本整整型型。在在16位位机机中中,用用2字字节节存存储储,其其数数据据范范围与围与int型变量一样。型变量一样。(2)长长整整型型(在在数数值值后后面面加加“L(l)”)。对对超超出出基基本本整整型型值值域域
12、的的整整型型常常量量,可可使使用用长长整整型型常常量量表表示示,其其取取值值范围可达范围可达-(-)。例如,)。例如,123l、315等。等。.类型匹配规则类型匹配规则类类型型匹匹配配规规则则为为:一一个个整整型型常常量量,可可以以赋赋给给能能容容纳纳下下其其值的整型变量。值的整型变量。例例如如,其其值值在在-15-(15-)的的整整型型常常量量,可可以以赋赋给给int型型变变量量和和long int型型变变量量;其其值值在在-(-)的的整型常量,就只能赋给整型常量,就只能赋给long int型变量。型变量。注注意意:常常量量无无unsigned型型。但但一一个个非非负负整整型型常常量量,只只
13、要要它它的的值值不不超超过过相相应应变变量量的的值值域域(即即取取值值范范围围),也也可可以以赋给赋给unsigned型变量。型变量。Return2.5 实型数据实型数据2.5.1 实型变量实型变量(实型变量不允许进行求余运算(实型变量不允许进行求余运算%)语言的实型变量,分为两种:语言的实型变量,分为两种:(1)单精度型。类型关键字为)单精度型。类型关键字为float,一般占字节,一般占字节(位)、提供位有效数字。位)、提供位有效数字。(2)双精度型。类型关键字为)双精度型。类型关键字为double,一般占个字节、,一般占个字节、提供提供1516位有效数字。位有效数字。2.5.2 实型常量实
14、型常量 .表示形式表示形式实型常量即实数,在语言中又称浮点数,其值有两种表实型常量即实数,在语言中又称浮点数,其值有两种表达形式:达形式:(1)十进制形式。例如)十进制形式。例如3.14、9.8。(2)指数形式:)指数形式:E(e)。例如例如3.0+5等。等。.关于类型关于类型 实型常量不分实型常量不分float型和型和double型。一个实型常量,可以型。一个实型常量,可以赋给一个实型变量(赋给一个实型变量(float型或型或double型)。型)。Return2.5 实型数据实型数据#define PRICE 180main()float discount,real_price;disco
15、unt=0.8;/*scanf(“%f”,&discount);*/real_price=PRICE*discount;printf(“price=%f”,real_price);Return2.6 字符型数据字符型数据2.6.1 字符常量字符常量1.字符常量的定义字符常量的定义用一对用一对单引号单引号括起来的单个字符,称为字符常量。括起来的单个字符,称为字符常量。例如,例如,A、等。等。2.转义字符转义字符语言还允许使用一种特殊形式的字符常量,就是以语言还允许使用一种特殊形式的字符常量,就是以反斜杠反斜杠“”开头的转义字符。开头的转义字符。n 注意:如果反斜杠或单引号本身作为字符常量,必注意
16、:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:须使用转义字符:、。例例2.1 用转义字符输出可打印字符和不可打印字符。用转义字符输出可打印字符和不可打印字符。/*程序功能:用转义字符输出可打印字符和不可打印字符程序功能:用转义字符输出可打印字符和不可打印字符*/main()printf(“x4Fx4Bx21n”);/*等价于等价于printf(“OK!n”);*/printf(“x15 xABn”);程序运行结果如下:程序运行结果如下:!2.6.2 字符变量字符变量字符变量的类型关键字为字符变量的类型关键字为char,一般占用,一般占用1字节内存单元。字节内存单元。1.变量值的存储变
17、量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一个字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的字符变量中,实际上是将该字符的ASCII码值(无符号整数)码值(无符号整数)存储到内存单元中。存储到内存单元中。例如例如char ch1,ch2;/*定义两个字符变量:定义两个字符变量:ch1,ch2*/ch1=a;ch2=b;/*给字符变量赋值给字符变量赋值*/2.特性特性字符数据在内存中存储的是字符的字符数据在内存中存储的是字符的ASCII码码 一个无一个无符号整数,其形式与整数的存储形式一样符号整数,其形式与整数的存储形式一样,所以所以语言允许语言
18、允许字符型数据与整型数据之间通用字符型数据与整型数据之间通用。(1)一个字符型数据,既可以字符形式输出,也可以一个字符型数据,既可以字符形式输出,也可以整数形式输出。整数形式输出。例例2.2 字符变量的字符形式输出和整数形式输出字符变量的字符形式输出和整数形式输出。/*程序功能:用字符形式和整数形式输出字符变量程序功能:用字符形式和整数形式输出字符变量*/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=
19、b ch1=97,ch2=98(2)允许对字符数据进行算术运算,此时就)允许对字符数据进行算术运算,此时就是对它们的是对它们的ASCII码值进行算术运算。码值进行算术运算。例例2.3 字符数据的算术运算。字符数据的算术运算。/*程序功能:字符数据的算术运算程序功能:字符数据的算术运算*/main()char ch1,ch2;ch1=a;ch2=B;/*字母的大小写转换字母的大小写转换*/printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32);/*用字符形式输出一个大于用字符形式输出一个大于256的数值的数值*/printf(ch1+200=%dn,ch1+200);pri
20、ntf(ch1+200=%cn,ch1+200);printf(ch1+256=%dn,ch1+256);printf(ch1+256=%cn,ch1+256);程序运行结果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a 2.6.3 字符串常量字符串常量1.字符串常量的概念和字符串长度字符串常量的概念和字符串长度字符串常量是用一对字符串常量是用一对双引号双引号括起来的若干字符序列。括起来的若干字符序列。字符串中字符的个数称为字符串长度。长度为字符串中字符的个数称为字符串长度。长度为0的字的字符串(即一个字符都没有的字符串)称为空串,表示
21、为符串(即一个字符都没有的字符串)称为空串,表示为“”(一对紧连的双引号)。(一对紧连的双引号)。例如,例如,“How do you do.”、“Good morning.”等,都等,都是字符串常量,其长度分别为是字符串常量,其长度分别为14和和13(空格也是一个字(空格也是一个字符)。符)。如果反斜杠和双引号作为字符串中的有效字符,则如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。必须使用转义字符。例如:(例如:(1)C:msdosv6.22 C:msdosv6.22 (2)I say:Goodbye!I say:Goodbye!2.字符串的存储字符串的存储C语言规定:在存储字
22、符串常量时,由系统在字符串语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个的末尾自动加一个0作为字符串的结束标志作为字符串的结束标志。注意:在源程序中书写字符串常量时,不必加结束字注意:在源程序中书写字符串常量时,不必加结束字符符0,否则画蛇添足。,否则画蛇添足。如果有一个字符串为如果有一个字符串为“CHINA”,则它在内存中的实,则它在内存中的实际存储如下所示:际存储如下所示:最后一个字符最后一个字符0是系统自动加上的,它占用字节是系统自动加上的,它占用字节而非字节内存空间。而非字节内存空间。CHINA0综上所述,综上所述,字符常量字符常量A与字符串常量与字符串常量A是两回事是两
23、回事:(1)定定界界符符不不同同:字字符符常常量量使使用用单单引引号号,而而字字符符串串常量使用双引号;常量使用双引号;(2)长长度度不不同同:字字符符常常量量的的长长度度固固定定为为1,而而字字符符串串常量的长度,可以是常量的长度,可以是0,也可以是某个整数;,也可以是某个整数;(3)存存储储要要求求不不同同:字字符符常常量量存存储储的的是是字字符符的的ASCII码码值值,而而字字符符串串常常量量,除除了了要要存存储储有有效效的的字字符符外外,,还还要要存储一个结束标志存储一个结束标志0。Return2.7 算术运算与算术表达式算术运算与算术表达式在语言中,除控制语句和输入输出函数外,其它所
24、在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。有基本操作都作为运算符处理。1.五种基本算术运算符五种基本算术运算符 +、-(减法(减法/取负)、取负)、*、/、%(求余数)(求余数)(1)关于除法运算)关于除法运算/C语言规定:两个整数相除,其商为整数,小数部分语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,被舍弃。例如,5/2=2。(2)关于求余数运算)关于求余数运算要求两侧的操作数均为整型数据,否则出错。要求两侧的操作数均为整型数据,否则出错。2.表达式和算术表达式表达式和算术表达式(1)表达式的概念)表达式的概念 用用运运算算符符和和括括号号将将运运算
25、算对对象象(常常量量、变变量量和和函函数数等等)连接起来的、符合语言语法规则的式子,称为表达式。连接起来的、符合语言语法规则的式子,称为表达式。单单个个常常量量、变变量量或或函函数数,可可以以看看作作是是表表达达式式的的一一种种特特例例。将将单单个个常常量量、变变量量或或函函数数构构成成的的表表达达式式称称为为简简单单表表达达式,其它表达式称之为复杂表达式。式,其它表达式称之为复杂表达式。(2)算术表达式的概念)算术表达式的概念表表达达式式中中的的运运算算符符都都是是算算术术运运算算符符。例例如如,3+6*9、(x+y)/2-1等,都是算术表达式。等,都是算术表达式。良良好好的的源源程程序序书
26、书写写习习惯惯:在在表表达达式式中中,在在双双目目运运算算符的左右两侧各加一个空格符的左右两侧各加一个空格,可增强程序的可读性。,可增强程序的可读性。3.运算符的优先级与结合性运算符的优先级与结合性(1)语言规定了运算符的优先级和结合性语言规定了运算符的优先级和结合性 所所谓谓结结合合性性是是指指,当当一一个个操操作作数数两两侧侧的的运运算算符符具具有有相相同同的的优优先先级级时时,该该操操作作数数是是先先与与左左边边的的运运算算符符结结合合,还还是是先与右边的运算符结合。先与右边的运算符结合。自自左左至至右右的的结结合合方方向向,称称为为左左结结合合性性。反反之之,称称为为右右结结合合性。性
27、。结结合合性性是是语语言言的的独独有有概概念念(见见附附录录III)。除除单单目目运运算算符符、赋赋值值运运算算符符和和条条件件运运算算符符是是右右结结合合性性外外,其其它它运运算算符符都都是是左左结合性。结合性。(2)表达式求值表达式求值1)按按运运算算符符的的优优先先级级高高低低次次序序执执行行。例例如如,先先乘乘除除后后加加减。减。2)如如果果在在一一个个运运算算对对象象(或或称称操操作作数数)两两侧侧的的运运算算符符的的优先级相同,则按语言规定的结合方向(结合性)进行。优先级相同,则按语言规定的结合方向(结合性)进行。例例如如,算算术术运运算算符符的的结结合合方方向向是是“自自左左至至
28、右右”,即即:在在执执行行“a b+c”时时,变变量量b先先与与减减号号结结合合,执执行行“a-b”;然然后后再执行加再执行加c的运算。的运算。4.数据类型转换数据类型转换(1)在在语语言言中中,整整型型、实实型型和和字字符符型型数数据据间间可可以以混合运算(因为字符数据与整型数据可以通用)。混合运算(因为字符数据与整型数据可以通用)。如如果果一一个个运运算算符符两两侧侧的的操操作作数数的的数数据据类类型型不不同同,则则系系统统按按“先先转转换换、后后运运算算”的的原原则则,首首先先将将数数据据自自动动转转换换成成同同一一类类型型,然然后后在在同同一一类类型型数数据据间间进进行行运运算算。转转
29、换换规规则参见则参见p.54图图3.10所示。所示。1)横横向向向向左左的的箭箭头头,表表示示必必须须的的转转换换。char和和short 型必须转换成型必须转换成 int 型,型,float型必须转换成型必须转换成double型。型。2)纵向向上的箭头,表示不同类型的转换方向。)纵向向上的箭头,表示不同类型的转换方向。例例如如,int型型与与double型型数数据据进进行行混混合合运运算算,则则先先将将int型型数数据据转转换换成成double型型,然然后后在在两两个个同同类类型型的的数数据据间间进行运算,结果为进行运算,结果为double型。型。注注意意:箭箭头头方方向向只只表表示示数数据
30、据类类型型由由低低向向高高转转换换,不不要要理理解解为为int型型先先转转换换成成unsigned型型,再再转转换换成成long型型,最最后后转换成转换成double型。型。(2)除自动转换外,语言也允许强制转换。)除自动转换外,语言也允许强制转换。数据类型强制转换的一般格式为:数据类型强制转换的一般格式为:(要转换成的数据类型要转换成的数据类型)(被转换的表达式被转换的表达式)当当被被转转换换的的表表达达式式是是一一个个简简单单表表达达式式时时,外外面面的的一一对对圆圆括括号可以缺省。号可以缺省。例如,例如,(double)a(等价于(等价于(double)(a)/*将变量将变量a的值转换成
31、的值转换成double型型*/(int)(x+y)/*将将x+y的结果转换成的结果转换成int型型*/(float)5/2(等价于(等价于(float)(5)/2)/*将将5转换成实型,再除以转换成实型,再除以2(2.5)*/(float)(5/2)/*将将5整除整除2的结果(的结果(2)转换成实型)转换成实型(2.0)*/注注意意:强强制制转转换换类类型型得得到到的的是是一一个个所所需需类类型型的的中中间间量量,原原表表达达式式类类型型并并不不发发生生变变化化。例例如如,(double)a 只只是是将将变变量量a的的值值转转换换成成一一个个double型型的的中中间间量量,其其数数据据类类型
32、型并并未未转转换换成成double型。型。Return2.8 赋值运算与赋值表达式 1.赋值运算赋值运算 赋值符号赋值符号“=”就是赋值运算符,它的作用是将一个就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。表达式的值赋给一个变量。赋值运算符的一般形式为:赋值运算符的一般形式为:变量变量 =赋值表达式赋值表达式 例如,例如,x=5 y=(float)5/2 如果表达式值的类型,与被赋值变量的类型不一致,如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。
33、换成被赋值变量的数据类型,然后再赋值给变量。思考题:假设变量思考题:假设变量num的数据类型为的数据类型为float,其值为,其值为2.5,则执行,则执行“num=(int)num”后,后,num的值等于多少?的值等于多少?2.02.复合赋值运算复合赋值运算复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。复合赋值运算的一般格式为:复合赋值运算的一般格式为:变量变量 双目运算符双目运算符=表达式表达式 复合赋值运算符复合赋值运算符它它等价于等价于:变量:变量=变量变量 双目运算符双目运算符(表达式表达式)。当当表表达达式式为为简
34、简单单表表达达式式时时,表表达达式式外外的的一一对对圆圆括括号号才才可可缺缺省省,否否则则可可能出错。能出错。例如,例如,x+=3 /*等价于等价于x=x+3*/y*=x+6/*等价于等价于y=y*(x+6),而不是,而不是y=y*x+6*/C语言规定的语言规定的10种复合赋值运算符如下:种复合赋值运算符如下:+=,-=,*=,/=,%=;/*复合算术运算符(复合算术运算符(5个)个)*/&=,=,|=,=;/*复合位运算符(复合位运算符(5个)个)*/3.赋值表达式赋值表达式由由赋赋值值运运算算符符或或复复合合赋赋值值运运算算符符,将将一一个个变变量量和和一一个个表达式连接起来的表达式,称为
35、赋值表达式。表达式连接起来的表达式,称为赋值表达式。(1)一般格式)一般格式 变量变量 (复合)赋值运算符(复合)赋值运算符 表达式表达式(2)赋值表达式的值)赋值表达式的值任任何何一一个个表表达达式式都都有有一一个个值值,赋赋值值表表达达式式也也不不例例外外。被赋值变量的值,就是赋值表达式的值被赋值变量的值,就是赋值表达式的值。例例如如,“a=5”这这个个赋赋值值表表达达式式,变变量量a的的值值“”就是它的值。就是它的值。Return2.9 C语言特有的运算和运算符2.9.1 自增(自增(+)、自减()、自减(-)运算运算 1.作用作用 自增运算使单个变量的值增,自减运算使单个变自增运算使单
36、个变量的值增,自减运算使单个变量的值减。量的值减。2.用法与运算规则用法与运算规则 自增、自减运算符都有两种用法:自增、自减运算符都有两种用法:(1)前置运算前置运算运算符放在变量之前:变量、运算符放在变量之前:变量、变量变量 先使变量的值增(或减),然后再以变化后的值先使变量的值增(或减),然后再以变化后的值参与其它运算,即参与其它运算,即先增减、后运算先增减、后运算。(2)后置运算后置运算运算符放在变量之后:变量、运算符放在变量之后:变量、变量变量 变量先参与其它运算,然后再使变量的值增(或减)变量先参与其它运算,然后再使变量的值增(或减),即,即先运算、后增减先运算、后增减。例例2.4
37、自增、自减运算符的用法与运算规则示例。自增、自减运算符的用法与运算规则示例。/*程序功能:自增、自减运算符的用法与运算规则示例程序功能:自增、自减运算符的用法与运算规则示例*/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=+x:x=7,y=7y=x-:x=6,y=7 思思考考题题:如果将案例“y=+x;”语句中的前置运算改为后置(y
38、=x+;),“y=x-;”语句中的后置运算改为前置(y=-x;),程序运行结果会如何?3.说明说明(1)自自增增、自自减减运运算算,常常用用于于循循环环语语句句中中,使使循循环环控控制制变变量量加加(或或减减),以以及及指指针针变变量量中中,使使指指针针指指向向下下(或上)一个地址。(或上)一个地址。(2)自增、自减运算符,不能用于常量和表达式。)自增、自减运算符,不能用于常量和表达式。例如,例如,5+、-(a+b)等都是非法的。等都是非法的。(3)在在表表达达式式中中,连连续续使使同同一一变变量量进进行行自自增增或或自自减减运运算时,很容易出错,所以最好避免这种用法。算时,很容易出错,所以最
39、好避免这种用法。2.8.2 逗号运算符(,)及其表达式逗号运算符(,)及其表达式语语言言提提供供一一种种用用逗逗号号运运算算符符“,”连连接接起起来来的的式式子子,称为逗号表达式。逗号运算符又称顺序求值运算符。称为逗号表达式。逗号运算符又称顺序求值运算符。1.一般形式一般形式(逗号运算符是所有运算符中级别最低的)(逗号运算符是所有运算符中级别最低的)表达式表达式,表达式表达式,表达式表达式n2.求解过程求解过程自自左左至至右右,依依次次计计算算各各表表达达式式的的值值,“表表达达式式n”的的值值即即为整个逗号表达式的值。为整个逗号表达式的值。例例如如,逗逗号号表表达达式式“a=3*5,a*4”
40、的的值值=60:先先求求解解a=3*5,得,得a=15;再求;再求a*4=60,所以逗号表达式的值,所以逗号表达式的值=60。又又例例如如,逗逗号号表表达达式式“(a=3*5,a*4),a+5”的的值值=20:先先求求解解a=3*5,得得a=15;再再求求a*4=60;最最后后求求解解a+5=20,所以逗号表达式的值所以逗号表达式的值=20。注注意意:并并不不是是任任何何地地方方出出现现的的逗逗号号,都都是是逗逗号号运运算算符符。很很多情况下,逗号仅用作分隔符。多情况下,逗号仅用作分隔符。例:例:a=(b=4)+(c=6)a=10表达式的值为表达式的值为 10例:例:a+=a-=a*a,设设a=12 自右而左的结合顺序自右而左的结合顺序 a=a-144=12-144=-132a+=-132 a=a+(-132)a=-264为什么要采用这样的复合运算符呢?为什么要采用这样的复合运算符呢?简化程序简化程序提高编译效率提高编译效率 (逆波兰式)(逆波兰式)Return