1第四章数据类型与表达式2C语言的数据类型各种数据类型具有不同的存储方式、取值范围及允许的操作。整型实型字符型char短整型short整型int长整型long单精度float双精度double数组、结构体struct、共用体union、枚举类型enum基本类型构造类型指针空类型voidC数据类型数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作3§4-1基本数据类型各种数据类型具有不同的存储方式、取值范围及允许的操作。对数据的合理描述,称之为数据结构:本节介绍:无值型:void整型:int/long/short实型:(小数/浮点数)float/double字符型:char4①无值型无值型void使用:对函数进行描述5②整型整型int内存长度:2Byte示例:整型数据+7和–7的内存表示:000000000000011111111111111110011、(7)10=(111)22、原码:+7:0000000000000111-7:10000000000001113、补码:+7:0000000000000111-7:1111111111111001+7:–7:6原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000数的范围01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字节表示数)负数补码转换成十进制数:最高位不动,其余位取反加1例补码:11111001取反:10000110加1:10000111=-77③实型实型(小数、浮点数)单精度float内存长度:4Byte双精度double内存长度:8Byte例如:101.10110.1011011×211阶符阶码数符尾数阶符0阶码11数符0尾数101101101101011011数值范围有效数字8④字符型字符型char内存长度:1ByteASCII码表《C程序设计》P324附录以字符A为例:AASCII码值65100000101000001010000019七位ASCII代码表d6d5d4位d3d2d1d0位0000010100111001011101110000NULDLESP0@P`p0001SOHDC1!1AQaq0010STXDC22BRbr0011ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111BELETB'7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,L\l|1101CRGS-=M]m}1110SORS.N^n~1111SIUS/?O_oDEL10§4-2常量整型常量浮点型常量单字符常量字符串常量符号常量11①整型常量十进制表示:用一串连续的数字表示十进制数。负数在前面加负号‘-’,除表示整数0外,不以0开头。后缀‘l’或‘L’表示长整型,‘u’或‘U’表示无符号数。345、31684、0、-23456、459L、356l、567LU八进制表示:以数字0开头的一个连续数字序列,序列中只能有0-7这八个数字。后缀和负号的使用与十进制相同。045、-077、06745L、而019、423非法八进制数。十六进制表示:以0X或0x开头的连续数字和字母序列,序列中只能有0-9、A-F和a-f这些数字和字母。后缀和负号的使用与十进制相同。例:0x100X2550xd4ef0X6a7bL12②浮点型常量小数形式。由数字和小数点组成,必须有小数点。例:4.23、0.15、.56、0.0指数形式。以幂的形式表示,以字母e或E后跟一个以10为底的幂数。字母e或E之前必须要有数字,且字母e或E后面的指数必须为整数,字母e或E的前后及数字之间不得有空格。例:2.3e5、500e-2、4.5e0而e4、0.5e3.6、.e5、e不合法13③单字符常量字符内部表示占用一个字节,用对应ASCII编码的二进制形式存储。例如:‘a’、’1’转义字符:‘\’,具有控制含义的转义字符,在输入输出时会引起设备完成相应的动作。例如:’\n’、’\0’、’\x17’、’\007’C语言把字符类型看作一种特别短的整数类型。允许参与算术运算。例:‘A’+2表示将‘A’的ASCII码65加2,结果67是字符‘C’的ASCII码。14转义字符转义字符功能说明转义字符功能说明\n回车换行\f走纸换页\t跳格(制表位)\\反斜杠‘\’\v竖向跳格\‘单引号\b退格\ddd八进制字符\“双引号\xhh十六进制字符\r回车15④字符串常量字符串:双引号括起来的一串字符字符串结束标志:‘\0’字符串的内部表示方法:使用一片连续的字节空间,依次存放字符串的每一个字符,在结尾处加特殊字符‘\0’,表示字符串结束。注意:字符和字符串表示形式的区别,’a’和”a”有什么不同?数字和数字字符的区别,1和’1’有什么不同?16⑤符号常量标识符形式的常量例:求圆周长#definePI3.1416main(){floatr,l;printf(INPUTr=);scanf(%f,&r);l=2*PI*r;printf(L=%.2f\n,f);}#definePI3.1416π无法输入pi不符合习惯17§4-3变量变量的基本操作:①赋值,向变量中存入数据值;②取值(引用),取得变量当前存储的值,以便在计算过程中使用。变量定义的三个位置:1、函数或复合结构(一对{}括起来的一段程序)内所有执行语句的前面。2、所有函数外面。3、函数形参表中。18①变量的定义格式:[修饰符]定义符变量表列longinta,b;功能:分配内存建立变量名与内存地址间的对应关系inta,b;a=3;b=a+2;E002E000abE000E00219②变量的初始化赋值运算符=格式:变量=值(常量、变量、表达式)例如:x=-x;变量的初始化定义时初始化inta=3,b=5;使用前初始化inta;a=3;变量名:内存地址变量值:内存空间记录的数据20③整型变量和字符型变量的关系字符型数据在内存中以ASCII码值对应的整数存储整型和字符型数据有对应表示的关系main(){inta=65;charc='A';printf(%d,%c,%d,%c,a,a,c,c);}执行结果:65,A,65,A21§4-4运算符与表达式运算符:C语言中描述数据运算的特殊符号。表达式:用运算符将C语言的各种运算对象连接起来,组成符合C语法要求的式子,称表达式。运算对象包括常量、变量、函数等。计算:表达式的求值过程称计算。C的运算符主要分为四大类:算术运算符关系运算符与逻辑运算符位运算符特殊运算符(赋值/条件/逗号/指针/求字节/强制类型转换/分量/下标/函数调用)22§4-4-1算术运算符与表达式五种基本算术运算符+、-(减法/取负)、*、/、%(求余,模运算符)关于除法运算/C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如:5/3=1。关于求余数运算%5%3=25%2=1要求两侧的操作数均为整型数据,否则出错。23算术运算表达式定义:由算术运算符、括号和任何有值的对象连接起来的符合C语言要求的式子称为算术运算表达式例如:3+5*8+2*(3/2)24算术运算表达式的求解优先级与结合性原则《C程序设计》P326附录计算过程:对表达式自左向右依次扫描,当某一操作数两端的运算符优先级不同时,先与优先级高的运算符结合运算;当操作数两端的运算符优先级相同时,按照结合性的方向(算术运算:自左向右)进行运算。25§4-4-2赋值运算符与表达式赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算符的一般形式为:变量=表达式例如,x=5+2如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。26表达式计算求解过程:1、计算整个表达式的值2、把表达式的值赋给变量例如:floatx;inta=1,b=2;x=a*b/a-’a’+1.5;x=a*b/a–‘a’+1.512223-954-93.527赋值表达式的值赋值表达式的值即变量的值。main(){inta;floatb;b=a=2.5;printf(a=%d,b=%.2f\n,a,b);}a=2,b=2.00执行结果:28§printf函数(§4.2.2)printf()函数的一般格式如下:printf(“格式字符串”[,输出表列]);格式字符串。“格式字符串”也称“转换控制字符串”,可以包含三种字符:格式字符。转义字符普通字符输出表列29printf()函数的一般形式[例1]已知圆半径radius=1.5,求圆周长和圆面积。main(){floatradius,length,area,pi=3.1415926;radius=1.5;length=2*pi*radius;/*求圆周长*/area=pi*radius*radius;/*求圆面积*/printf(“radius=%f\n”,radius);/*输出圆半径*/printf(“length=%7.2f,area=%7.2f\n”,length,area);/*输出圆周长、面积*/}执行结果:radius=1.500000length=9.42,area=7.0730格式控制字符%d十进制整型输出%o八进制整型输出%x十六进制整型输出%u无符号整型输出(十进制)main(){inta=-1;printf(%d,%o,%x,%u,a,a,a,a);}执行结果:-1,177777,ffff,65535111111111111111131格式控制字符%c单字符%s字符串main(){printf(%c%s,’A’,”CHINA”);}执行结果:ACHINA32格式控制字符%f小数形式(保留六位小数)%e标准指数形式(保留六位小数)%e=e%E=E%g选用%f或%e中宽度短的一种无意义的0以空格代替main(){floata=123.456;printf(%f,%e,%g,a,a,a);}123.456000,1.234560e+002,123.45633附加格式说明字符l:用于长整型数据,加在d,o,x,u,f之前m:数据输出宽度(小于实际时按实际输出).n:浮点数:n位小数字符串:从左起取n个字符–:左对齐,没有时右对齐(缺省)34%d=%md,%-mdmain(){inta,b;a=123,b=12345;printf(%d,%4d,%-4d,%4d,a,a,a,b);}123,123,123,1234535%-m.nfmain(){floata=12.34;printf(%f,%10f,%10.2f,%-10.2f,a,a,a,a);}12.340000,12.340000,12.34,12.3436%-m.nsmain(){printf(%s,%3s,%5.2s,%.3s,%-5.3s,CHINA,CHINA,CHINA,CHINA,CHINA);}CHINA,CHINA,CH,CHI,CHI37逻辑量(§6-1)数学上的逻辑:当x=-5时,x-3不等式不成立,逻辑“假”x≤-3不等式成立,逻辑“真”C语言中的逻辑量:用0、1表示逻辑假和真值;C语言没有专门的逻辑值,而是用1来表示“真”,用0表示“假”。任