第二章基本数据类型运算符和表达式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章C语言的基本数据类型、运算符和表达式2.1数据类型的概念数据类型是指数据的内在表现形式。通俗地说,我们把数据在加工计算中的特征称为数据的类型。数据类型包含两方面的含义:一是该类型数据可以取值的范围;二是在该范围内的数据可以进行的操作。例如,两个人的年龄可以进行加法、减法运算;两个人的工资也可以进行加法、减法运算。年龄和工资都具有一般数值的特点,在C语言中称为数值型,其中年龄是整数,所以称为整型;工资一般为实数,所称为实型。又如两个人的姓名是不能进行加法、减法运算的,这种数据具有文字的特征,在C语言中称为字符串。单个字符称为字符型数据。在C语言中我们把整型和实型全称为“数值型”,把数值型和字符合称为“基本数据类型”。此外,C语言根据数据加工处理的特征,还设有其它复杂的数据类型,具体如图2.1.1所示。整型实型字符型图2.1.1C语言的数据类型其中“构造类型”是指由若干个相关的基本数据类型组合在一起形成的一种复杂的数据类型。例如,若干个人的年龄组合在一起,就是一个数组,若干个人的基本工资、职务工资、奖金组合在一起,也是一个数组。前者是由整型数据组成的一维数组,后者是由实型数据组成的二维数组。又如,一个人的姓名、年龄、基本工资也可以组合在一起,它们的数据类型不同,在C语言中称为“结构体类型”。如果有若干个数据不同时使用,我们也可以让它们占用相同的内存区域,以便节省内存,这些数据组合在一起就是“联合体类型”,联合体类型中的数据可以是同类型的,也可以是不同类型的。指针型是一种简单的数据类型,它是用来表示内存地址的。指针类型的数据可以表示基本类型数据的地址,也可以表示结构类型数据的首地址和其中某个具体数据的地址,还可以单精度型双精度型短整型长整型无符号整型枚举型数组型结构体型联合体型无符号短整型无符号长整型基本类型数据类型空类型指针型构造类型表示某指针的地址(称为指针的指针)。例如存放一个人年龄的内存的地址,存放某数组的首地址,存放某结构数据的首地址都可以用指针型数据来存放。设立指针型数据是为了方便C语言的动态处理。如果某数据在程序运行中,只有固定的几个值,我们就可以把这几个值列出来,以后这个数据只能取确定的几个值中的某一个。这种数据在C语言中就叫做“枚举型”。空类型是从语法完整性的角度给出的一个数据类型,表示该处不需要具体的数据值,因而没有数据类型。每个数据都要在内存中(个别数据可能在寄存器中)分配若干个字节,用于存放该数据。不同类型的数据在内存中占用的字节数是不同的,因此C语言要求每使用一个数据之前,必须对数据的类型加以说明(常量不必事先说明),以便为其安排合适的内存。C语言的基本数据类型有整型、实型和字符型,各类型的分类及表示方法见表2.1.1。表2.1.1C语言基本数据类型分类类型表示方法占位值域整型基本整型int16-215~(215-1)短整型short16-215~(215-1)长整型long32-231~(231-1)无符号整型unsigned160~(216-1)无符号短整型unsignedshort160~(216-1)无符号长整型unsignedlong320~(232-1)实型单精度实型float323.4E-38~3.4E+38双精度实型double641.7E-308~1.7E+308长双精度实型longdouble803.4E-4932~1.7E+4932字符型基本字符型charvoid8-128~127无符号字符型unsignedchar80~255本章主要介绍基本数据类型的数据特征、说明方法和使用,其它数据类型将在后续章节中逐步介绍。2.2常量、变量与标识符2.2.1常量和符号常量在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型,如12、0、-3为整型常量,4.6、-1.23为实型常量,'a'、'd'等为字符常量。常量一般从其字面形式即可判别。也可以用一个标识符代表一个常量,如:[例2.2.1]#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(″total=%d″,total);}程序中用#define命令行定义PRICE代表常量30,此后凡在此文件中出现的PRICE都代表30,可以和常量一样进行运算,程序运行结果为total=300有关#define命令行的详细用法参见后续章节。这种用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。注意符号常量不同于变量,它的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。如再用以下赋值语句给PRICE赋值:PRICE=40;是错误的。习惯上,符号常量多用大写,变量用小写,以示区别。2.2.2变量其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。请注意区分变量名和变量值这两个不同的概念。和其它高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符(identifier)。简单地说,标识符就是一个名字。C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。如下面是合法的标识符,也是合法的变量名。Sum,average,class,day,month,student,_name,lotus1_2_3,basic.下面是不合法的标识符和变量名:M.D.John,$123,x/y,#33,3D64,ab注意,大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。习惯上,变量名用小写字母表示,以增加可读性。C语言中标识符的长度(字符个数)无统一规定,随系统而不同。许多系统(如IBMPC的MSC)取前8个字符,假如程序中出现的变量名长度大于8个字符,则只有前面8个字符有效,后面的不被识别。例如,有两上变量:student_name和student_number,由于二者的前8个字符相同,系统认为这两个变量是一回事而不加区别。可以将它们改为:stud_name和stud_num,以使之区别。因此,在写程序时应注意了解所用系统对标识符长度的规定,以免出现上面的混淆。这种错误并不反映在编译过程中(即语法无错误),但运行结果显然不对。在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符,如count,name,day,month,class,city,country等,除了数值计算程序外,一般不要用代数符号(如a、b、c、x1、y1等)作变量名,以增加程序的可读性。这是结构化程序的一个特征。本书在一些简单的举例中,为简单起见,仍用单字符的变量名(如a、b、c等),请读者注意不要在其它所有程序中都如此。在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”,如例1.2.2、例1.2.3那样。这样做的目的是:1.凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用的正确。例如,如果在定义部分写了intstudent;而在执行语句中错写成statent。如statent=30;在编译时检查出statent未经定义,不作为变量名,因此输出“变量statent未经说明”的信息,便于用户发现错误,避免变量名使用时出错。2.每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。如指定a、b为int型,如果所用的IBMPC的TurboC,则为a和b各分配两个字节,并按整数方式存储数据。3.每一变量属于一个类型,就便于在编译时据此检查该变量所进行的运算是否合法。例如,整型变量a和b,可以进行求余运算:a%b%是“求余”(见2.6节),得到a/b的整余数。如果将a、b指定为实型变量,则不允许进行“求余”运算,在编译时会指出有关“出错信息”。2.2.3标识符及其命名在2.2.2中我们已经说明了标识符的使用,下面我们再对其总结如下:标识符是一种特定的字符序列,用来标记:变量名、符号常量名、数组名、函数名、类型名、标号和文件名等。1、所使用的字符必须使用C符号集中的英文字母、数字和下划线。2、长度ANSI标准规定标识符长度可以是1~32个字符。但是,在PC机中,标识符长度只有前面8个字符有效,超过8个字符后的字符将被忽略。例如,filename1与filename2被认为是同一个标识符。3、命名规则标识符的命名,必须以英文字母或下划线开头,其后可以跟或不跟其它合乎规定的字符。C语言严格区分字母的大小写,例如:BIG、big、Big、Big等都是不同的标识符。标识符本质上代表名字,因此命名要有意义。下面给出一些合法的与不合法的标识符名字。正确错误sum2aformula#abcala+ba2%xWang_MingWang·MingY_M_Dtest!1.2.4关键字关键字又叫保留字,是C编译系统预先定义的一些有特定含义的标识符。C语言将这些关键字定义成:存储类型符、数据类型符和语句定义符。它们只能按定义加以使用,而不能作常规的标识符使用。因此,在程序中选用变量名、函数名等标识符时,不能与关键字发生冲突。ANSI的C标准总共规定了32个关键字,都是用小写字母组成的,如表2.2.1所示。表2.2.1ANSIC标准规定的32个关键字autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofwhiledoifstaticvolstile除此之外,有一些C语言版本(如TurboC、MicrosoftC等)还扩充了一些别的关键字,以便充分利用PC机80x86CPU的存储结构,以及支持混合语言的程序设计和支持中断处理。表2.2.2列出了PC机上常用的扩充关键字。表2.2.2PC机上扩充的关键字asm_cs_dsessscdeclfarhugeinterruptneerpascal最后我们要指出,C语言预处理中用的一些专用词:defineundefincludeifdefendiflineelififndef虽然不属于关键字,但为了避免混乱,建议也把它们看成关键字,不要在程序中随便乱用。2.3常量的类型C语言中的常量有下面几种:2.3.1整型常量C语言的整型常量有三种表示形式:(1)十进制形式,如23、0、—34。(2)八进制形式(以0开头表示的数),如0123。(3)十六进制形式(以0x开头表示的数):如0x123、0xa、0xb、0xd、0xe、0xf。在整型常量后加I或L后缀,该常量被强制转换为long类型。类似地,后面加u或U将常量强制转换为unsigned类型;且不论何种进制表示,只要其值大于65535,此常量加上U后缀就被强制转换为unsignedlong类型。注:同一常量可使用L或U后缀。2.3.2实型常量C语言的实型常量有两种表示形式:(1)十进制数形式:如0.12、23.3,注意必须有小数点。(2)指数形式:如123e3或123E3都表示123*103。但应注意:字母e(或E)之前必须有数字且e或E后面指数必须为整数。如e3、2.le3.5、.E3等都是不合法的。2.3.3字符型常量C语言的字符常量是用单引号(即撇号)括起来的一个字符,如′a′、′x′、′F′、′&′等是字符常量,但注意小写和大写是不同的。如′a′与′A′是不同的字符。C语言还允许使用一种特殊形式的字符常量,就是以一个“\”开头的双字符,常用的特殊字符常量,见表2.3.1:表2.3.1特殊形式的字符常量字符形式功能字符形式功能\n回车换行\\反斜杠字符″\″\t横向跳格到下一个输出区\″双引号\v坚向跳格\a响铃\b向左退一个字符\’单引号\r回车,光标到本行的行首\ddd1到3位八进制数代表的字符\f走纸换页\xhh1到2位十六进制数代表的字符\?问号?

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功