版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计-第2章,1,第2章 数据描述与数据类型,2.1 C语言的词法元素 2.2 C语言的数据类型 2.3 常量 2.4 变量及其类型 2.5 用const修饰变量,C语言程序设计-第2章,2,2.1 C语言的词法元素,C语言的词法元素可以归为两大类:字符集和单词。,2.1.1 C字符集,字符是可识别的最小符号,也是记录有意义书写的基本符号。C标准并没有规定C语言必须使用哪种字符集,但规定了必须包含下列四类字符:,C语言程序设计-第2章,3,1英文字母(大小写视为不同的两个字母): a z 和A Z 2数字字符: 0 9 3特殊字符: + - * / % . ” # 空格 ( ) _(
2、下划线) 4转义字符 ( 见2.3节),注意:字符在计算机中是以整数形式存储的,它的值就是对应的ASCII码。,C语言程序设计-第2章,4,2.1.2 单词,单词是由一个或多个合法的字符构成的具有特定含义的词法记号,它是构成语句的基本单位。C语言的单词有如下六种:,1关键字,2标识符,3运算符,4分隔符,5常量,6注释,C语言程序设计-第2章,5,2.2 C语言的数据类型2.2.1 概述,通俗地讲:数据类型是值的集合以及定义在这个值集上的一组操作的总称。,关于数据类型,目前我们只要知道以下几点:,1.数据类型是处理对象的一个抽象描述,它刻画了对象的公共特性。因此,一个数据类型定义了相似对象的一
3、个集合。,2.一个数据类型用一个特定的名字(称为类型名)标识。这个名字可以被用于程序中传达处理对象的语义信息。,C语言程序设计-第2章,6,一个程序设计语言所能提供的数据类型的多少,决定了这个语言的问题求解能力。,必须明确: 任一数据都必须与一确定的数据类型相关联。,通常,数据类型是按数据处理对象的性质、表示形式、占据存储空间的多少和构造特点来划分的。在语言中,数据类型可分为基本数据类型、构造数据类型和指针类型三大类。,3.数据类型确定了具有其特性的实体的结构表示,但结构表示本身对用户是隐藏的。,C语言程序设计-第2章,7,2.2.2 基本数据类型,基本数据类型是系统预定义好的数据类型。在C中
4、,系统为每种基本数据类型都使用一个关键字来命名,即基本数据类型的类型名是系统指定的。基本数据类型的特点有二:首先,它是机器硬件能直接支持的数据对象;其次,其值不可以再分解为其它类型,所以又称为简单数据类型。,C语言有五种基本数据类型,即字符型、整型、单精度实型、双精度实型和空类型,系统赋予的类型名分别为char、int、float、double和void。前四种基本数据类型的前面还可以加修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。有四种修饰符,它们是signed(有符号)、unsigned(无符号)、long(长型符)和short(短型符)。前四种基本数据类型的长度和
5、取值范围随处理器的类型和C语言编译器的实现而有所不同。,C语言程序设计-第2章,8,2.2.3 构造数据类型,构造数据类型是用户利用已声明的一个或多个数据类型用“构造”的方法声明的较复杂的数据类型。因此,一个构造类型的数据对象,其值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。构造类型的类型名都是由用户命名的。,C语言有三种构造类型:数组、结构和联合类型。,C语言程序设计-第2章,9,2.2.4 指针类型,指针是一种特殊的,同时又是具有重要作用的数据类型,它在C语言中具有举足轻重的地位。,C语言对指针在应用上不加限制的灵活性几乎达到了登峰造极的地步。也
6、正是指针的灵活性,使得许多程序员对它既欲哭无泪,又爱不释手;既深受其害,亦受益匪浅。,C语言程序设计-第2章,10,2.3 常量,任一常量一定与某一种基本数据类型相对应。,2.3.1 整型常量,1十进制整常数。不能以以0开头。如018。,2八进制整常数。必须以0开头。,3. 十六进制整常数。以0X或0 x开头。,整常数是根据前缀来区分各种进制数的。,C语言程序设计-第2章,11,4. 整型常数的后缀,整数有九种类型。程序中出现的一个整型常数究竟属于哪一种呢?答案取决于这个整型常数的书写形式,即通过加后缀的方法来区分。缺省情况下认为是int型。,需要注意的是,从语法角度看,负数-100不是整型常
7、量而是一个常量表达式,因为编译器将负号解释为单目运算符而不是数值的一部分。,C语言程序设计-第2章,12,2.3.2 整数在机内的表示形式,计算机中的数是用二进制来表示的,数的符号也是用二进制表示,一般用最高有效位来表示数的符号,正数和负数分别用0和1表示。多数机器的整数采用补码表示法。,在补码表示法中,正数采用符号-绝对值表示法,即数的最高有效位表示数的符号,为0表示符号为正,数的其余部分则表示数的绝对值。,负数X用2n-X来表示,其中n为机器的字长。如:,-1补=216-1=1111111111111111,-32767补=216-32767=1000000000000001,C语言程序设
8、计-第2章,13,2.3.3 实型常量,实型常量也称为实数或者浮点数。在语言中,实数只采用十进制表示。它有二种形式:,1一般表示形式 日常习惯表示法:0.23,-10.181,2. 指数表示形式(科学表示法),由十进制数和字母“e”或“E”组成。其一般形式为 aEn 意为a10n(a为十进制数,n为十进制整数,a和n可以带符号)。例如: 2.3E5 表示2.3105, 6.7E-2 表示6.710-2。,C语言程序设计-第2章,14,在表示实型常量时,要注意以下几点:,(1) 整数部分和小数部分可省略其中任一个。 .25, 22.,(2) 使用指数表示时,两边要用数“夹住” E或e。,(3)
9、实型常量的缺省数据类型为double类型。,(4) 可以在实型常量之后加上后缀F或f,或者加上L或l,使其具有指定的类型。如:,-1.23E12 正确; 235E 错,12.5F 使得常数12.5具有float类型 12.5L 使得常数12.5具有long double类型,C语言程序设计-第2章,15,2.3.4 实数在机内的表示形式,实数在机内是采用指数形式存储的。以Turbo C的float类型为例,一个实型量需要占用连续四个字节(32bit)的内存。计算机将这四个字节划分成四个部分,如图2-2所示,最高位是数的符号位;然后用若干位存放实数的小数部分;接下来用一位表示指数的符号;最后的若
10、干位存放实数的指数部分。,C语言程序设计-第2章,16,2.3.5 字符常量,C语言提供了两种表示字符常量的方法:,1.用单撇号括起来的一个字符。如: 5,A,2.转义字符。,转义字符以反斜线开头,后跟一个或几个字符。,n 回车换行 t 横向跳到下一制表位置(Tab键) b 退格(Backspace键)r 回车 反斜线字符“” 单引号字符 ddd 13位八进制数所代表的字符 xhh 12位十六进制数所代表的字符,注意:字符常量的类型是int类型,C语言程序设计-第2章,17,2.3.6 字符串常量,字符串常量是由一对双引号括起的字符序列,双引号不属于字符串。特别指出三点:,1.存储时,字符串常
11、量占的内存字节数等于字符串常量中的字符个数加1。增加的一个字节用来存放空字符“0”(ASCII码为0),它是字符串结束的标志。也就是说,在存储一个字符串时,编译器会自动在串的末尾添加一个串结束标志“0”。图2-3是字符串常量PROGRAMMING IN C在内存的存储形式,其中“20”是空格字符的十六进制编码。,C语言程序设计-第2章,18,2.当字符串常量作为表达式出现时,该表达式的值是存放该字符串的首地址,而不是字符串本身。例如:,ptr = PROGRAMMING IN C ;,3.ANSI C声明,如果对一个字符串常量进行修改,其结果是未定义的。,特别地,字符串“A”与字符常量A不是一
12、回事。区别有二:,(1)前者的值是一个地址值;后者的值是一个整数。,(2)前者的存储长度是2;后者的存储长度是1。,C语言程序设计-第2章,19,2.3.7 用#define定义常量,用#define定义常量,其实质就是给常量取一个名字,以企图用这个名字来表达常量的语义。这个名字称之为符号常量。符号常量在使用之前必须先定义,其定义格式为: #define 标识符 常量,例如,将3.14定义为圆周率,并用名字PI来表示,则可定义如下: #define PI 3.14,于是,对于语句:,printf(%f, %f,PI, PI*r);,那么,经预处理程序处理后,这条语句将产生如下形式: print
13、f(%f, %f,3.14, 3.14*r);,其中,“%f”表示要求输出一个实数。可见,语句中凡出现PI的地方都用3.14去替换。PI就是常数3.14,显然,“PI”的含义要明确得多。,C语言程序设计-第2章,20,一个好的程序设计风格是,尽可能使用符号常量而不是具体的数值量。使用符号常量至少有如下两个明显的好处:,1.能提高程序的可读性。,2.程序的修改和维护更方便。,注意:符号常量一经定义,就不能再赋予它新的值。,C语言程序设计-第2章,21,2.4 变量及其类型,变量总是与类型相关联。数据类型(有时简称类型)是一种组织数据的手段。,2.4.1 什么是变量,变量是特定存储区的符号表示,是
14、对存储空间的一种抽象。,程序员不但关心变量的表现形式,还关心变量的(当前)值和它的取值范围以及能对它施加什么样的运算。这就是所谓变量的数据类型问题。与常量一样,任一变量都与一确定的数据类型相对应。这个类型决定了相关内存的大小、数据的组织形式、能够存储在该存储区的值的范围以及可以应用其上的操作集。,变量必须先定义后才能被引用。变量定义的基本格式是: 数据类型名 变量名;,C语言程序设计-第2章,22,2.4.2 整数类型变量,整数类型名是“int”,因此,整型变量定义的基本格式是: int 变量名;,变量定义是一个语句而不是一条命令。C语言规定:一个语句的终结符是分号。比如,如果要定义一个名为i
15、sum的int变量,可以这样书写: int isum;,变量定义语句是由编译器解析执行的。因此,这个语句告诉编译器:定义了一个名为isum的int变量,请为该变量分配足够的内存空间。,一个语句可定义多个变量,如下面的格式: int 整型变量1,整型变量2,整型变量n;,下面的语句定义了三个整型变量i,j和k: int i,j,k;,C语言程序设计-第2章,23,一个变量被定义后,其值是不确定的。,如果要确保变量在定义后就具有确定的值,就需要在定义的同时为变量指定一个初始值,我们称之为给变量初始化。下面的例子说明了给变量初始化的方法:,int isum,itotal=1;,这个定义语句等价于下面
16、两个语句: int isum; int itotal=1;,其中,变量isum的值或是不确定的,或是由编译器缺省定义的。但变量itotal已被初始化,即itotal的值等于1。,直接引用未初始化的变量是个常见的错误,可能还很难发现。所以,在大多数情况下,定义变量的同时进行初始化是一个明智的方法。,C语言程序设计-第2章,24,变量定义的一般格式是:,其中方括号“”表示“任选项”。,类型名 标识符1=初始值1,标识符2=初始值2,标识符n=初始值n;,我们前面所讨论的int型变量称为基本整型变量。除了基本型外,整型变量还可分为短整量、长整型和无符号型三类,它们是在定义时通过加修饰符来区分的。下面
17、是一个例子:,例2.3 基本整型定义示例(这三个定义语句完全等价。): int isum; /* int总是隐含为带符号 */ signed int isum; signed isum;,例2.5 无符号短整型定义示例: unsigned short int isum; unsigned short isum; 这两个定义语句完全等价。,C语言程序设计-第2章,25,例2.6 带符号长整型定义示例: long isum; long int isum; signed long isum; signed long int isum; 这四个定义语句也是等价的。,ANSI C并没有规定长整型必须比短
18、整型长,只是规定它不能比短整型短。它们之间的基本关系是:long int至少要与int一样长,int至少要与short int一样长。通常情况是,long int至少32bit,short int至少16bit,至于int是16bit还是32bit,视编译器而定。,注意,变量的命名应遵循以下规则: (1)不能用关键字命名变量; (2)必须符合标识符的定义,且能见名知义,体现良好的程序设计风格; (3)不能与C标准库函数名同名。,C语言程序设计-第2章,26,2.4.3 实数类型变量,实数类型变量(简称实型变量)的定义格式与整型变量类似,只是数据类型名不同。实型变量分为三类:,(1) 单精度实型
19、,数据类型名为float。4字节,float x,y = 0.0;,(2) 双精度实型,数据类型名为double。8字节,double x,y;,(3) 长双精度实型,数据类型名为long double。10字节,long double x,y=0.0L;,注意: ANSI C只是规定了long double类型所占空间长度至少与double类型一样长,而double类型所占空间长度至少与float类型一样长。因此,实数类型所占空间的实际长度与具体的编译器有关。,C语言程序设计-第2章,27,2.4.4 实型数在应用中的误差问题,/* 本程序考察实数表示的误差 */ #include int
20、main() float r1, r2; /* 定义变量 r1,r2为单精度型 */ double x1, x2; /* 定义变量 x1,x2为双精度型 */ r1 = 12345.12345678; /* 为r1赋值,以下语句类似 */ r2 = 123.123456789; x1 = 12345.123456789; x2 = 1234567891234.123456789; printf(r1=%ftr2=%fnx1=%ftx2=%fn,r1,r2,x1,x2); 程序输出为: r1=12345.123047 r2=123.123459 x1=12345.123457 x2=123456
21、7891234.123540,C语言程序设计-第2章,28,2.4.5 字符类型变量,字符变量的取值是字符常量,即单个字符。字符变量的类型名是char。,每个字符变量被分配一个字节(即8 bit)的内存空间,因此只能存放一个字符。字符值是以 ASCII码的形式存放在变量的内存单元之中的。,char a,b=b;,可以把字符变量看成是整型量。语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。,C语言程序设计-第2章,29,/* 本程序说明字符型量可以作算术运算 */ #include int main() char chA,
22、chB,cha = a,chb = 98; chA = cha - 32; /* 将小写字母a转换为大写字母A */ chB = chb - 32; /* 将小写字母b转换为大写字母B */ printf(cha=%c,cha=%dn,cha,cha); printf(chb=%c,chb=%dn,cha,cha); printf(chA=%c,chA=%dn,chA,chA); printf(chB=%c,chB=%dn,chB,chB); 程序输出: cha=a,cha=97 chb=b,chb=98 chA=A,cha=65 chB=B,chB=66,C语言程序设计-第2章,30,2.4
23、.6 指针变量,指针变量是值为地址的变量。指针确立了一个变量对另一个变量的“指向”关系。如果指针变量p的值是整型变量val的存储地址,我们就说指针p“指向”了变量val,如图2-6(c)所示。我们称变量val是指针p所指向的目标对象。指针变量定义的一般形式是:, *=;,float *p1,*p2; int val,*s = NULL; int *p = int *iptr= 程序运行结果: a = 10 s = String,C语言程序设计-第2章,32,2.4.7 枚举类型变量,枚举类型是通过枚举(一一列举)所有可取的值来定义一个有序可数的值集。这个值集中的元素是标识符,这些标识符是事实上
24、的符号常量。可见,枚举类型是以符号常量而不是数值常量作为其值的一种特殊类型。其定义的一般形式为: enum 枚举类型名 标识符=整型常数, 标识符=整型常数, 标识符=整型常数, 枚举变量; 其中,enum是保留字,用来定义枚举类型,方括号中内容为任选。例如: enum Color RED, BLUE, GREEN, WHITE, BLACK ;,C语言程序设计-第2章,33,在定义了枚举类型名后,我们可以引用类型名定义枚举变量。一般形式为: enum 类型名 变量名表;,例如: enum Color mycolor1, mycolor2; 这个定义语句定义了两个枚举类型变量mycolor1, mycolor2。当然,也可以在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老院洗浴过程中的心理支持与疏导
- 书写活动策划方案大全(3篇)
- 内地高校活动策划方案(3篇)
- 垫层铁网施工方案(3篇)
- 惠州营销推广方案(3篇)
- 施工方案验算交流(3篇)
- 机场书店营销方案(3篇)
- 欧式立柱施工方案(3篇)
- 油罐切割施工方案(3篇)
- 渗透提施工方案(3篇)
- 武汉纺织大学毕业设计(论文)格式模板一
- 泌尿、男生殖系统的其他疾病
- 安全玻璃类强制性认证实施规则
- 大罐翻新喷漆施工方案设计
- 2025至2030中国安全预填充注射器行业产业运行态势及投资规划深度研究报告
- 天然气管道防腐涂层施工技术方案
- (正式版)DB6101∕T 3080-2020 《西安传统小吃制作技术规程 蒸碗 粉蒸肉》
- 北汽福田乘用车营销战略深度剖析与重塑路径
- 椎管内肿瘤护理
- 浙江省金华市2025年4月九年级学业水平监测试卷英语一模(含答案)
- 肿瘤科副主任竞聘
评论
0/150
提交评论