C语言程序设计与数据结构第二章数据类型、运算符与表达式学习重点:•数据类型的种类;•常量与变量的区别及表式形式;•运算符的优先级及结合性;•各种数据类型之间的相互转换。C语言程序设计与数据结构2.1C语言的数据类型在各种程序设计中几乎都要使用和处理数据,程序设计的过程就是对数据加工的过程。一种语言支持的数据类型越丰富,它的功能就越强,应用范围就越广。对于程序中的数据,编译程序会为其分配一块内存空间存放;数据的改变其实就是指存储空间中内容的改变。但分配多大的内存空间来容纳这个数据合适呢?这可由数据的类型决定;另外对于数据的变化范围也可由数据类型来体现。数据类型将决定一个数据所占的内存数、数据的到值范围及可对数据进行的各种操作。C语言提供了丰富的数据类型,不仅能表达并处理诸如整数、实数、字符等基本类型的数据,还可以组织并处理复杂的数据结构(如链表、队列、树等)。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。C语言程序设计与数据结构2.2常量与变量2.2.1标识符指用来标识变量名、符号常量名、函数名、数组名和文件名等的有效字符序列,简单说,标识符就是一个名字。C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。下面的标识符都是合法的:sum,mouth,PI,s123,area,name_1下面的标识符都是不合法的:45D,ab,day-1,m.m标识符的命名规则:(1)不能与关健字相同。C语言规定了一批标识符,它们都有其固定的含义,不能另作它用,如:int、float、if、else、break、printf、define等。(2)标识符区分大小写。如:area和Area系统认为是两个不同的标识符。(3)程序中使用的标识符应注意做到“见名知意”。命名时尽量选取具有相关含义的英文单词或汉语拼音,如:number2、area、name等,以增加程序的可读性。。C语言程序设计与数据结构2.2.2常量C语言中的数据有常量和变量之分,它们都属于2.1节中所列出的数据类型。在程序运行过程中,其值不发生变化的量称为常量。根据表示形式的不同,常量又可分为直接常量和符号常量。1.直接常量直接常量又称为字面常量,就是人们通常所说的常数,单从字面形式即可判断出数据属于哪一种数据类型。例如:很容易判断出456是整型常量,4.6是实型常量,‘b’是字符型常量等等,本章后面几个小节中还要详讲。【例2.1】下列程序运行后的输出结果为。main(){charm;m=’B’+32;/*这里的‘B’是直接常量*/printf(“%c”,m);}运行结果为:aC语言程序设计与数据结构2.符号常量符号常量是指用标识符来代表一个常量,即标识符形式的常量。在程序中的使用方式如下:#define标识符常量数据如:#definePI3.1415926这样,在程序中凡是出现的大写字母PI,计算机会全部将它替换为3.1415926。习惯上,符号常量名采用大写,变量名用小写,以示区别。但符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。采用符号常量的优点如下:(1)含义清楚。在定义符号常量时尽量做到“见名知意”,如在程序中看到符号常量PRICE就可知道它代表一个价格数据。(2)在需要改变一个常量时能做到“一改全改”。在程序中多次用到某商品价格,可用PRICE代表;当价格需调整时,若用符号常量PRICE代表价格,则只需改动一处即可。C语言程序设计与数据结构【例2.2】输入一个半径值,分别计算其圆面积。#definePI3.1415926/*定义一个符号常量PI*/main(){doubler,s;/*定义实型变量r,s*/printf(“Inputradius:”);scanf(“%f”,&r);s=PI*r*r;printf(“\ns=%f”,s);}运行结果为:Inputaradius:3↙s=28.274333C语言程序设计与数据结构2.2.3变量变量是指在程序执行过程中其值可以改变的量。每个变量都有一个名字,称为变量名;每个变量在计算机内存中都占据一定的存储单元,存储单元中存放的数据称作变量值。请注意区分变量名和变量值这两个不同的概念。变量名实际上是一个符号地址,对应着存储单元的编号;而变量值则是存储单元里存放的具体数据。变量名是用户自己指定的,如floatb中的b就是用户指定的变量名,变量名的命名规则应遵守标识符的命名规则。事实上,程序中通过变量名使用该变量,实际上就是对它的值的使用。1.变量的声明C语言规定在程序中用到的每一个变量都应该先定义后使用。变量的声明也称为变量的定义,通过声明确定变量中存放的数据属于哪一种数据类型。这样做的优点是:(1)正确使用变量名。凡事先未被定义的名字,不能作为变量名,这就保证了程序中变量名的一致性。例如,在程序的数据定义部分用语句floatarea;定义了变量area,而在以后的语句中如果错写成了srea=3.14*r*r;在编译时就会提示srea没有定义,很容易就能发现错误所在。C语言程序设计与数据结构(2)合理使用内存。不同类型的数据所占的存储单元数量是不同的,每一个变量根据实际需要被声明为一确定类型之后,在编译时就能获得相应数量的存储单元。(3)能够进行合法运算。一种数据类型对应着一组允许的操作。如实数不能进行求余运算,字符串不能进行乘除等。通过变量的声明定义了类型以后,如果不小心在程序语句中含有非法运算,编译系统会提示错误信息。声明变量的语句形式为:数据类型变量名1,变量名2,…;例如:intcount;floatr,area;2、变量的初始化变量的初始化是指在声明变量的同时就给它赋一个初值。C语言允许对变量进行初始化,变量初始化的语句形式是:变量类型变量名1=初值1,变量名2=初值2,…;如:intcount=1,xh=1;也可以只给被定义的变量中的一部分赋初值,如:floatr=4.5,n,y=7;/*r的初值为4.5,y的初值为7*/用赋初值的方法使变量在一开始就得到一个初值,使程序简练,提高了程序的可读性。C语言程序设计与数据结构、变量赋值变量的赋值是指把一个数据传送到系统给变量分配的存储单元中存放。在定义一个变量时,系统自动根据变量类型为其分配存储空间;但是当此变量在定义时没有初始化,其变量值就是一个无法预料、没有意义的值。所以,通常都要给变量赋一个有意义的值。C语言中的赋值操作由赋值运算符“=”来完成,一般形式为:变量=表达式;例如:x=100;y=x+5;说明:(1)“=”在C语言中是赋值符号,不是等于号。C语言中的等于号是用双等号“==”表示。(2)程序中可多次给同一个变量赋值。多次赋值后,变量中存放的是最后一次所赋的那个数。(3)赋值运算符左侧只能是变量名,不能是常量或表达式。如:x+y=c是不合法的赋值表达式。(4)赋值运算是把“=”号右边表达式的值赋给“=”号左边的变量。因此,象a=a+1这样的在数学中认为是不成立的表达式,在C语言中却是认可的,它表示将a原来的值加上1之后再赋给a。(5)允许辗转赋值。即允许一个表达式中包含多个“=”号。例如:intx,y,z;x=y=z=1;是先把1赋给变量z,再把z的值即1赋给变量y,最后将y的值即1赋给变量x。3C语言程序设计与数据结构2.3整数类型2.3.1整型常量整型常量也叫整常数。在C语言中可以用下面三种形式表示:1.十进制整数。十进制整常数没有前缀,其数码为0~9。如:25,-103,0等。。2.八进制整数。八进制整常数以0作为八进制数的前缀,数码取值为0~7。如:041表示八进制的41,即等于十进制的33;-017表示八进制的-17,即等于十进制的-15。3.十六进制数。十六进制整常数以0X或0x的前缀,其数码取值为0~9,A~F或a~f。如0x64表示十六进制的64,即等于十进制的100;-0x1c表示十六进制的-1c,即等于十进制的-28。在程序中是根据前缀来区分各种进制整数的,因此在书写常数时不要把前缀弄错以免造成结果不正确。对于上述整数的表示,若在数据的末尾加后缀字母l或L,则称为长整数。如25L,0xd3l等。长整数所能表示的数的范围更大。C语言程序设计与数据结构2.3.2整型变量整型变量可分为:基本型:类型说明符为int,在内存中占2个字节。短整量:类型说明符为shortint或short,所占字节和取值范围均与基本型相同。长整型:类型说明符为longint或long,在内存中占4个字节。例如:inta,b,c;(a,b,c为整型变量)longx,y;(x,y为长整型变量)在书写变量定义时,应注意以下几点:(1)允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔;类型说明符与变量名之间至少用一个空格间隔。(2)最后一个变量名之后必须以“;”号结尾。(3)变量定义必须放在变量使用之前。一般放在函数体的开头部分。C语言对不同类型的数据分配不同长度的存储空间并按二进制进行存储。因此,不同类型的数据所能表示的取值范围不同。在内存中存储数据时,一般把最高位当作符号位,该位为0表示正数,为1表示负数;计算机在判断一个数的正负时,就是根据最高位进行的。C语言程序设计与数据结构通常short型和int型数据都占2字节(即16位二进制)的存储空间,所以其取值范围为-215~+215-1,即十进制的-32768~+32767。如果超出这个范围,可采用long型(长整型)。long型数据占4字节(即32位二进制)的存储空间,所以其取值范围为-231~+231-1,即十进制的-2147483648~+2147483647。C语言还允许使用无符号整数(unsigned),这时,最高位不再是符号位,而视为数据位,即该数在存储单元中的全部二进制位都是数本身,而不包括符号。与有着同样长度的有符号(signed)数相比,所能表示的最大值增加了一倍。但由于省去了符号位,故不能表示负数。与整数的分类相似,无符号数又分为无符号整数(unsignedint)、无符号短整数(unsignedshort)以及无符号长整数(unsignedlong)。对于无符号整数和无符号长整数,相应的取值范围分别是:0~65535,0~4294967295。C语言程序设计与数据结构2.4实数类型2.4.1实型常量实型常量又称为实数。在C语言中,实数只采用十进制表示,它有二种形式:十进制小数形式或十进制指数形式。1.十进制小数形式。它由数字和小数点组成。如:0.618,0.0,456.13等。小数点是必须有的,即使我们给定的实数没有小数点,计算机也会自动加上小数点的。2.十进制指数形式。由十进制数,加阶码标志“e”或“E”及阶码组成。。其一般形式为:aEn(a为十进制数,n为十进制整数,其值大小为a*10n)如:2.1E5(等于2.1*105)3.7E-2(等于3.7*10-2)【例2.3】以下符合C语言语法的实型常量是()。A)1.2E0.5B)3.1415EC).5E-3D)E15正确答案为:CC语言程序设计与数据结构2.4.2实型变量C语言中的实型变量分为单精度和双精度两类,分别用类型名float和double进行定义;且只能表示有符号的十进制数。在内存中单精度型数据占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型数据占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。小数部分占的位数愈多,数的有效数字愈多,精度愈高。而实型常数不分单、双精度类型,都按双精度double型处理。C语言程序设计与数据结构2.5字符类型字符型数据包括字符常量和字符变量。2.5.1字符型常量字符常量是用单引号括起来的单个字符。例如:'a'、'b'、'='、'+'、'7'都是合法的字符常量。在C语言中,字符常量有以下特点:(1)字符常量只能用单引号括起来,不能用双引号或其它括号。(2)字符常量只能是单个字符,不能