数据类型与运算规则幻灯片.ppt
数据类型与运算规则第1页,共83页,编辑于2022年,星期六本章内容本章内容n数据与数据类型数据与数据类型nC C语言的基本数据类型及其表示语言的基本数据类型及其表示n算术运算与赋值运算算术运算与赋值运算n其他运算其他运算n混合运算及数据类型转换混合运算及数据类型转换n应用示例应用示例第2页,共83页,编辑于2022年,星期六3.1 3.1 数据与数据类型数据与数据类型C C语言提供了以下一些数据类型。语言提供了以下一些数据类型。数据数据类型类型构造类型构造类型指针类型指针类型空类型(无值类型)空类型(无值类型)voidvoid枚举类型枚举类型 enumenum数组类型数组类型结构类型结构类型 structstruct联合类型联合类型 unionunion基本类型基本类型整型整型 intint字符型字符型 charchar实型(浮点型)实型(浮点型)单精度型单精度型 floatfloat双精度型双精度型 doubledouble第3页,共83页,编辑于2022年,星期六 3.2 C3.2 C语言的基本数据类型及其表示语言的基本数据类型及其表示常量常量:在程序运行过程中在程序运行过程中,其值不能被改变的量称为常量其值不能被改变的量称为常量变量变量:在程序运行过程中在程序运行过程中,其值能够被改变的量称为变量其值能够被改变的量称为变量一、常量与变量一、常量与变量第4页,共83页,编辑于2022年,星期六1.1.常量常量分类:直接常量、符号常量。整型 100,125,-100,0实型 3.14,0.125,-3.789字符型 a,b,2字符串“a“,“ab“,“1232“1)1)直接常量直接常量 数值常量、字符常量、字符串常量第5页,共83页,编辑于2022年,星期六2)2)符号常量符号常量用标识符代表常量。用标识符代表常量。u定义格式:定义格式:#define 标识符标识符 常量值常量值u一般用大写字母一般用大写字母u是宏定义预处理命令,不是是宏定义预处理命令,不是C语句语句目的:目的:u增加程序的可维护性。增加程序的可维护性。第6页,共83页,编辑于2022年,星期六例:例:符号常量的使用符号常量的使用#define PRICE 30#define PRICE 30#include#include void main()void main()int num,total;int num,total;num=10;num=10;total=num*PRICE;total=num*PRICE;printf(total=%dn,total);printf(total=%dn,total);说明:说明:程序中用程序中用#define#define命令行定义命令行定义PRICEPRICE代表常代表常量量30,30,此后凡在本文件中出现的此后凡在本文件中出现的PRICEPRICE都代表都代表30,30,可以和常量一样进行运算可以和常量一样进行运算说明:说明:用一个标识符代表一个常量的用一个标识符代表一个常量的,称为符称为符号常量号常量,即以标识符形式出现的常量。符号常量即以标识符形式出现的常量。符号常量的值在其作用域的值在其作用域(在本例中为主函数在本例中为主函数)内不能改内不能改变变,也不能再被赋值。也不能再被赋值。说明:说明:如再用赋值语句给如再用赋值语句给PRICEPRICE赋值是错误的。赋值是错误的。PRICE=40;/*PRICE=40;/*错误,不能给符号常量赋值。错误,不能给符号常量赋值。*/运行结果:运行结果:total=300total=300第7页,共83页,编辑于2022年,星期六2.2.变量变量变量值:变量值:变量代表内存中具有特定属性的一个存储单元,它用来存放数据,该数据就是变量的值,在程序运行期间,这些值是可以改变的。变量名:变量名:实际上是对应地址单元的符号化表示。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。第8页,共83页,编辑于2022年,星期六变量命名的规定:变量命名的规定:语言规定标识符只能由字母、数字和下划语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母线三种字符组成,且第一个字符必须为字母或下划线。或下划线。第9页,共83页,编辑于2022年,星期六注意:注意:编译系统将大写字母和小写字母认为是两个不同的字符。建议变量名的长度最好不要超过8个字符。在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词 (或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用”。第10页,共83页,编辑于2022年,星期六变量定义后必须赋初值才能使用,即进行变量初始化。变量的初始化变量的初始化数据类型说明符数据类型说明符 变量名1=常量或表达式,变量名2=常量或表达式,;或变量名=常量或表达式;初始化变量的简单格式初始化变量的简单格式变量的定义类型关键字 变量名1,变量名2,;第11页,共83页,编辑于2022年,星期六实例:实例:float f1,f2,f3;f1=2.46f;char c=a;long length,sum,width=23;length=120;第12页,共83页,编辑于2022年,星期六 二、整型数据及其表示二、整型数据及其表示1.1.整型常量的表示方法整型常量的表示方法 整型常量即整常数。在语言中,整常数整型常量即整常数。在语言中,整常数可用以下三种形式表示可用以下三种形式表示:(1)(1)十进制整数。十进制整数。如:如:123,-456,4123,-456,4。(2)(2)八进制整数。以八进制整数。以0 0头的数是八进制数。头的数是八进制数。如:如:01230123表示八进制数表示八进制数123123,等于十进制数,等于十进制数83;83;-011-011表示八进制数表示八进制数-11,-11,即十进制数即十进制数-9-9。第13页,共83页,编辑于2022年,星期六(3)(3)十六进制整数。以十六进制整数。以0 x0 x开头的数是开头的数是1616进制数。进制数。如:如:0 x123 0 x123,代表,代表1616进制数进制数123,123,等于十进制数等于十进制数 291291。-0 x12-0 x12 等于十进制数等于十进制数1818。2.2.整型变量整型变量 1)1)整型数据在内存中的存放形式整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的。如如:int i;/*定义为整型变量*/i=10;/*给i赋以整数10*/第14页,共83页,编辑于2022年,星期六注意:注意:十进制数十进制数1010的二进制形式为的二进制形式为10101010,Turbo C Turbo C 2.02.0中为一个整型变量在内存中分配中为一个整型变量在内存中分配2 2个字节个字节的存储单元的存储单元(不同的编译系统为整型数据分配的不同的编译系统为整型数据分配的字节数是不相同的,字节数是不相同的,VC+6.0VC+6.0则分配则分配4 4个字节)。个字节)。数值是以补码数值是以补码(complement)(complement)表示的。表示的。第15页,共83页,编辑于2022年,星期六2)2)整型变量的分类:整型变量的分类:共六种共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)注意:注意:括号表示其中的内容是可选的.第16页,共83页,编辑于2022年,星期六整数类型的有关数据:整数类型的有关数据:类型类型说明符 长度数的范围基本型 int 2字节-3276832767短整型 short2字节-215215-1 长整型 long 4字节-231231-1 无符号整型 unsigned 2字节 065535无符号短整型 unsigned short 2字节 065535无符号长整型 unsigned long 4字节 0(232-1)第17页,共83页,编辑于2022年,星期六3)3)整型变量的定义整型变量的定义:规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。例如例如:int a,b;int a,b;(指定变量、为整型)unsigned short c,d;unsigned short c,d;(指定变量、为无符号短整型)long e,f;long e,f;(指定变量、为长整型)第18页,共83页,编辑于2022年,星期六例例:整型变量的定义与使用整型变量的定义与使用#include#include void mainvoid main()()int a,b,c,dint a,b,c,d;/*;/*指定、为整型变量指定、为整型变量*unsigned unsigned;*指定为无符号整型变量指定为无符号整型变量*1212;-24-24;1010;printfprintf(,);,);说明:说明:说明:说明:可以看到不同种类的整型数据可以进行算术运算 运行结果:运行结果:,第19页,共83页,编辑于2022年,星期六例例:整型数据的溢出整型数据的溢出#include#include void main()void main()int a,b;int a,b;a=32767;a=32767;b=a+1;b=a+1;printf(“%d,%dn”,a,b);printf(“%d,%dn”,a,b);说明:说明:说明:说明:数值是以补码表示的。一个整型变量只能数值是以补码表示的。一个整型变量只能容纳容纳-32768-327683276732767范围内的数,无法表示大于范围内的数,无法表示大于3276732767或小于或小于-32768-32768的数。遇此情况就发生的数。遇此情况就发生“溢溢出出”。运行结果:运行结果:32767,-3276832767,-32768第20页,共83页,编辑于2022年,星期六3.3.整型常量的类型整型常量的类型 1)一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。2)一个整数,如果其值超过了上述范围,而在-2147483637+2147483647范围内,则认为它是为长整型。可以将它赋值给一个long int型变量。第21页,共83页,编辑于2022年,星期六3)如果所用的C版本(如Turbo C)分配给short int与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此一个int型的常量同时也是一个short int型常量,可以赋给int型或short int型变量。第22页,共83页,编辑于2022年,星期六4)一个整常量后面加一个字母u或U,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据)。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。第23页,共83页,编辑于2022年,星期六5)在一个整常量后面加一个字母l或L,则认为是long int型常量。例如123l.432L,0L等。这往往用于函数调用中。如果函数的形参为long int型,则要求实参也为long int型。第24页,共83页,编辑于2022年,星期六 三、实型数据及其表示三、实型数据及其表示1.1.浮点型常量的表示方法浮点型常量的表示方法两种表两种表示形式示形式小数小数指数指数0.1233e-3注意注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e 第25页,共83页,编辑于2022年,星期六规范化的指数形式:规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.例如例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e 其中的1.23456e21.23456e2称为“规范化的指数形式”。第26页,共83页,编辑于2022年,星期六2.2.浮点型变量浮点型变量1)1)浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占一个浮点型数据一般在内存中占4 4个字节个字节(32(32位位)。与整型数据的存储方式不同,浮点型。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。指数部分采用规范化的指数形式。尾数指数3个字节个字节1个字节个字节第27页,共83页,编辑于2022年,星期六类型类型 字节数字节数 数的范围数的范围 有效数字有效数字float float 4 4 10 10-37-37 10 1038 38 6767位位doubledouble型型 8 108 10-307-3071010308308 15161516位位long double long double 16 1016 10-4931-493110104932 4932 18191819位位2)2)浮点型变量的分类浮点型变量的分类 浮点型变量分为单精度(浮点型变量分为单精度(floatfloat型)、双精度型)、双精度(doubledouble型)和长双精度型(型)和长双精度型(long doublelong double)三类形式。)三类形式。第28页,共83页,编辑于2022年,星期六例例:浮点型数据的舍入误差浮点型数据的舍入误差#include#include void main()void main()float a,b;float a,b;a=123456.789e5;a=123456.789e5;b=a+20;b=a+20;printf(“%fn”,b);printf(“%fn”,b);说明:说明:说明:说明:一个单精度浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数运行结果:运行结果:12345678848.00000012345678848.000000 第29页,共83页,编辑于2022年,星期六3.3.浮点型常量的类型浮点型常量的类型 C编译系统将浮点型常量作为双精度来处理。例如例如:f=2.45678*4523.65 系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。第30页,共83页,编辑于2022年,星期六四、字符型数据四、字符型数据 1.字符常量字符常量(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符例a a,A A,1 1abcabc、“a a”第31页,共83页,编辑于2022年,星期六 有些以有些以“开头的特殊字符称为转义字符开头的特殊字符称为转义字符n 换行换行t 横向跳格横向跳格b 退格退格r 回车回车 反斜线反斜线 单引号字符单引号字符”双引号字符双引号字符ddd ddd表示表示1到到3位八进制数字位八进制数字xhh hh表示表示1到到2位十六进制数字位十六进制数字第32页,共83页,编辑于2022年,星期六 101 -A 012 -n 141 -a x61 -a 060 -0 483 -()例例 转义字符举例转义字符举例#include void main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);运行结果:运行结果:(屏幕显示屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C例例 void main()printf(“Yb=n”);运行结果:运行结果:屏幕显示:屏幕显示:=例如:第33页,共83页,编辑于2022年,星期六2.字符变量字符变量字符型变量用来存放字符,注意只能放一个字符。字符变量的定义形式如下:char c1,c2;可以用下面语句对c1,c2赋值:c1a;c2 b;一个字符变量在内存中占一个字节。第34页,共83页,编辑于2022年,星期六3.3.字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法将一个字符存放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。第35页,共83页,编辑于2022年,星期六例例:向字符变量赋以整数。向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);说明:在第和第4行中,将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1;c2;因为a和b的ASCII码为和运行结果:运行结果:97 9897 98第36页,共83页,编辑于2022年,星期六例例:大小写字母的转换大小写字母的转换#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);说明:说明:说明:说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。语言允许字符数据与整数直接进行算术运算。运行结果:运行结果:第37页,共83页,编辑于2022年,星期六4.4.字符串常量字符串常量字符串常量是一对双撇号括起来的字符序列。合法的字符串常量:How do you do.,CHINA,a,$123.45可以输出一个字符串,如printf(How do you do.);第38页,共83页,编辑于2022年,星期六a是字符常量,是字符串常量,二者不同。如:如:假设被指定为字符变量:char cc=ac=a;cCHINA;结论:结论:不能把一个字符串常量赋给一个字符变量。第39页,共83页,编辑于2022年,星期六规定:规定:在每一个字符串常量的结尾加一个在每一个字符串常量的结尾加一个“字符串结字符串结束标志束标志”,以便系统据此判断字符串是否结束。,以便系统据此判断字符串是否结束。中以字符中以字符作为字符串结束标志。作为字符串结束标志。如:如:如果有一个字符串常量如果有一个字符串常量”,实际上在,实际上在内存中是:内存中是:CHINA0它占内存单元不是个字符,而是个字符,最后它占内存单元不是个字符,而是个字符,最后一个字符为一个字符为0 0。但在输出时不输出。但在输出时不输出0 0。第40页,共83页,编辑于2022年,星期六 3.3 3.3 运算符与表达式运算符与表达式一、一、运算符简介运算符简介 计算机与运算密不可分,要运算就必须要有计算机与运算密不可分,要运算就必须要有运算符和运算量。那么,什么是运算符?什运算符和运算量。那么,什么是运算符?什么是运算量呢?么是运算量呢?例:例:1 12 2运算量运算符第41页,共83页,编辑于2022年,星期六二、运算符的分类二、运算符的分类1 1)根据参加运算的操作数的数目不同:)根据参加运算的操作数的数目不同:单目运算符单目运算符双目运算符双目运算符三目运算符三目运算符目:目:一个运算符能连接的对象的个数。一个运算符能连接的对象的个数。3.3 3.3 运算符与表达式运算符与表达式第42页,共83页,编辑于2022年,星期六2 2)按照完成的运算来分)按照完成的运算来分(1)(1)算术运算符算术运算符 (+,-,*,/,%,+,-+,-,*,/,%,+,-)(2)(2)关系运算符关系运算符 (,!)!)(3)(3)逻辑运算符逻辑运算符 (!(!,|,|)(4)(4)位运算符位运算符 (,|,|,)(5)(5)赋值运算符赋值运算符 (及其扩展赋值运算符)(及其扩展赋值运算符)(6)(6)条件运算符条件运算符 (?:)(?:)(7)(7)逗号运算符逗号运算符 (,),)3.3 3.3 运算符与表达式运算符与表达式第43页,共83页,编辑于2022年,星期六(8)(8)指针运算符指针运算符 (*和)和)(9)(9)求字节数运算符(求字节数运算符(sizeof)(10)(10)强制类型转换运算符(强制类型转换运算符((类型关键字)类型关键字))(11)(11)分量运算符(分量运算符(-)(12)(12)下标运算符()下标运算符()(13)(13)其他其他 (如函数调用运算符()(如函数调用运算符()3.3 3.3 运算符与表达式运算符与表达式第44页,共83页,编辑于2022年,星期六三、运算符的优先级与结合性三、运算符的优先级与结合性优先级:多个运算符组合运算时的先后顺序。优先级:多个运算符组合运算时的先后顺序。例:例:a-b*ca-b*c结合性:操作数两边的运算符优先级相同时,结合性:操作数两边的运算符优先级相同时,运算方向是从左向右,运算方向是从左向右,还是从右向左。还是从右向左。例:例:a-b+ca-b+c 3.3 3.3 运算符与表达式运算符与表达式第45页,共83页,编辑于2022年,星期六 表达式:表达式:使用运算符和括号将运算对象连接使用运算符和括号将运算对象连接起来、符合语法规则的式子起来、符合语法规则的式子。例:例:a*b/c-1.5+a*b/c-1.5+a C规定了运算符的优先级和结合性。在表达规定了运算符的优先级和结合性。在表达式求值时,按式求值时,按运算符的优先级别高低运算符的优先级别高低次序执次序执行。行。3.3 3.3 运算符与表达式运算符与表达式第46页,共83页,编辑于2022年,星期六四、四、C C运算符的优先级运算符的优先级高高 初等运算符初等运算符 ()、()、-单目运算符单目运算符 +、-、!、+、-算术运算符算术运算符 +、-、*、/、%关系运算符关系运算符 、=、=、=、!=!=逻辑运算符逻辑运算符&、|条件运算符条件运算符?:?:赋值运算符赋值运算符 =低低 逗号运算符逗号运算符 ,3.3 3.3 运算符与表达式运算符与表达式第47页,共83页,编辑于2022年,星期六五、五、C C运算符的结合性运算符的结合性 单目运算符:自右向左结合单目运算符:自右向左结合 双目运算符:自左向右结合双目运算符:自左向右结合例:例:void main()void main()int a,b=3,c=5;int a,b=3,c=5;a=b=c;a=b=c;printf(“%d,%d,%dn”,a,b,c);printf(“%d,%d,%dn”,a,b,c);3.3 3.3 运算符与表达式运算符与表达式第48页,共83页,编辑于2022年,星期六一、一、算术运算符和算术表达式算术运算符和算术表达式 1.1.基本的算术运算符基本的算术运算符:(加法运算符,或正值运算符。如(加法运算符,或正值运算符。如:、)、)(减法运算符,或负值运算符。如(减法运算符,或负值运算符。如:、)、)*(乘法运算符。如(乘法运算符。如:*)(除法运算符。如(除法运算符。如:)(模运算符,或称求余运算符,两侧(模运算符,或称求余运算符,两侧均应为整型数据均应为整型数据,如如:的值为)。的值为)。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第49页,共83页,编辑于2022年,星期六基本算术运算符优先级与结合性基本算术运算符优先级与结合性:优先级:优先级:*/%/%同级(高),同级(高),+-+-同级(低)同级(低)结合性:相同优先级运算符进行运算时的次序结合性:相同优先级运算符进行运算时的次序 自左向右(标记为自左向右(标记为 )3.4 3.4 算术运算与赋值运算算术运算与赋值运算第50页,共83页,编辑于2022年,星期六注意事项:注意事项:1 1)乘号和除号的书写方式。)乘号和除号的书写方式。2 2)整数除以整数的结果是整数。)整数除以整数的结果是整数。3 3)两整数相除,且其中一个为负,结果随)两整数相除,且其中一个为负,结果随编译系统的不同而不同。大多数按编译系统的不同而不同。大多数按“向零取向零取整整”的方法处理。的方法处理。4 4)算术表达式中经常使用圆括号来表示运)算术表达式中经常使用圆括号来表示运算的次序,括号必须成对使用,括号优先。算的次序,括号必须成对使用,括号优先。第51页,共83页,编辑于2022年,星期六算术运算实例算术运算实例1 1)参加运算的对象都是)参加运算的对象都是intint型,结果截取为型,结果截取为intint型型 10/3 10.0/3 1/2=10/5*3=11/3=11/3.=1./2=10/(5*3)=33.3333330633.6666670.50第52页,共83页,编辑于2022年,星期六2 2)求余运算的对象必须是整型:整数除法的)求余运算的对象必须是整型:整数除法的余数。余数。9%3=1%3=10%3=10%-3=-10%3=-10%-3=01-111-1第53页,共83页,编辑于2022年,星期六2.2.自增、自减运算符自增、自减运算符 作用:使变量的值增或减 +自增自增 -自减自减 注意:注意:1.+1.+和和-为单目运算,为单目运算,只能作用于变量只能作用于变量;2.2.只能对整型、字符型和指针变量进行运算。只能对整型、字符型和指针变量进行运算。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第54页,共83页,编辑于2022年,星期六功能:功能:+x x=x+1+x x=x+1 -x x=x-1 (-x x=x-1 (前缀前缀)x+x=x+1 x+x=x+1 x-x-x=x-1 (x=x-1 (后缀后缀)3.4 3.4 算术运算与赋值运算算术运算与赋值运算第55页,共83页,编辑于2022年,星期六自增自增(自减自减)有前缀和后缀之分。有前缀和后缀之分。前缀形式:前缀形式:先自增(自减),再引用先自增(自减),再引用 后缀形式:后缀形式:先引用,再自增(自减)先引用,再自增(自减)前缀与后缀的区别:前缀与后缀的区别:y=+x;x=x+1;y=x;/xy=+x;x=x+1;y=x;/x先加先加1 1再赋再赋值值 y=x+;y=x;x=x+1;/xy=x+;y=x;x=x+1;/x先赋值再加先赋值再加1 1第56页,共83页,编辑于2022年,星期六实例实例(1)+i;i+;(1)+i;i+;因为在表达式中没有其它运算,结果一样。因为在表达式中没有其它运算,结果一样。(2)x=1;y=+x;(2)x=1;y=+x;结果结果:x=2,y=2 y=+x;x=x+1;y=x;x=2,y=2 y=+x;x=x+1;y=x;在做赋值运算之前,在做赋值运算之前,x x先加先加1 1,然后将,然后将x x赋给赋给y y。(3)x=1;y=x+;(3)x=1;y=x+;结果结果:x=2,y=1 y=x+;y=x;x=x+1;x=2,y=1 y=x+;y=x;x=x+1;先将先将 x x 赋值给赋值给 y,y,然后然后 x x 再加再加1 1实例实例第57页,共83页,编辑于2022年,星期六实例实例已知:已知:int x=2,y=5,int x=2,y=5,z;z;z=+x;z=+x;z=+x*z=+x*+y;+y;z=x+*z=x+*+y;+y;z=+x*z=+x*y+;y+;z=x+*z=x+*y+;y+;x=3,z=3x=3,y=6,z=3*6=18x=3,y=6,z=2*6=12x=3,y=6,z=3*5=15x=3,y=6,z=2*5=10 第58页,共83页,编辑于2022年,星期六注意,以下操作是错误的:注意,以下操作是错误的:x=+(i+j)+1;x=+(i+j)+1;/*/*如果可用,那么自增之如果可用,那么自增之后后 得到的值存放在什么地方呢?得到的值存放在什么地方呢?*/intint d=+3;d=+3;/3/3是常量,常量值不能改变是常量,常量值不能改变3.4 3.4 算术运算与赋值运算算术运算与赋值运算第59页,共83页,编辑于2022年,星期六自增和自减运算符使用十分灵活,但在很多情自增和自减运算符使用十分灵活,但在很多情况下可能出现歧义,产生意想不到的副作用。况下可能出现歧义,产生意想不到的副作用。例:例:int i=3;int i=3;printf(printf(“%d,%dn%d,%dn”,i,i+);,i,i+);输出结果输出结果 3,33,3?4,34,3?不要写出别人看不懂的也不要写出别人看不懂的也不知道系统会怎样执行程不知道系统会怎样执行程序序第60页,共83页,编辑于2022年,星期六又如:又如:i i的初值为的初值为3 3,有以下表达式,有以下表达式 (i+)+(i+)+(i+)(i+)+(i+)+(i+)表达式内的值为多少呢?表达式内的值为多少呢?编程时要遵循安全第一、易于理解的原则,编程时要遵循安全第一、易于理解的原则,可写成:可写成:i=3;i=3;a=i+;a=i+;b=i+;b=i+;c=i+;c=i+;d=a+b+c;d=a+b+c;第61页,共83页,编辑于2022年,星期六说明说明(1 1)自自增增、自自减减运运算算,常常用用于于循循环环语语句句中中,使使循循环环控控制制变变量量加加(或或减减),以以及及指指针针变变量量中中,使使指指针针指指向向下(或上)一个地址。下(或上)一个地址。(2 2)自自增增、自自减减运运算算符符,不不能能用用于于常常量量和和表表达达式式。例例如如,5+5+、-(a+b)-(a+b)等都是非法的。等都是非法的。(3 3)在在表表达达式式中中,连连续续使使变变量量进进行行自自增增或或自自减减运运算算时时,很容易出错,所以最好避免这种用法。很容易出错,所以最好避免这种用法。例:例:不要写成不要写成i+ji+j的形式,而应写成的形式,而应写成 (i+)+j(i+)+j的形式的形式 第62页,共83页,编辑于2022年,星期六二、赋值运算符(双目)二、赋值运算符(双目)赋值符号赋值符号“”就是赋值运算符,它的作用是就是赋值运算符,它的作用是将一个数据赋给一个变量。将一个数据赋给一个变量。如如=;是执行一次赋值操作(或称赋值运算),把常量赋是执行一次赋值操作(或称赋值运算),把常量赋给变量。给变量。也可以将一个表达式的值赋给一个变量。也可以将一个表达式的值赋给一个变量。如:如:a=3*5;a=3*5;3.4 3.4 算术运算与赋值运算算术运算与赋值运算第63页,共83页,编辑于2022年,星期六三、赋值组合运算符(双目)三、赋值组合运算符(双目)表示方式:表示方式:e1 op=e2 e1 op=e2 等价于:等价于:e1=e1 op (e2)e1=e1 op (e2)其中,其中,opop为下列为下列1010个运算符之一:个运算符之一:+*/%|&*/%|&e1 e1为可以进行赋值操作的变量;为可以进行赋值操作的变量;e2e2为合法的表达式或常量。为合法的表达式或常量。结合性:从右向左。结合性:从右向左。第64页,共83页,编辑于2022年,星期六例:例:x+=2;x=x+2;x*=y+1;x=x*(y+1);不等价不等价 x=x*y+1;注意:如果赋值号右侧是包含若干项的表达式,则相当于它有括号。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第65页,共83页,编辑于2022年,星期六赋值运算中,将赋值运算符右边的数据转变赋值运算中,将赋值运算符右边的数据转变为左边的变量类型。为左边的变量类型。说明:说明:多种数据类型进行混合运算时,将低类型的数据多种数据类型进行混合运算时,将低类型的数据转换为高类型。转换为高类型。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第66页,共83页,编辑于2022年,星期六四、赋值表达式四、赋值表达式由赋值运算符将一个变量和一个表达式连接由赋值运算符将一个变量和一个表达式连接起来的式子称为起来的式子称为“赋值表达式赋值表达式”。一般形式为一般形式为:例如例如:“5 5”是一个赋值表达式是一个赋值表达式 3.4 3.4 算术运算与赋值运算算术运算与赋值运算第67页,共83页,编辑于2022年,星期六对赋值表达式求解的过程是:对赋值表达式求解的过程是:求赋值运算符右侧的“表达式”的值;赋给赋值运算符左侧的变量。例如例如:赋值表达式赋值表达式“=3*5=3*5”,执行表达式后,变,执行表达式后,变量量a a的值也是的值也是1515。注意注意:一个赋值表达式应该有一个值一个赋值表达式应该有一个值,赋值表达,赋值表达式的值就是被赋值的变量的值。式的值就是被赋值的变量的值。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第68页,共83页,编辑于2022年,星期六赋值表达式也可以包含复合的赋值运算符。赋值表达式也可以包含复合的赋值运算符。如:如:a+=a-=a*aa+=a-=a*a分析分析:此赋值表达式的求解步骤如下此赋值表达式的求解步骤如下 先进行先进行“*”的运算,的运算,它相当于它相当于*,a a的值为的值为144144132132。再进行再进行“”的运算,相当于的运算,相当于=a+=a+(-132)(-132),a a的值为的值为132-132132-132-264-264。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第69页,共83页,编辑于2022年,星期六 将赋值表达式作为表达式的一种,使赋值操作不仅将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中其他语句(如输出语句、循环语句等)中.如:如:printf(%dprintf(%d,a=b);a=b);分析分析:如果如果b b的值为的值为3 3,则输出则输出a a的值的值(也是表达式也是表达式a=ba=b的值的值)为为3 3。在一个语句中完成了赋值和。在一个语句中完成了赋值和输出双重功能。输出双重功能。3.4 3.4 算术运算与赋值运算算术运算与赋值运算第70页,共83页,编辑于2022年,星期六一、逗号运算符一、逗号运算符 逗号运算符逗号运算符:将两个表达式连接起来将两个表达式连接起来,又称为又称为“顺顺序求值运算符序求值运算符”。如:如:5,3.5 3.5 其他运算其他运算 一般形式一般形式:表达式,表达式表达式,表达式求解过程:求解过程:先求解表达式,再求解表达式。整个逗号先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。表达式的值是表达式的值。逗号表达式 的值为14第71页,共83页,编辑于2022年,星期六例:例:逗号表达式逗号表达式*5 5,*分析分析:赋值运算符的优先级别高于逗号运算符,赋值运算符的优先级别高于逗号运算符,因因此应先求解此应先求解*5.5.的值为5,然后求解*,得。整个逗号表达式的值为。一个逗号表达式又可以与另一个表达式组成一一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式个新的逗号表达式 如如:(*,*),a+5,a+5 先计算出的值等于,再进行先计算出的值等于,再进行*的运算得的运算得6060(但值未变,仍为(但值未变,