《第2章数据类型运算符与表达式》由会员分享,可在线阅读,更多相关《第2章数据类型运算符与表达式(39页珍藏版)》请在金锄头文库上搜索。
1、第第2章章 数据类型、运算符与表达式数据类型、运算符与表达式l2.1C2.1C语言的数据类型语言的数据类型l数据是程序的操作对象,一个完整的程序主要由数据结构、算法和采用结构化方法来表示的计算机语言三要素组成。l数据结构即对数据的描述,在C语言中,系统提供的数据结构,是以数据类型的形式出现的。一个数据的类型决定了这个数据的取值范围和能够对它进行的操作,本节主要介绍C语言的基本数据类型。lC的所有数据类型及其关系如下图所示:沂孜蛰蓉溶码说啡躇皇制膊鳖否兵路苯兰缸笋痢灸擦况帜煮姑嗡宽矛骆培第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.2常量与变量常量与变量l2.2.12.2.1常量常
2、量l1.1.常量的概念常量的概念l在程序运行过程中,其值不能被改变的量称为常量。常量根据数据的类型不同又具体分为整型常量、实型常量和字符常量之分。l2.2.常量的类型常量的类型l(1)整型常量:这类常量数据的类型为整型,例如:12,0,-100l(2)实型常量:这类常量数据的类型为实型,例如:2.3,-3.4l(3)字符常量:这类常量数据的类型为字符型,例如: A、5和+等。斗文絮秆荷苞编瘁梁余渍斑批耘持酷锣割恰揣渡伸眷冷穗瞬殷特供疡钻玲第2章数据类型运算符与表达式第2章数据类型运算符与表达式l(4)符号常量:用标识符代表的常量,例如:#define PI 3.14 中的“PI”就是符号常量,
3、经过这样定义后,凡在此程序中出现的PI都代表3.14,假若PI的精度要提高到3.14159,则只需要修改#define PI 3.14159,以后程序中所有的PI值都被改为3.14159。l2.2.22.2.2变量变量l1 1变量的定义变量的定义l在程序运行过程中,其值可以被改变的量称为变量。l2 2变量名变量名l每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。笨寐录词额脑殖肩挪私哟炎棕窍陡部谤危姬浩朔埃警嗓唯巾淡蓄闽筐腾瑚第2章数据类型运算符与表达式第2章数据类型运算符与表达式3.标识符及其命名规则标识符及其命名规则l标识符是变量名、数组名、自定义类型名(如:枚举类型、结构类型和
4、共用类型)、自定义函数和标号等的统称。标识符的命名规则如下:l(1)有效字符:只能由字母、数字和下划线组成,并且必须以字母或下划线开头。l(2)有效长度:随所使用的操作系统环境而异,但是至少是前个字符有效。如果超过系统所识别的长度,则超长部分被舍弃。例如,由于student_no和student_na的前个字符相同,有的系统认为这两个变量,是一回事而不加区别。l(3)C语言的关键字不能用作变量名。纬泞粱撂战容讽诡滓酞怨敷爹牌饲帅知喊融任沈语陌舍苏耶颖靶斑游违窝第2章数据类型运算符与表达式第2章数据类型运算符与表达式l提示:提示:lC语言对标识符和关键字中的英文字母大小敏感,即同一字母的大小写,
5、被认为是两个不同的字符。这一点与其它高级语言不同。因此在用C语言编程时使用标识符和关键字时,务必注意大小写。通常,变量名和函数名中的英文字母用小写,以增加可读性。l标识符命名的良好习惯见名知意:l所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。l例如,name_xm(姓名)、student number_xh(学号)、score_df(得分)。仍狮脓改址楼韭军火汰圃缝宠耳瞳拓疵果弥第疚忿帖缔货扶架支掘诅愿绅第2章数据类型运算符与表达式第2章数据类型运算符与表达式l4 4变量的值变量的值l在程序运行过程中,变量值存
6、储在内存中。在程序中,通过变量名来引用变量的值。l注意:变量值是变量的内容,被存放在一个存储单元中,而变量名则是这个存储单元中的符号地址,在程序中使用某个变量的过程是:通过变量名找到相应的存储地址,再从该存储单元中读取数据。l在语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。l5 5变量的定义格式变量的定义格式l变量定义的一般格式:存储类型 数据类型 变量名, 变量名2;l例如,float radius, length, volume;捏铡雌缅太熄居钞尚署灶和腊溶橇酞蚜碉艾捧捞傅洋填物镀请葬忍躯像德第2章数据类型运算符与表达式第2章数据类型运
7、算符与表达式l6 6变量的初始化变量的初始化l变量初始化的一般格式:存储类型 数据类型 变量名=初值, 变量名2=初值2;l例如:float radius=4.5,length=5.2, volume; 酷哈抗葱卒撂去梢玛诣肪磨撂冈胖凑金邪射裂踢里咎舱学摹茁订恫器敝秩第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.3整型数据整型数据l数据类型为整型的常量和变量。l2.3.12.3.1整型常量整型常量l整型常量即整数,在语言中可用三种形式表示整型常量,每种形式的数据都有特殊标记。在C程序中通常使用十进制常量。l整型常量的三种表示形式整型常量的三种表示形式l(1)十进制数表示形式。例如
8、23、0、-16。l(2)八进制数表示形式。以数字0开头是八进制数的标记。例如023,即八进制数的23(相当于10进制数的19)。l(3)十六进制数表示形式。以数字0加小写字母x开头作为十六进制数的标记。例如0x23,即十六进制数的23(相当于10进制数的35)。2说明:说明:在一个整型常量后加一个字母l或L,则认为是Long int型。沈店雇渔搅币余它肋烫搏弃叔咨笛卯塔废交矫烽瘦捷废秘哪倚疽急葱蒙秋第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.3.2整型变量整型变量l整型变量的基本类型符为int。根据变量数值的取值范围不同,再加上特定的前缀,又有派生出多种类型。l1. 1. 整
9、型变量的分类整型变量的分类l整型变量根据其占用内存字节数的不同分为以下类型:l(1)基本整型。类型关键字为int。l(2)短整型。类型关键字为short int。l(3)长整型。类型关键字为long int。l在上述三种类型前再加上无符号整型标记unsigned,只能用来存储无符号整数。又有下列类型的整型变量:l(4)无符号基本型。类型关键字为unsigned int。l(5)无符号短整型。类型关键字为unsigned short。l(6)无符号长整型。类型关键字为unsigned long。音氧贸涩搅患瞒龋判衷转槐蛇矾凤隅奉嗡屑敖制毙抚撑譬贮陇验寝喉拔障第2章数据类型运算符与表达式第2章数据
10、类型运算符与表达式l2. 2. 整型变量的值域整型变量的值域lC语言中没有规定以上各类数据所占内存字节数,只要求一个short 型数据不长于int型数据,int型数据又不长于long型数据。具体实现由各计算机系统自行决定。表2-1列出了不同计算机上整型变量数值的取值范围。略窜蛋父棉琴搽种庆签吟划住爷背继略侧质蛊忆庙练天酸钩羽捎蝴森鸡附第2章数据类型运算符与表达式第2章数据类型运算符与表达式l3. 3. 类型匹配规则类型匹配规则l整型变量的类型匹配规则为:一个整型常量,可以赋给能容纳下其值的整型变量。l例如,其值在-32768327687的整型数,可以赋给int型变量和long int型变量,而
11、其值在-2147483648-327687或3276882147483647的整型数,就只能赋给long int型变量。经笛图犬瞥腐撂绥讥铝肢琴孕俐溪稠貌戮巢财畅舍赏挫乎押润椒朴榷于教第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.4实型数据实型数据l2.4.12.4.1实型常量实型常量l实型常量的表示形式实型常量的表示形式l在语言中实型常量又称实数或浮点数,有两种表现形式:l(1)十进制形式。它由整数部分、小数点和小数部分三部分组成。当整数部分为0或小数部分为0时都可省略,但小数点不能省略。例如3.14、10.8、123.、 .12、0.0等都是十进制数的表示形式,但该种表示形式
12、不适合表示太小或太大的数。 l(2)指数形式:它由三部分组成:尾数、大写字母E(或小写字母e)、整型指数。它适合表示比较小或比较大的数。字符E前必须有数字,且E后的指数必须为整数。例如3.0+5或3.0e+5都表示3.0105。1.23E-2表示1.23010-2或0.0123。辞史芭色抓候敏稚口王喉港训握丘奶捅贫序萧轰辉韧芜票押铀方罚筷嫂怒第2章数据类型运算符与表达式第2章数据类型运算符与表达式l实型常量的类型说明实型常量的类型说明l实型常量不分float型和double型。如果实型常量跟有后缀“f”或“F”,则被当作float型,否则C编译系统总是将其处理成双精度型。l一个实型常量,可以赋
13、给一个实型变量(float型或double型)。l2.4.22.4.2实型变量实型变量l1 1实型变量在内存中的存放情况实型变量在内存中的存放情况l实型变量在内存中通常按指数形式存储存,并分成小数部分和指数部分分别存放。小数部分采用规范化的指数方式表示。不同类型的实型变量所占存储空间不同,而小数部分占位多少关系到数据的精度的高低,占位越多数据的有效位数越多,精度越高;指数部分占位越多,则可表示的数值范围越大。澎唇肩纫叙稍倪澳漏扒案萍赘彪隆喊矾办剿卷平楼休弦阿接超椿诡讥填察第2章数据类型运算符与表达式第2章数据类型运算符与表达式l2 2实型变量的分类实型变量的分类l语言的实型变量,分为两类:l(
14、1)单精度型。用float表示,一般占字节(32bit)、提供6位有效数字,数据的取值范围是:-3.410-383.41038。例如:float x,y; 指定x,y为单精度实型变量。l(2)双精度型。用double表示,一般占个字节(64bit)、提供1516位有效数字,数据的取值范围是:-1.710-3081.710308。例如:double a,c; 指定a,c为双精度实型变量。l(3)长双精度型。用long double表示,一般占16个字节(128bit)、提供1819位有效数字,数据的取值范围是:-1.210-49321.2104932。长双精度型用得很少。峭久实薄筒毅弦昧眯纤虽厂
15、卞蒲到存罐吕蝗屿拙絮喝勉近拼辟打炕谨恃胰第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.5字符型数据字符型数据l2.5.12.5.1字符常量字符常量l1 1定义定义lC语言中用一对单引号括起来的单个字符,称为字符常量。例如,a、 A、等,其中a、 A是两个不同的字符常量。l2.2.转义字符转义字符l语言还有一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符,所谓转义字符是指将反斜杠“ ”后面的字符转变为另外一种含义,使用这种方法可以表示任何输出的字母字符、专用字符、控制字符图形字符。表2-2所示。倡颅帛拨三侣员雄柜动汪溯刨政锄堤履携致刹匝铅甸沾勉穗姐瞬理忍抚诌第2章数据类型运
16、算符与表达式第2章数据类型运算符与表达式l 例题例题2.12.1用转义字符输出可打印字符和不可打印字符。l/*程序功能:转义字的应用*/lmain()l printf(“pleasetx48n”); l l程序说明:lprintf函数直接原样输出双引号内的普通字符please,然后遇到转义字符“t”其作用是横向跳到下一个输出区(每个输出占8列),即在第9列输出字符H。(因为please占了6列,所以第一个输出区还剩2列,H字符输出在第9列。 程序运行结果如下: pleaseH选佑巨黍庚苟架蔫慑呐郝磋塑铜伪逐器宫忧翌鳖锹绿雨拣形浦牢迎彦杂搐第2章数据类型运算符与表达式第2章数据类型运算符与表达式
17、2.5.2字符变量字符变量l1 1字符变量的定义字符变量的定义l字符变量是用来存放字符常量的,并且只能放一个字符,而不是一个字符串。它的类型关键字用char,占用1字节的内存单元。l例如,char c1, c2; /*定义两个字符变量:c1,c2*/lc1=a; c2=b; /*给字符变量赋值*/l字符变量数据的存储形式及其使用特点字符变量数据的存储形式及其使用特点l将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。例如,字符a的ASCII码值为97,在内存中变量c1的一个字节中存放的是01100001这样一个二进制数。所以,字符数据在内存中存
18、储的是字符的ASCII代码(相当于一个无符号整数),其形式与整数的存储形式一样,所以语捌誓琅臃俞缴舞欢旺仰鞠积溺圭片孕淘溅闲况肿闰更汰掩作檀恃瘁肄董髓第2章数据类型运算符与表达式第2章数据类型运算符与表达式l言允许字符型数据与整型数据之间通用,并且允许对字符数据进行算术运算,当然是对它们的ASCII码值进行算术运算。l 例题例题2.2 2.2 对字符型数据进行算术运算并输出字符变量的字符形式及整数形式。l/*程序功能:将字母进行大、小写转换,并输出转换结果和字母的ASCII码值*/l main()main()l char c1,c2; char c1,c2;l c1=a; c2=B; c1=a
19、; c2=B; l c1=c1-32; c2= c2+32 ; /* c1=c1-32; c2= c2+32 ; /*字母的大、小写转字母的大、小写转换换*/*/l printf( printf(“c1=%c,c2=%cnc1=%c,c2=%cn”,c1,c2); /*,c1,c2); /*以字符形式输出以字符形式输出字符变量字符变量*/*/l printf( printf(“c1=%d,c2=%dnc1=%d,c2=%dn”,c1,c2); /*,c1,c2); /*以整数形式输出以整数形式输出字符变量字符变量*/*/l 程序运行结果: c1=A,c2=b c1=65,c2=98 橡偷婪炼器
20、贞尤斡豹扎跌闲宇知慑物责衬剐藤疯离呼舍湛圈稿神钡阶豢秋第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.5.3字符串常量字符串常量l1 1字符串常量的定义字符串常量的定义l字符串常量是用一对双引号括起来的字符序列。l字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。l例如,“How are you.”、“Good morning.”等,都是字符串常量,其长度分别为12和13(空格也是一个字符)。l如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。l例如:C:msdosv6.22 C:msdosv6.
21、22 “C:msdosv6.22C:msdosv6.22”lI say: I say: “I am a student.I am a student.” “I say: I say: “ I I am a student.am a student.” ”东鹰脚挥烤文摹过负肪粹缺付剑董捡吨券白皆报述指饯卓竣痘屯你勋埠靖第2章数据类型运算符与表达式第2章数据类型运算符与表达式l2 2字符串的存储字符串的存储lC语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。l如果有一个字符串为“CHINA”,则它在内存中的实际存储如下图所示:该字符串实际占用内存空间是6个字节,
22、最后一个字节是系统自动加上的字符0。比如在执行语句print(“CHINA”)时,一个一个字符输出,直到遇上0字符,就知道此字符串结束,输出停止,而且输出时不会输出0。值得注意的是:在源程序中书写字符串常量时,不需要加结束字符0,否则画蛇添足。昨跟卡棕攒唬扳耕蛹表徒腆旬式畏描倘豫迸肾捐逞般领尿歌乖拟咐捶泪裔第2章数据类型运算符与表达式第2章数据类型运算符与表达式l提示提示:l字符常量a与字符串常量a是两回事,两者有如下不同之处:l(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;l(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;l(3)存储要
23、求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。笛稼席招涩慢覆迎笋萧板虐缘雁呵冕悠疚筐傲浙传骋茫曼胖育是桩讨级狗第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.6算术运算与算术表达式算术运算与算术表达式l运算符是表示某种操作的符号,在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。运算符的操作对象称为运算数,用运算符把运算数连接起来的一个有意义的式子就叫做表达式。l2.6.12.6.1算术运算符算术运算符lC语言规定的基本的算术运算符有:l1加法运算符或取正值运算符:+,如1+2、+2。l2减法运算符
24、或取负值运算符:-,如2-1、-2。l3乘法运算符:*,如1*2。l4除法运算符:/,如5/2。注意,C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5 / 2 = 2。如果操作数中有负数,取整通常采取“向零取整”的方法。例如,5/-3=-1。砷踌衅婉阉站热材晚杭吟婿望酶邓颁麦吕玲甫贯蜕甭现晨研柱夸直拆韵棠第2章数据类型运算符与表达式第2章数据类型运算符与表达式l5求余运算符,或称模运算符:%,运算符两边均要求是整数,否则出错。如9%5,结果为4。l2.6.22.6.2表达式及算术表达式表达式及算术表达式l1 1表达式表达式l表达式的概念:用运算符和括号将运算对象(常量、变量和函数
25、等)连接起来的、符合语言语法规则的式子,称为表达式。l单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为简单表达式,其它表达式称之为复杂表达式。l2 2算术表达式算术表达式l算术表达式的概念:当表达式中的运算符都是算术运算符时,此表达式即为算术表达式。例如,2+3和a*b -6%9+a/ (x + y)等,都是算术表达式。炼焰宙栅浅脖访夷恩额妊鸵溺竟让舵致办摩攘快躁映刨尖她减析媒勾距炼第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.6.3运算符的优先级与结合性运算符的优先级与结合性l1 1语言中运算符的优先级和结合性。语言中运算符的优先级和结合
26、性。l所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。l自左至右的结合方向,称为左结合性。反之,称为右结合性。l结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。l2 2表达式求值表达式求值l(1)按运算符的优先级高低次序执行。例如,先乘除后加减。l(2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行。本割晶耀碱领躯山歌主吮括签嫉星肘库驼奏狗炎氏蔓家戍摆绦膨迎购屋货第2章数据类型运算符与表达式第2章数据类型运算符与表达式l例如,算
27、术运算符的结合方向是“自左至右”,即:在执行“a b + c”时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。l2.6.42.6.4数据类型转换数据类型转换l1 1运算过程中数据类型的自动转换运算过程中数据类型的自动转换l在语言中,整型、实型和字符型数据间可以混合运算(因为字符数据与整型数据可以通用)。l如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则如图2-3所示。溢刘俯枷佩搏镊哨坞企缆最扼蜀蔓么昏摄湃贾尚楚辽君能柠城南握土浪敝第2章数据类型运算符与表达式第2章数据类型运算符与表
28、达式l2 2强制数据类型转换强制数据类型转换l除自动转换外,语言也允许强制转换。l数据类型强制转换的一般格式为:l( (要转换成的数据类型要转换成的数据类型)()(被转换的表达式被转换的表达式) )l当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。l例如:l(double)a (double)a (等价于(等价于(double)(a) /*(double)(a) /*将变量将变量a a的值转换的值转换成成doubledouble型型*/*/l(int)(x + y) (int)(x + y) /* /*将将x+yx+y的结果转的结果转换成换成intint型型*/*/l(float
29、)5 / 2(float)5 / 2(等价于(等价于(float)(5) / 2(float)(5) / 2) /* /*将将5 5转换成实转换成实型,再除以型,再除以2 2(=2.5=2.5)*/*/l(float)(5 / 2) (float)(5 / 2) /* /*将将5 5整除整除2 2的结的结果(果(2 2)转换成实型()转换成实型(2.02.0)*/*/跪墟击猜谬乎箕龄尼绢乱大寒拯墅侗卵巫熔特漂锚顿搁担焰吹翠往铆砖搜第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.7赋值运算与赋值表达式赋值运算与赋值表达式l2.7.1.2.7.1.赋值运算赋值运算l1 1赋值运算符赋值
30、运算符l赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值(或一个数据)赋给一个变量。赋值运算符的一般形式为: l变量变量 = = 赋值表达式赋值表达式 l例如:a = 5 /*将5赋给变量a*/lx = (a + 3) * 5 / 2 /*将表达式(a+3) * 5 / 2的值赋给变量x*/穴灵桂歹族壕雹剔毡演登哺坤堰抵忍蔓户端偶曾卫朱虽疙胳氦壳氨敬笆吻第2章数据类型运算符与表达式第2章数据类型运算符与表达式l2 2类型转换类型转换l如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。具体有以下几种情
31、况:l(1)将实型数据(单、双精度实数)赋给整型变量时,舍弃实数的小数部分,在内存中以整数形式存放,如a为整型变量,运行“a=1.2”的结果是a的值为1。l(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点形式存放在变量的存储单元中。如有a=12,而a是float变量,运行时,先将12转换成12.00000,然后再存放到a中。若a是double型变量,则先将12转换成12.0000000000000,再以双精度浮点数形式存放到变量a中。鹅穴娃猛烧痛叔假粳量眷溉邱猖晨煌堵矾仲自藉垛急位娱阳浊甭侨皿窍靠第2章数据类型运算符与表达式第2章数据类型运算符与表达式l(3)将一个双精度数据赋给一个单
32、精度变量时,截取前面7位有效数字,存放到单精度变量的存储单元中,但就注意范围不能溢出。如:lfloat f;ldouble d=123.456789e100;lf=d;l就出现溢出错误。桓苯漂设凋踪尚雌搓淳屡缅碱朴椽嘴金璃邓体穿维疗泰缉享晶阳尉租仟胜第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.7.2.复合赋值运算复合赋值运算l1 1复合赋值运算符复合赋值运算符l复合赋值运算符是由赋值运算符“=”之前再加上一个双目运算符构成的。例如:li + = 1 (“+ =”:为复合赋值运算符)la * = b - 2 (“* =”:为复合赋值运算符)lr % = 3 (“% =”:为复合赋
33、值运算符)lC语言规定了如下10种复合赋值运算符:l+=,-=,*=,/=,%=; /*复合算术运算符(5个)*/l&=,=,|=,=;/*复合位运算符(5个)*/l2 2复合赋值运算复合赋值运算l复合赋值运算的一般格式为: l 变量 双目运算符双目运算符 = = 表达式 l l 复合赋值运算符赢茧偿恨才放陕击惩浮急鹿仔活漫耽零菇厨昂协锡犹喝抱涩愚啼胜嫌褪乏第2章数据类型运算符与表达式第2章数据类型运算符与表达式l它等价于:变量 = 变量 双目运算符 (表达式)。l当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。l对于前面的例子:li + = 1 /*等价于i = i +
34、1 */la * = b 2 /*等价于a = a * (b- 2) */lr % = 3 /*等价于r = r % 3*/l注意:a * = b 2等价于a = a * (b- 2),而不是a = a * b - 2 。贡主袋邪满烦牢坑惑掀劲甸紫搔堤哪这豌每讥固树乱徊矢后赎潭辈兆介炳第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.7.3.赋值表达式赋值表达式l1 1赋值表达式赋值表达式l由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。赋值表达式的一般格式:l l2 2赋值表达式的值赋值表达式的值l对赋值表达式的求解过程是:将赋值运算符右侧的表
35、达式的值赋给左边的变量。赋值表达式的值就是被赋值变量的值。任何一个表达式都有一个值,赋值表达式也不例外。l例如:x=5 这个赋值表达式的值为5(x变量的值也是5)l又例如:a+=a-=a * a,设a=5求a的值l右结合 a+= a= a - a * a,先计算a = a - a * a l a= 5 - 5 * 5 = -20,再计算a+=al a= a + a= -20 + (-20) = -40 所以a等于-40整个赋值表达式的值也等于-40。领逛歪丙奇鄂敬继故荔篙桶孜式垮涛赁眠蛔咙讣荐身翌油决警想畅头版骑第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.8 C语言特有的运算和
36、运算符语言特有的运算和运算符l2.8.1 2.8.1 自增(自增(+)、自减()、自减(-)运算)运算l1 1自增和自减运算符自增和自减运算符l使单个变量的值增加的运算符称为自增运算符,用“”表示。使单个变量的值减的运算符称为自减运算符,用“”表示。l2 2自增和自减运算符的用法与运算规则自增和自减运算符的用法与运算规则l自增、自减运算符都有两种用法:l前置运算运算符放在变量之前:l运算式为:变量、变量l先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减、后运算。l例如:j = +i 设i=2 先计算i=i+1=3 后赋值 j=3,所以结果是i =3,j=3。编裸梯忿吧树巾疟娠流
37、倦椿意遣殉滞掏饮蒋捶烩曾抿鹿普潜嫁路撇眩猖徐第2章数据类型运算符与表达式第2章数据类型运算符与表达式l后置运算运算符放在变量之后:l运算式为:变量、变量l变量先参与其它运算,然后再使变量的值增(或减),即先运算、后增减。l例如:j = i+ i的初值还是2,但此时是先赋值 j = i 后计算i=i+1=2+1=3,所以结果是i =3,j =2。因此j = +i和j = i+两式中j的结果是不同的,前者j=3,后者j =2。l自增、自减运算符的用法与运算规则示例l 例题例题2.32.3 自增、自减运算符使用练习l/*程序功能:自增、自减运算符的用法与运算规则示例*/lmain()main()l
38、int x=1, y; int x=1, y;l printf( printf(“x=%dnx=%dn”,x);,x); /*输出x的初值*/鲁夫罩严统舌硬玄咕苫汝锭棕腊姬都营禄素件酮连半久筐乡居糕爆揖哆愤第2章数据类型运算符与表达式第2章数据类型运算符与表达式l y = +x; /*前置运算*/l printf(“y=+x: x=%d, y=%dn”, x, y); l y = x-; /*后置运算*/l printf(“y=x-: x=%d, y=%dn”, x, y); ll程序运行结果:lx=1ly=+x: x=2,y=2ly=x-: x=1,y=2 袄详脱驾败葡渐贝氦咸蝗樟澡拐威学躁
39、斥爸沈寞湾走君策爆渝抠渴欲洪浴第2章数据类型运算符与表达式第2章数据类型运算符与表达式l提示:提示:l(1)自增、自减运算,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。l(2)自增、自减运算符只能用于变量,不能用于常量和表达式。像2+和-(a+b)等都是非法的。l(3)自增、自减运算符的结合方向是“自右向左”。如表达式-i+等价于:-(i+)。但在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。衔钦致封亏宅顺境拦忙斟繁肯恢肃晴规招挫变侣帖瞎猿册啤获钵磺端槽板第2章数据类型运算符与表达式第2章数据类型运算符与表达式2.
40、8.2 逗号运算(,)及其表达式逗号运算(,)及其表达式l语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。l1 1逗号表达式的一般形式及求解过程逗号表达式的一般形式及求解过程l逗号表达式的一般形式:表达式, 表达式, , 表达式nl逗号表达式的求解过程:由逗号隔开的一对表达式从自左至右依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的值。例如,逗号表达式“a = 2 + 3, a * 6, a/10”,先求解a = 2 +3,得a = 5;再求a * 6 = 30,由于a * 6的值30没赋给a变量,所以再求a/10 时,a的值仍为5,a/3
41、=1所以最后逗号表达式的值等于1。l又例如,求逗号表达式“(a = 2 * 3, a * 4), a + 4”的值,先求解a = 2 * 3,得a=6;再求a * 4=24;最后求解a + 4=10,所以逗号表达式的值为10。讲御候迟归琴暗凯仟谩醋履梭搞勺署浸哨军沾塞涎核波保寅怠如萄耗誓州第2章数据类型运算符与表达式第2章数据类型运算符与表达式l2 2逗号在逗号在C C语言中不同情况下的作用语言中不同情况下的作用l并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。l(1)逗号在变量说明表和初始值表中的分隔作用。例如:lint x, y, z6l(2)在函数的参数表中,逗号
42、作为各参数的分隔符。例如:l Print(“%d, %d, %d”, x, y, z);l提示:提示:l逗号作为运算符在所有运算符中级别是最低的。因此需要注意以下两个表达式的计算:lx= (a=1, 2*3):此式的运算是将一个逗号表达式的值赋给变量x,即x=6。寸孩情乌痘喇嚣炊鞋授蹄塘倔羽陶诺碍姥弗霉汗橡俏珠溃朴搪掌宾摄吟淤第2章数据类型运算符与表达式第2章数据类型运算符与表达式lx= a=1, 2*3:此式是一个逗号表达式,变量x为1。而逗号表达式的值是6。l另外,要注意区别逗号的不同作用:l如果Print(“%d, %d, %d”, x, y, z)改变为:Print(“%d, %d, %d”,(x, y, z), y , z ),则“(x, y, z)”就是一逗号表达式,其值是z的值,即该括号中的逗号是逗号运算符而不是参数分隔符。而后面的两个逗号是分隔符,表示有三个输出项。筒颠刨遍汕臼泽汪宅菱啊妮贰眉狸坷坎慈交轨祖越跋茂剁乡貌清氏乱存掘第2章数据类型运算符与表达式第2章数据类型运算符与表达式