第二章数据类型运算符和表达式第二章数据类型、运算符和表达式•内容提要数据类型常量与变量运算符与表达式2.1数据类型数据类型总表双精度型double单精度型float短整型shortC数据类型基本类型指针类型空类型void字符类型char整型实型聚合类型枚举类型enum数组结构体struct共用体union长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例。基本数据类型2.1数据类型2.2常量与变量•数据是程序的处理对象•C语言将数据分为常量与变量2.2.1常量1.常量的定义及分类定义:程序运行的过程中,其值不能改变的量。分类:整型常量实型常量字符常量字符串常量符号常量2.2常量与变量2.整型常量(既整常数)三种形式:十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff转换成十进制数的方法:0123=1x82+2x81+3x80=(83)100x123=1x162+2x161+3x160=(291)100Xff=15x161+15x160=(255)102.2常量与变量•整型常量的说明(1)空白字符不可以出现在整数数字之间(2)根据其值所在范围确定其数据类型(3)在整常量后加字母l或L,认为它是longint型常量例如30000为int型65536为longint型79L、012L为longint型2.2常量与变量3.实型常量•实常数或浮点数,是一个十进制表示的符号实数•表示形式:十进制小数形式[digits].[digits]如0.123,.123,123.0,0.0,123.指数形式(包括整数部分、尾数部分和指数部分)[digits][.digits][E|e[+|-]digits]小数点之前是整数部分,小数点之后是尾数部分,小数点在没有尾数时可省略。如12.3e3,123E22.2常量与变量•实型常量的说明(1)实型常量采用十进制小数形式表示时,必须有小数点。例如:123.是实型常量,而123是整型常量(2)采用指数形式表示时,在E或e之前必须要有数字,且之后的指数必须为整数。例如:E6、.e6、e等都是不合法的(3)实型常量的整数部分为0时可以省略,如下形式是允许的:.57,.0075e2,-.125,-.175E-2(4)所有的实型常量均被看作是双精度类型(double)2.2常量与变量4.字符常量定义:用单引号括起来的单个普通字符或转义字符。•分为一般字符常量和特殊字符常量•一般字符常量:如’a’、’9’、’!’等。单引号只起定界作用并不表示字符本身,中间的字符可以是除单引号(’)和反斜杠(\)以外的数字、字母等C语言字符集中包含的所有可显示字符。•特殊字符常量(也叫转义字符)是C语言中表示字符的一种特殊形式,其含义为将反斜杠(\)后面的字符转换成另外的意义。2.2常量与变量•字符常量的值:该字符的ASCII码值如‘A’——65,‘a’——97,‘0’——48,‘\n’——10转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符2.2常量与变量aaa13如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\060’-----------’0’例转义字符举例intmain(){printf(\101\x42C\n);printf(Isay:\Howareyou?\\n);printf(\\CProgram\\\n);printf(Turbo\'C\');}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’2.2常量与变量•字符常量与字符串常量不同5.字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例字符串“hello”在内存中aa\0例‘a’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;2.2常量与变量6.符号常量(1)标识符•定义:用来标识变量、常量、函数等的字符序列•组成:–只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线–大小写敏感–不能使用关键字•长度:最长32个字符•命名原则:–见名知义–不宜混淆如1与l,o与0例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3charab_above$123M.D.John3days#33char$123ab2.2常量与变量在C语言中,允许将程序中的常量定义为一个标识符,称为符号常量。在使用符号常量前必须先加以定义,一般情况下,符号常量使用大写英文字母表示。其定义的一般形式为:#define符号常量名常量例如:#definePRICE352.2常量与变量2.2.2变量•概念:其值可以改变的量•变量名与变量值•变量定义的一般格式:数据类型变量1[,变量2,…,变量n];•变量初始化:定义时赋初值•变量的使用:先定义,后使用变量值3a变量名存储单元决定分配字节数和数的表示范围合法标识符例:inta,b,c;floatdata;例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;intx=y=z=1;╳main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}2.2常量与变量编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址…...内存1-3随机数•变量定义位置:一般放在函数开头2.2常量与变量与常量类似,变量也有不同的类型,一般可以分为以下三种类型:整型变量实型变量字符变量2.2常量与变量1.整型变量(1)整型变量的分类基本型短整型长整型无符号整型基本型:类型说明符为int,在内存中占2个字节。短整型:类型说明符为shortint或short,所占字节和取值范围均与基本型相同。长整型:类型说明符为longint或long,在内存中占4个字节。无符号整型:类型说明符为unsigned。ⅰ.无符号基本型:类型说明符为unsignedint或unsigned。ⅱ.无符号短整型:类型说明符为unsignedshort。ⅲ.无符号长整型:类型说明符为unsignedlong。2.2常量与变量例2-1整型变量的使用#includestdio.hintmain(){intx,y,z;x=10;y=20;z=x+y;printf(“x+y=%d\n”,z);return0;}输出结果:x+y=30(2)整型变量的定义与使用2.2常量与变量intx;x=10;则变量x的值10在内存中的存放形式:intx;x=-10;则变量x的值10在内存中的存放形式:(3)整型数据在内存中的存放形式2.2常量与变量例2-2整型数据的溢出问题#includestdio.hintmain(){intx,y;x=32767;y=x+1;printf(%d,%d\n,x,y);return0;}运行结果:-32768原因:一个int型变量只能容纳-32768到32767范围内的数,无法表示超过这个范围的数。(4)整型数据的溢出2.2常量与变量2.实型变量(1)实型变量的分类•单精度实型:类型说明符为float,在内存中占4个字节,提供7位有效数字。•双精度实型:类型说明符为double,在内存中占8个字节,提供15~16位有效数字。例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/2.2常量与变量•例2-3实型变量的使用#includestdio.hintmain(){floatx,y,z;x=10;y=20;z=x+y;printf(“x+y=%f\n”,z);return0;}运行结果:x+y=30.000000(2)实型变量的定义与使用2.2常量与变量例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/字符变量存放字符ASCII码char与int数据间可进行算术运算没有字符串变量,用字符数组存放(3)字符变量2.2常量与变量#includestdio.hintmain(){charc1,c2;/*定义c1,c2为字符型变量*/c1=97;c2=98;/*将整数97和98分别赋给c1和c2*/printf(”%c,%c\n”,c1,c2);/*以字符形式输出c1和c2*/printf(”%d,%d”,c1,c2);/*输出c1和c2的ASCII码值*/printf(”%d”,c1+c2);return0;}运行结果如下:a,b97,982.2常量与变量例#definePRICE12.5main(){intnum=3;floattotal;charch1,ch2=‘D’;total=num*PRICE;ch1=ch2-‘A’+‘a’;printf(“total=%f,ch1=%c\n”,total,ch1);}宏定义变量定义输出结果运行结果:total=37.500000,ch1=d(4)变量的初始化2.2常量与变量C运算符算术运算符:(+-*/%++--)关系运算符:(====!=)逻辑运算符:((!&&||)位运算符:(~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.-)下标运算符:([])其它:(()-)运算符的分类2.3运算符与表达式定义:由常量、变量、函数、运算符和括号组合起来的、符合C语法规则的式子称为表达式。一个表达式有一个值以及其对应的类型表达式求值首先进行优先级高的运算再进行优先级低的运算,然后对于优先级相同的运算按结合方向进行运算。结合方向:左结合、右结合例如:x-y+z(x-y)+zx=y=zx=(y=z)2.3运算符与表达式2.3.1算术运算符及算术表达式1.基本算术运算符:+-*/%–结合方向:从左向右–优先级:(高)--*/%-----+-说明:–“-”可为单目运算符时,右结合性–两整数相除,结果为整数,如果两整数中有一个是负数,舍入规则为“向零取整”–如果运算的两个数中有一个是实型,则结果为double型–%要求两侧均为整型数据例5/2=2-5/2.0=-2.55%2=1-5%2=-11%