《C语言数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C语言数据类型、运算符与表达式.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式C语言语言A基本内容基本内容2.1 C的数据类型 2.2 常量与变量2.3 整型数据 2.4 实型数据 2.5 字符型数据2.6 变量赋初值2.7 各类数值型数据间的混合运算2.8 算术运算符和算术表达式2.9 赋值运算符和赋值表达式2.10 逗号运算符和逗号表达式C语言语言A基本要求基本要求v掌握C语言的数据类型和各种数值型数据之间的混合运算。v掌握C语言的各种运算符和表达式。C语言语言A本章重点与难点本章重点与难点v重点:基本数据类型,变量的概念,运算符和表达式。v难点:变量的数据存储形式,进制转换,数据类型转换。C语言语言A本
2、章作业本章作业C语言语言A【例2.0】计算圆的面积,半径为 5 cm。#include void main()float r r,areaarea;r r=5 5;areaarea=3.143.14*r r*r r;printf(%fn,areaarea);运算结果是输出圆的面积:运算结果是输出圆的面积:78.500000程序如下:C语言语言A2.1 C的数据类型的数据类型vC语言提供了以下一些数据类型:数据类型数据类型构造类型构造类型指针类型指针类型*空类型(空类型(无值类型)无值类型)void void枚举类型枚举类型枚举类型枚举类型 enum enum enum enum数组类型数组类型
3、数组类型数组类型 结构类型结构类型结构类型结构类型 struct struct struct struct联合类型联合类型联合类型联合类型 union union union union基本类型基本类型整型整型整型整型 int int int int字符型字符型字符型字符型 char char char char实型(浮点型)实型(浮点型)实型(浮点型)实型(浮点型)单精度实型单精度实型单精度实型单精度实型 float float float float双精度实型双精度实型双精度实型双精度实型 double doubleC语言语言A2.2 常量与变量常量与变量v对于基本数据类型量,按其取值是否
4、可改变又分为常量和变量两种。v在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。v可与数据类型结合起来分类。v在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。C语言语言Av常量区分为不同的类型:一、常量和符号常量一、常量和符号常量整型常量:整型常量:100100,125125,-100-100,0 0实型常量:实型常量:3.14 3.14,0.125 0.125,-3.789-3.789字符常量:字符常量:a,ba,b符号常量:用标识符表示上面的几种符号常量:用标识符表示上面的几种直直接常量接常量(字面常量)(字面常量)C语言语言Av标识符:用来标识变量名
5、、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。v符号常量:在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。v符号常量在使用之前必须先定义,其一般形式为:#define 标识符标识符 常量常量C语言语言Av习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。v符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。v使用符号常量的好处是:含义清楚,含义清楚,“见名知意见名知意”;需要修改时,能做到需要修改时,能做到“一改全改一改全改”。C语言语言A#define PRICE 30#include void main()int num,total;n
6、um=10;total=num*PRICE;printf(total=%dn,total);【例2.1】符号常量的使用。运行结果:运行结果:total=300vv说明:说明:如再用赋值语句给PRICE赋值是错误的。vPRICE=40;/*错误,不能给符号常量赋值。*/C语言语言Av变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。v变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。二、变量二、变量a 变
7、变量量名名3变量值变量值存储单元存储单元C语言语言A每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。变量命名的规定:语言规定标识符只能由字母、语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为数字和下划线三种字符组成,且第一个字符必须为字母或下划线。字母或下划线。例:例:sum,_total,month,Student_name,lotus_1_2_,BASIC,li_ling M.D.John,¥123,3D64,ab C语言语言A注意:注意:v编译系统将大写字母和小写字母认为是两个不同的字符。v建议变量名的长度最好不要超过8个字符。v在选择变量名和其它标识符
8、时,应注意做到“见名知意”,即选有含意的英文单词 (或其缩写)作标识符。v要求对所有用到的变量作强制定义,也就是“先定义,后使用”。C语言语言A2.3 整型数据整型数据v十进制:没有前缀,数码为09 237、-568、65535、1627;023、23D v八进制:前缀为0,数码为07,无符号 015、0101、0177777;256、03A2、-0127 v十六机制:前缀为0X或0 x,数码为09,AF或af 0X2A、0 xA0、0XFFFF;5A,0 x3H一、整型常量(整常数)一、整型常量(整常数)C语言语言Av各种进制之间的转换二进制、八进制、十六进制转换成十进制:按权相加C语言语言
9、A二进制、八进制、十六进制转换成十进制:连续除以基,从低到高记录余数,直至商为0。例 把十进制数59转换成二进制数5922921427232120(59)10=(111011)21101111 1 1 0 1 1余余余余余余C语言语言A例 把十进制数159转换成八进制数1598198280(159)10=(237)82 3 7 余 7余 3余 2例 把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161 C B 余11余12余 1C语言语言Av整型常数的后缀:在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的
10、范围为065535,有符号数为-32768+32767。八进制无符号数的表示范围为00177777。十六进制无符号数的表示范围为0X00XFFFF或0 x00 xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。v无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。C语言语言Av数据在内存中是以二进制形式存放的。二、整型变量二、整型变量int i;i=10;0000000000001010i10150iC语言语言Av数值是以补码表示的:v正数的补码和原码相同;正数的补码和原码相同;v负数的补码:将该数的绝对值的二进制形式按位取负
11、数的补码:将该数的绝对值的二进制形式按位取反再加反再加1。例如:例如:求求-10的的补码补码。0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 取反:取反:1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1再加再加1,得,得-10的的补码补码:1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0由此可知:由此可知:左面的第一位是表示符号的。左面的第一位是表示符号的。10的原的原码码:150C语言语言A1)基本整型(类型关键字为)基本整型(类型关键字为int)。)。2)短整型(类型关键字为)短整型(类型关键字为short(int))。)。3)长整型(类型关键字
12、为)长整型(类型关键字为long (int))。)。v根据占用内存字节数的不同,整型变量分为3类:C语言语言A 注意:注意:括号表示其中的内容是可选的。括号表示其中的内容是可选的。共共六六种种有符号基本整型有符号基本整型有符号短整型有符号短整型有符号长整型有符号长整型无符号基本整型无符号基本整型无符号短整型无符号短整型无符号长整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)v有符号整型和无符号整型一起共有6类:C语言语言Av整数类型的有关
13、数据:类型类型 类型说明符类型说明符 长度长度 数的范围数的范围 基本型基本型 int 2int 2字节字节 -32768 -327683276732767 短整型短整型 short 2short 2字节字节 -2 -215152 21515-1-1 长整型长整型 long long 4 4字节字节 -2 -231312 23131-1-1 无符号整型无符号整型 unsigned int unsigned int 2 2字节字节 0 06553565535 无符号短整型无符号短整型 unsigned short unsigned short 2 2字节字节 0 06553565535 无符号长
14、整型无符号长整型 unsigned long unsigned long 4 4字节字节 0 0(2 23232-1-1)C语言语言A变量说明的一般形式为:变量说明的一般形式为:类型说明符类型说明符 变量名标识符,变量名标识符,变量名标识符,变量名标识符,.;int a,b,c;(a,b,c为整型变量为整型变量)long x,y;(x,y为长整型变量为长整型变量)unsigned int p,q;(p,q为无符号整型变量为无符号整型变量)v整型变量的定义C语言语言A【例2.2】整型变量的定义与使用。#include void main()()int a,b,c,d;/*指定、为整型变量指定、为
15、整型变量*unsigned;*指定为无符号整型变量指定为无符号整型变量*a12;-24;10;c;printf(,);,);运行结果:运行结果:,C语言语言Av整型数据的溢出#include void main()int a,b;a=32767;b=a+1;printf(“%d,%dn”,a,b);运行结果:运行结果:32767,-3276832767,-32768说明:说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。C语言语言A 2.4 浮点型数据浮点型数据两种表示形式两种表示形式小数小数指
16、数指数0.1230.1233 3e-3e-3注意注意:字母字母e(e(或或E)E)之前必须有数字,且之前必须有数字,且e e后面的后面的指数必须为整数:指数必须为整数:1e31e3、1.8e-31.8e-3、-123e-6-123e-6、-.1e-3-.1e-3e3e3、2.1e3.52.1e3.5、.e3.e3、e e 一、浮点型常量一、浮点型常量C语言语言A 在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.001234
17、56e 其中的1.23456e3称为“规范化的指数形式”。v规范化的指数形式C语言语言A 一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。二、浮点型变量二、浮点型变量v浮点型数据在内存中的存放形式C语言语言A类型 位数 数的范围 有效数字float 32 10-37 1038 67 位double型 64 10-30710308 1516位long double 128 10-4931104932 1819位 浮点型变量分为单精度(浮点型变量分为单精度(
18、floatfloat型)、双精度(型)、双精度(doubledouble型)和长双精度型(型)和长双精度型(long doublelong double)三类形式。)三类形式。v浮点型变量的分类C语言语言A【例2.3】浮点型数据的舍入误差。#include void main()float a,b;a=123456.789e5;b=a+20;printf(“%fn”,b);运行结果:123456.789e5说明:说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。C语言语言A
19、C编译系统将浮点型常量作为双精度来处理。编译系统将浮点型常量作为双精度来处理。例如例如:f=2.45678*4523.65 系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。v浮点型常量的类型C语言语言A 2.5 字符型数据字符型数据(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符a,A,1a,A,1abcabc、“a”“a”一、字符型常量一、字符型常量C语言语言AC语言还允许使用一种特殊形式的字
20、符常量,就是以反斜杠“”开头的转义字符。v转义字符ntvbrf dddxxh功能功能换行换行横向跳格横向跳格(即跳到下一个输出区即跳到下一个输出区)竖向跳格竖向跳格退格退格回车回车走纸换页走纸换页反斜杠字符反斜杠字符“”单引号单引号(撇号撇号)字符字符1到到3位位8进制数所代表的字符进制数所代表的字符1到到2位位16进制数所代表的字符进制数所代表的字符字符形式字符形式C语言语言A二、字符型变量二、字符型变量v字符变量的类型关键字为char,一般占用1字节内存单元。v字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。可作
21、为整数和字符两种形式输出,可对字符进行整数运算(ASCII码值)。v字符可以是字符集中任意字符。但数字作为字符型参与数值运算时数字的值就不是它的ASCII值。C语言语言A【例2.4】向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);运行结果:a.b 97,98说明:说明:在第和第在第和第4 4行中,行中,将整数和分别将整数和分别赋给赋给c1c1和和c2c2,它的作用,它的作用相当于以下两个赋值语相当于以下两个赋值语句:句:c1c1a;c2;c2b;因为
22、因为a和和b的的ASCIIASCII码为码为9797和和98。C语言语言A【例2.5】大小写字母的转换。#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转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的码大。语言允许字符数据与整数直接进行算术运算。C语言语言A说明:说明:说明:说明:有些系统(如Turbo C)将字符变量定义为signed char型。其存储单元中的最高位作为符号位,它的取值范围是-1
23、28127。如果在字符变量中存放一个ASCII码为0127间的字符,由于字节中最高位为0,因此用%d输出字符变量时,输出的是一个正整数。如果在字符变量中存放一个ASCII码为128255间的字符,由于在字节中最高位为1,用%d格式符输出时,就会得到一个负整数。C语言语言A三、字符串常量三、字符串常量v字符串常量是用一对双引号括起来的若干字符序列。vC语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。va是字符常量,而“a”是字符串常量。v不能将一个字符串赋给一个字符变量。vC中没有字符串变量,需要用字符数组存放字符串。C语言语言Av例如,“How do you
24、 do.”、“Good morning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。v如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:(1)C:msdosv6.22 C:msdosv6.22”(2)I say:Goodbye!I say:Goodbye!C语言语言A 2.6 变量赋初值变量赋初值(1)语言允许在定义变量的同时使变量初始化。如如:int a=3;/*int a=3;/*指定为整型变量,初值为指定为整型变量,初值为*/*/float f=3.56;/*float f=3.56;/*指定为浮点型变量,初值为指定为浮点型变量,初值为.56*/.
25、56*/char c=a;/*char c=a;/*指定为字符变量,初值为指定为字符变量,初值为a*/a*/C语言语言A(2)可以使被定义的变量的一部分赋初值。如如:int a,b,c=5;表示指定、为整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;表示、的初值都是。不能写成 int a=b=c=3;注意:注意:初始化不是在编译阶段完成的而是在程序运行初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。时执行本函数时赋初值的,相当于有一个赋值语句。C语言语言A2.7 各类数值型数据间的混合运算各类数
26、值型数据间的混合运算u整型、单精度型、双精度型数据可以混合运算。u不同类型的数据要先转换成同一类型,然后进行运算,即“先转换,后运算”。u转换的方式有两种:自动转换(隐式转换)和强制转换C语言语言A自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。隐式转换规则如图:箭头只表示箭头只表示转换方向,转换方向,并不是依次转换。转并不是依次转换。转换过程是换过程是自动完成的。自动完成的。一、隐式转换一、隐式转换C语言语言A强制转换是通过类型转换运算符来实现。一般形式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。(int)a 将将a的结果强制转换为整型量。的结果
27、强制转换为整型量。(int)(x+y)将将x+y的结果强制转换为整型量。的结果强制转换为整型量。(float)a+b 将将a的内容强制转换为浮点数,再与的内容强制转换为浮点数,再与b相加相加注意:注意:无论隐式转换,强制转换都是无论隐式转换,强制转换都是临时转换临时转换,不不改变数据本身的改变数据本身的类型和值类型和值。二、强制转换二、强制转换C语言语言A例:例:强制类型转换强制类型转换main()float f=5.75;printf(int)f=%dn,(int)f);/*将将f的的结结果果强强制制转转换换为为整型,输出整型,输出*/printf(f=%fn,f);/*输出输出f的值的值*
28、/结果:结果:(int)f=5 f=5.750000C语言语言A2.8 算术运算符和算术表达式算术运算符和算术表达式 v运算符:狭义的运算符是表示各种运算的符号。vC语言运算符丰富,范围很宽,把除了控制语句和输入/输出以外的几乎所有的基本操作都作为运算符处理,所以C语言运算符可以看作是操作符。vC语言丰富的运算符构成C语言丰富的表达式(是运算符就可以构成表达式)。v在C语言中除了提供一般高级语言的算术、关系、逻辑运算符外,还提供赋值运算符,位操作运算符、自增自减运算符等等。甚至数组下标,函数调用都作为运算符。C语言语言A一、运算符类别一、运算符类别C语言语言A二、二、C中各类运算符的优先级中各
29、类运算符的优先级初等运算符初等运算符()、单目运算符单目运算符!、!、+、+、(类型类型)算术运算符算术运算符、/、%,+、关系运算符关系运算符、=,=、!=逻辑运算符逻辑运算符&、条件运算符条件运算符?:赋值运算符赋值运算符=、+=、=、=、/=、%=逗号运算符逗号运算符,C语言语言A(1 1)基本的算术运算符)基本的算术运算符:(加法运算符,或正值运算符,如:、)(减法运算符,或负值运算符,如:、)*(乘法运算符,如:*)(除法运算符,如:)(模运算符,或称求余运算符,两侧均应为整型数据,如:的值为)。三、算术运算符和算术表达式三、算术运算符和算术表达式C语言语言A说明:v(1)两个整数相
30、除的结果为整数,如5/3的结果为1,舍去小数部分。但是如果除数或被除数中有一个为负值,则舍入的方向是不固定的,多数机器采用“向0取整”的方法(实际上就是舍去小数部分,注意:不是四舍五入)。C语言语言Av(2)如果参加+,-,*,/运算的两个数有一个为实数,则结果为double型,因为所有实数都按double型进行计算。v(3)求余运算符%,要求两个操作数均为整型,结果为两数相除所得的余数。求余也称为求模。一般情况,余数的符号与被除数符号相同。例如:-8%5=-3;8%-5=3C语言语言A注意:C语言算术表达式的书写形式与数学表达式的书写形式有一定的区别:v(1)C语言算术表达式的乘号(*)不能
31、省略。例如:数学式b2-4ac,相应的C表达式应该写成:b*b-4*a*c。v(2)C语言表达式中只能出现字符集允许的字符。例如,数学r2相应的C表达式应该写成:PI*r*r。(其中PI是已经定义的符号常量)v(3)C语言算术表达式只使用圆括号改变运算的优先顺序(不要指望用、)。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。C语言语言A(2 2)算术表达式和运算符的优先级与结合性)算术表达式和运算符的优先级与结合性 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。例如例如
32、:*.5a C语言语言A(3 3)语言规定了运算符的优先级和结合)语言规定了运算符的优先级和结合性。性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。(4 4)规定了各种运算符的结合方向)规定了各种运算符的结合方向(结合结合性性)算术运算符的结合方向为“自左至右”,即先左后右。C语言语言A(5)(5)自增、自减运算符自增、自减运算符 作用是使变量的值增或减。v,(在使用之前,先使的值加(减)v,(在使用之后,使的值加(减)例如:例如:i=3;i=3;;i的值先变成4,再赋给,i、j的值均为 ;先将 i的值3赋给,的值为,然后变为C语言语言A注意:注意:(1)自增运算符()
33、,自减运算符(),只能用于变量,而不能用于常量或表达式;(2)和的结合方向是“自右至左”。自增(减)运算符常用于循环语句中使循环变量自动加。也用于指针变量,使指针指向下一个地址。C语言语言A(6 6)有关表达式使用中的问题说明有关表达式使用中的问题说明 ANSI C并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。例如:对表达式 a=f1()+f2()并不是所有的编译系统都先调用f1(),然后调用f2()。在有的情况下结果可能不同。有时会出现一些令人容易搞混的问题,因此务必要小心谨慎。C语言语言AC语言中有的运算符为一个字符,有的运算符由两个字符组成,为避免误解,最好采取大家
34、都能理解的写法。例如例如:不要写成不要写成i+ji+j的形式,而应写成的形式,而应写成 (i+)+j (i+)+j的形式。的形式。C语言语言A在调用函数时,实参数的求值顺序,C标准并无统一规定。例如:例如:i=3:printf(%d,%d,i,i+);在有的系统中,从左至右求值,输出“,”。在多数系统中对函数参数的求值顺序是自右而左,printf函数输出的是“,”。以上这种写法不宜提倡,最好改写成:j=i+;j=i+;printf(%d,%d,j,i);printf(%d,%d,j,i);不要写出别人看不懂的也不知道系统会怎样执行的程序!C语言语言A2.9 赋值运算符和赋值表达式赋值运算符和赋
35、值表达式符号符号=为赋值运算符。为赋值运算符。一、赋值运算符一、赋值运算符作用:将一个数据赋给一个变量。作用:将一个数据赋给一个变量。如:如:a=8C语言语言A2.整型数据赋给实型变量,数值不变,但按实数形式存放.1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.赋值时赋值时,两边类型若不一致两边类型若不一致,则按则按以下规则转换以下规则转换:3.字符型数据赋给整型变量时:(2)字符带符号整型变量,则字符高位扩展。(1)字符无符号整型变量,则存入低8位,高8位补零。C语言语言A4.将intlong int,进行符号扩展。即:符号扩展,低16位long 的低16位。5.long int
36、int 则高16位截断。6.非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位)C语言语言A7.将unsigned int 型long int高位补0。(2)原值传送,但数据大小不能超值。如:unsigned int a=65535;int b;b=a;则越界。(1)而位数相同部分赋值 unsigned int int unsigned long long unsigned short shortC语言语言A复合赋值运算符:复合赋值运算符:在在 号之前加一个其它号之前加一个其它运算符。运算符。C语言规定:凡是二目运算符均可构成复合运算符。例:a+=3;相当于 a=a+
37、3 x=y+8;相当于 x=x(y+8)x%=3;相当于x=x%3 二、复合赋值运算符二、复合赋值运算符C语言语言A一般形式:三、赋值表达式三、赋值表达式赋值表达式的求解过程:v先计算赋值运算符右侧的“表达式”的值v将赋值运算符右侧“表达式”的值赋值给左侧的变量。v整个赋值表达式的值就是被赋值变量的值。C语言语言A说明:v(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或常量、变量、函数调用组成的表达式。例如:x=10 y=x+10 y=func()都是合法的赋值表达式。v(2)赋值符号“=”不同于数学的等号,它没有相等的含义。(“=”相等)例如:C语言中x=x+1是合法的(数学
38、上不合法),它的含义是取出变量x的值加1,再存放到变量x中。C语言语言Av(3)赋值运算时,当赋值运算符两边数据类型不同时,将由系统自动进行类型转换。转换原则:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。v(4)C语言的赋值符号“=”除了表示一个赋值操作外,还是一个运算符,也就是说赋值运算符完成赋值操作后,整个赋值表达式还会产生一个所赋的值,这个值还可以利用。C语言语言A例:x=10 为一赋值表达式 其中又可以是一个赋值表达式。例:x=(y=10)相当于 y=10;x=y 由于赋值号为右结合性,于是()可省略,即为:x=y=10;又:a=5+(c=6)c=6,a=11 a=(b=4
39、)+(c=6)b=4,c=6,a=10 a=(b=10)/(c=2)b=10,c=2,a=5C语言语言A例:a+=a =aa (设a12)进一步,还可用复合赋值运算符作下列运算:步骤:aa144.a =a a a=a a a=12 144=132 a+=132 a=a+(132)=264C语言语言A2.10 逗号运算符和逗号表达式逗号运算符和逗号表达式vC语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。v逗号运算符又称顺序求值运算符。v一般表达式:表达式表达式,表达式表达式,表达式表达式n例如:例如:3+5,6+8C语言语言Av求解过程:自左至右,依次计算各表达式的值,“表达式n
40、”的值即为整个逗号表达式的值。例1:逗号表达式“a=3*5,a*4”先求解a=3*5,得a=15;再求a*4=60,所以逗号表达式的值=60。例2:逗号表达式“(a=3*5,a*4),a+5”先求解a=3*5,得a=15;再求a*4=60;最后求解a+5=20,所以逗号表达式的值=20。C语言语言A思考思考:x=(a=3,6 3)与与 x=a=3,6 a 的含义。的含义。x=a=3,6 a 逗号表达式,x3.(1)逗号表达式主要用于某些语句中需一次计算逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。多个表达式值的情况。如在循环语句中。(2)函数调用中的实参之间虽然用的
41、是逗号间函数调用中的实参之间虽然用的是逗号间隔隔,但不是逗号表达式。但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);x=(a=3,63)赋值表达式,x18;注意注意:C语言语言A本章小结本章小结vC的数据类型:基本类型,构造类型,指针类型,空类型v基本类型的分类及特点:类型说明符类型说明符字节字节数值范围数值范围字符型字符型char1C字符集字符集基本整型基本整型int2-3276832767短整型短整型short int2-3276832767长整型长整型long int4-214783648214783647无符号型无符号型unsigned2065535无符号长整型无符号长整型unsigned long404294967295单精度实型单精度实型float4-3.4E-383.4E+38双精度实型双精度实型double8-1.7E-3081.7E+308长双精度实型长双精度实型long double16-1.2E-49321.2E+4932C语言语言Av常量后缀:L或l 长整型;U或u 无符号数;F或f 浮点数v常量类型:整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符。v数据类型转换:自动转换;强制转换v运算符优先级和结合性v表达式