C语言程序设计第3章第1页本章重点:●数据类型●算术运算符和算术表达式●赋值运算符和赋值表达式●逗号运算符和逗号表达式第三章数据类型、运算符和表达式C语言有四种常用数据类型:字符、整型、单精度实型、双精度实型。类型范围char(字符型)0~255int(整型)-32768~32767float(单精度型)约精确到6位数double(双精度型)约精确到12位数除此之外,C语言还提供了几种其他类型,包括数组、指针、结构体、共用体(联合)、位域和枚举等。这些复杂类型在以后的章节中讨论。§3.1常量和变量一、常量1.常量的概念在程序运行过程中,其值不能被改变的量称为常量。2.常量的分类整型常量实型常量字符常量符号常量。二、变量1.变量的概念在程序运行过程中,其值可以被改变的量称为变量。2.变量名每个变量的名字即变量名,变量命名遵循标识符命名规则。3.标识符和命名规则(1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。C语言程序设计第3章第2页(2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。在TCV2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。(3)C语言的关键字不能用作变量名。(4)特别注意C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。4.变量的定义与初始化在C语言中,要求对所有用到的变量,必须先定义、后使用;且在定义变量的同时可以赋初值(初始化)。(1)变量定义的一般格式[存储类型]数据类型变量名[,变量名2……];例如:inta,b,c;(2)变量初始化的一般格式[存储类型]数据类型变量1=值1,变量2=值2…;例如:inta=3,b=4,c=5;§3.2整型数据一、整型变量1.分类根据占用内存字节数的不同,整型变量又分为4类:(1)基本整型(类型关键字为int)(2)短整型(类型关键字为short[int])(3)长整型(类型关键字为long[int])(4)无符号整型。分为三种,只能用来存储无符号整数(unsigned[int])基本无符号整型(unsignedshort)无符号短整型(unsignedlong)无符号长整型2.占用内存字节数与值域上述各类型整型变量占用的内存字节数,随系统而异。ANSI标准中的数据类型类型长度范围int16-32768~32767short[int]16-32768~32767long[int]32-2147483648~2147483649C语言程序设计第3章第3页unsigned[int]160~65535unsignedshort80~255unsignedlong320~42949672963.举例main(){inta;shortb;longc=2345678;unsignedu;a=-12;b=24;u=10;printf(%d,%d,%d,%d\n,a,b,c,u);}4.说明上述各类型整型变量占用的内存字节数,随系统而异。在赋值和运算时可能溢出,导致不可确定结果。二、整型常量1.三种表示形式整型常量即整常数,在C语言中可用三种形式表示:(1)十进制。例如10、36。(2)八进制(以数字0开头)。例如012。(3)十六进制(以数字0+小写字母x开头)。例如0x36main(){inta=123;intb=010+10;intc=0xffff;intd=10+010+0x10;printf(%d,%d,%d,%d\n,a,b,c,d);}C语言程序设计第3章第4页2.分类(1)基本整型。其数据范围与int型变量一样。(2)长整型(在数值后面加“L/l”)。对数值很大的整型常量,可使用长整型常量表示,其取值范围可达-231—231-1。例如:123l、315L等。3.说明(1)一个整型常量,可以赋给能容纳下其值的整型变量。例如,其值在-215--(215-1)的整型常量,可以赋给int型变量和longint型变量;其值在-231--(231-1)的整型常量,就只能赋给longint型变量。(2)常量无unsigned型。但一个非负整型常量,只要它的值不超过相应变量的值域(即取值范围),也可以赋给unsigned型变量。§3.3实型数据一、实型变量1.分类根据占用内存字节数的不同,整型变量又分为3类:(1)单精度型。类型关键字为float。(2)双精度型。类型关键字为double。(3)长双精度型。类型关键字为longdouble。(用的很少)类型比特数有效数字范围float326~7-3.4*10-38~3.4*1038double6415~16-1.7*10-308~1.7*10308longdouble12818~19-1.2*10-4932~1.2*1049322.举例main(){floata;doubleb;longdoublec=-24345345678.1234565433;a=-12.324234;b=23244.4543345;C语言程序设计第3章第5页printf(%d,%d,%d\n,a,b,c);}二、实型常量1.表示形式实型常量即实数,在C语言中又称浮点数,其值有两种表达形式:(1)十进制形式。例如3.14、9.8。(2)指数形式:尾数E(e)整型指数。例如3.0E+5等。2.说明实型常量不分float型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。§3.4字符型数据一、字符常量1.定义用一对单引号括起来的单个字符,称为字符常量。例如,‘A’、‘1’、‘!’等。2.转义字符C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的转义字符。注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:‘\\’、‘\’‘。字符形式含义ASCII代码\n换行10\t水平制表9\b退格9\r回车13\f换页12\\反斜杠92\’单引号字符39\”双引号字符34\ddd任意字符三位八进制\xhh任意字符二位十六进制3.举例C语言程序设计第3章第6页main(){printf(“abc\tde\rf\tg\n”);printf(“h\ti\b\bjk);”);printf(“\x4F\x4B\x21\n”);printf(“\x15\xAB\n”);}执行结果:fgdehjkOK!§½二、字符变量1.变量的定义和存储字符变量的类型关键字为char,占用1字节内存单元。字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。charch1,ch2;/*定义两个字符变量:ch1,ch2*/ch1=’a’;ch2=’b’;/*给字符变量赋值*2.说明(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算3.举例[例1]main(){charch1,ch2;ch1='a';ch2='b';printf(“ch1=%c,ch2=%c\n”,ch1,ch2);printf(“ch1=%d,ch2=%d\n”,ch1,ch2);}C语言程序设计第3章第7页程序运行结果:ch1=a,ch2=bch1=97,ch2=98[例2]main(){charch1,ch2;ch1=‘a’;ch2=‘B’;/*字母的大小写转换*/printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32);}程序运行结果:ch1=A,ch2=b4.总结关于数据存储输出的总结1)不同类型数据的存储长度不同,能表示数的有效范围也不同2)不同类型数据赋值时应赋有效值3)不同类型数据输出时应用相应输出格式符字符型(char)S0000000整型(int)S000000000000000实型(float)S0000000000000000000000000000000[例1]main(){charc=128;printf(“%c”,c);printf(“%d”,c);c=256;printf(“%c”,c);printf(“%d”,c);}C语言程序设计第3章第8页[例2]main(){intx=3.5;inty=0x7fff;printf(“%d”,x);printf(“%d”,y);y=0x8000;printf(“%d”,y);y=0x10000;printf(“%d”,y);y=0x10001;printf(“%d”,y);}[例3]main(){longx=365;printf(“%d”,x);printf(“%Ld”,x);x=0x8000;printf(“%d”,x);printf(“%Ld”,x);x=0x10000;printf(“%d”,x);printf(“%Ld”,x);x=0x110001;printf(“%d”,x);printf(“%Ld”,x);}C语言程序设计第3章第9页三、字符串常量1.字符串常量的概念字符串常量是指用一对双引号括起来的一串字符。双引号只起定界作用。例如:China,Cprogram,YES,33312-2341,A等。2.字符串的存储和长度C语言中,字符串常量在内存中存储时,系统自动在字符串的末尾加一个“串结束标志”,即ASCII码值为0的字符NULL,常用\0表示。因此在程序中,长度为n个字符的字符串常量,在内存中占有n+1个字节的存储空间。例如,字符串China有5个字符,作为字符串常量China存储于内存中时,共占6个字节,系统自动在后面加上NULL字符,其存储形式为:China\03.说明要特别注意字符串与字符串常量的区别,除了表示形式不同外,其存储性质也不相同,字符'A'只占1个字节,而字符串常量A占2个字节。9‘9’9§3.5各类数值型数据见的混合运算先看下面例子,理解什么是数值数据的混合运算[例1]main(){intx=3;longy=100floatz;z=x+y;x=y+23;y=z+x;printf(“%d,%d,%d”,x,y,z);}C语言程序设计第3章第10页不同类型数值数据混合运算时应注意:简单类型赋值给复杂类型可以,反之则有问题§3.6算术运算符和算术表达式一、算术运算符和算术表达式1.基本算术运算符+3+5a+b-4-6x-y*3*53.14*s/5/25.0/2-5/3%7%4(整数求余运算)用算术运算符、括号,把数值型常量、变量连接起来就是算术表达式[例]main(){intx;folaty;x=5/2;y=5/2;printf(“%d,%f”,x,y);x=-5/2;y=5.0/2;printf(“%d,%f”,x,y);}2.自增、自减运算符作用是使变量的值增1或减1++i++++i--i----ix=I++相当于x=I;I=I+1;x=++I相当于I=I+1;x=I;C语言程序设计第3章第11页[例]main(){inti=10,j=10;intx,y;x=i++;printf(“%d,%d”,x,i);x=++jprintf(“%d,%d”,x,j);y=x--;printf(“%d,%d”,y,x);x=100y=--x;printf(“%d,%d”,y,x);}[例]main(){intI=5,j=10;I++;printf(“%d”,I);printf(“%d”,I++);printf(“%d”,++I)printf(“%d,%d”,j++,j++);}3.说明不要写有二义性的语句或晦涩语句,应写成多个简单语句。C语言程序设计第3章第12页如x=y+++zprintf(“%d,%d”,j++,j++)应写为多句,或用括号说明先计算哪部分3++(错误)二、算术运算符的优先级和结合性1.优先级先乘除余,后加减3+5%4-2*52.结合性左结合性3*6/2*5右结合行a=b=3§3.7赋值运算符和赋值表达式一、赋值运算符和赋值表达式1.赋