第2章数据类型Word文件下载.docx
- 文档编号:16857184
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:83.53KB
第2章数据类型Word文件下载.docx
《第2章数据类型Word文件下载.docx》由会员分享,可在线阅读,更多相关《第2章数据类型Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
inta,b,c;
a50;
//a为十进制整数50
b032;
//b为八进制整数32
c0x5b;
//c为十六进制整数5b
printf(ad,bd,cd\n,a,b,c);
//以十进制整数形式输出a,b,c的值
}
运行结果如下:
a50,b26,c91
2.2.2实型常量
实数在C语言中又称浮点数。
实数有两种表示形式:
(1)十进制数形式。
它由数字和小数点组成(注意必须有小数点)。
如0.678,.678,678.0,678.,0.0都是十进制数形式。
(2)指数形式。
如54.0e3或54E3都代表54.0103。
但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e6,3.2e7.5,.e9,5e等都是不合法的指数形式。
2.2.3字符型常量
1.字符常量
C语言的字符常量是用单引号(即撇号)括起来的一个字符。
如a,A,#,?
等都是字符常量。
注意,a和A是不同的字符常量。
C语言中有些控制字符(又称非显示字符)是无法直接用字符常量形式表示的。
例如,前面已经遇到过的,在printf函数中的\n,它代表一个“换行”符,就是一个难以用字符常量表示的控制字符。
C语言规定用一种特殊形式表示控制字符,即以一个“\”开头的字符序列。
因为“\”后面的字符已不再是原来该字符的作用而转为新的含义,因而称为转义字符。
如\n中的“n”不代表字母n,而作为“换行”符。
C语言的转义字符如表2-1所示。
表2-1转义字符
字符
功能
\n
换行
\a
响铃
\t
横向跳格(跳到下一个输出区)
\\
反斜杠字符
\v
竖向跳格
\
单引号字符
\b
退格
双引号字符
\r
回车
\ddd
1到3位8进制数所代表的字符
\f
走纸换页
\xhh
1到2位16进制数所代表的字符
例2.2转义字符的验证。
printf(□□c\t□de\ra\tY\b=\n);
//为了反映空格的个数,用□表示空格
printf(\376);
第一个printf函数先在第一行左端开始输出“□□c”,然后遇到转义字符\t,它的作用是跳格,即跳到下一个“输出区”,在我们所用系统中一个“输出区”占8列。
“下一个输出区”从第9列开始,故在第911列上输出“□de”。
下面遇到转义字符\r,它代表“回车”(不换行),当前输出位置移至本行行首(第1列),输出字符a,然后遇转义字符\t再使当前输出位置移到第9列,输出字符Y,输出Y后当前输出位置是第10列。
然后遇转义字符\b,它的作用是“退格”,使当前输出位置回退到第9列,接着输出=。
下面是转义字符\n,它的作用是“回车换行”,当前输出位置移至下一行的行首。
第二个printf函数是输出转义字符\376,即字符■。
程序运行时,在打印机上得到如下结果(为了清晰地反映空格个数和对位关系,这里用□表示空格,并全部使用全角字符):
a□c□□□□□¥de
■
在显示屏上看到的结果是:
a□□□□□□□=de
这是由于转义字符\r使当前输出位置回到本行行首,自此输出的字符(包括空格和转义字符\t导致的跳格所经过的位置)将取代原来屏幕上显示的字符;
转义字符\b导致退格,使当前输出位置左移一列,该位置上原来屏幕上已显示字符也将被新输出的字符所取代。
实际上,屏幕上完全按程序要求输出了全部的字符,只是因为在输出前面的字符后很快又输出后面的字符,在人们还未看清楚之前,新的已取代了旧的,所以误认为未输出应输出的字符。
而在打印机输出时,不像显示屏那样会“抹掉”原字符,人们可以从打印机的运动过程观察到所有的输出过程和结果。
如在第9列上输出字符Y后又输出字符=,两字符重叠打印成“¥”。
2.字符串常量
字符串常量由一对双引号括起来的字符或转义字符序列构成。
如welcome、a、$567.88、Iamastudent.\n、\n\n等都是字符串常量。
注意:
a是字符常量,a是字符串常量,二者不同,不要混淆。
2.2.4符号常量
符号常量是在程序(或程序的一部分)中指定用一个符号(标识符)代表一个常量。
请看下面的例子:
例2.3符号常量的使用。
#definePI3.14159/*定义符号常量PI*/
floatradius,area;
radius2.0;
areaPI*radius*radius;
printf(Areaf\n,area);
程序中用#define命令行定义标识符PI代表常量3.14159,此后凡在此文件中出现的PI都代表3.14159,可以和常量一样参与运算。
程序运行结果为:
Area12.
说明:
(1)我们用符号PI代替常量3.14159,使程序更易理解,可读性好。
(2)当需要修改PI的值时只需要改一处即可,方便又不易出错。
(3)定义符号常量要用#define命令,一般格式是:
#define符号常量标识符常量
这是一种“预编译命令”。
有关#define命令的详细用法参见第12章。
符号常量不同于变量,它的值在其作用域(在本例为主函数)内不能改变,也不能再被赋值。
如使用以下赋值语句给符号常量PI赋值是错误的。
PI3.1415;
/*错误的赋值语句*/
习惯上,符号常量名用大写,变量名用小写,以示区别。
2.3变量
变量是指在程序运行过程中其值可以被改变的数据对象。
实质上,变量是程序中的数据连同其存储空间的抽象。
C语言规定变量必须先定义(也可称为声明)后使用。
所谓定义变量就是通过C语句要求系统为该变量分配一个适当的存储单元,供存放数据使用。
例如,C语句“intx;
”就是向系统申请一个能存放int(基本整数)型数据的存储单元,如图2-1(a)所示。
系统分配的这个单元只能存放int型的数据,且每一个时刻只能存放一个,x为这个单元的名字,我们称为变量名。
变量定义好后,我们可以通过变量名对该单元进行存取数据。
如C语句“x25;
”就是把25存入变量x中,其结果如图2-1(b)所示。
如果再执行C语句“x128;
”将把128存入变量x中,其结果如图2-1(c)所示,此时变量x的值就改变为128,而不再是25。
理解C语言的变量时应该注意以下几点:
(1)一个变量应该有一个名字,称为变量名,如变量名x。
(2)一个变量在内存中占据一定大小的存储单元,可以通过变量名对该存储单元存取变量的值,如128为变量x的值。
(3)变量是有类型的,不同类型的变量分配不同大小的存储空间,存放不同类型的数据。
如C语句“intx;
”定义的是一个int型变量,它所对应的存储单元是2个字节。
(4)所谓的变量应该包括变量名、存储单元、变量的值几部分内容。
2.3.1标识符的命名规则
与其他高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名等的有效字符序列称为标识符。
简单地说,标识符就是一个名字。
C语言是大小写敏感的,即大写和小写字母认为是不同的字母。
例如变量名name和NAME表示不同的名字。
C语言标识符的命名规则是:
(1)标识符只能由26个字母、数字和下横线“_”组成,且数字不能作为标识符的第一个字符。
(2)C语言中标识符的长度(字符个数)无统一规定,随系统而定。
在TurboC中,一个标识符的前31个字符在程序中是有效的,也即是说,它们可以相互区别。
(3)标识符中间不能有空格。
(4)C语言的关键字不能作为标识符。
例如,price、velocity、a3、interest、m_iNumber等都是合法的变量名,而101、NO.1、S&
T、#203、redflag、up-to-date等都是非法的变量名。
在编程时,变量、函数等标识符的命名是一个极其重要的问题。
好的命名方法使变量易于记忆且程序可读性大大提高。
标识符的命名方式,决定了程序书写的风格。
在整个程序中要保持统一风格,这很重要。
一般地,标识符的选择通常是“常用取简,专用取繁”,尽量“见名知义”,以增加程序的可读性。
例如,看到numberOfStuddents这个变量名就知道它表示学生数,即便写成numOfStudent也是一目了然。
另一方面,X6y5其含义就不是很清楚了。
习惯上,变量名用小写字母表示。
如果名字需要由两个单词或两个以上的单词(如math和score)组成,常用的两种命名方式是math_score和mathScore。
前一种形式称为连接命名法,它是通过下划线将多个单词连接起来;
后一种形式称为骆驼表示法,因为大写字母看起来像驼峰。
还有一种特别流行的方法是匈牙利标记法(Hungariannotation),该法在每个变量名字前面加上若干表示类型的字符,如,fMathScore表示实型变量(f代表float型)、fpMathScore表示实型指针变量(fp代表float型的指针)。
这种命名方法是以两条规则为基础的:
(1)标识符的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。
表2-2中列出了常用的数据类型的前缀。
表2-2常用数据类型的前缀
前缀
常用数据类型
c
字符(char)
l
长整型(long)
sz
表示以\0结尾的字符串(string)
f
单精度实型(float)
s
短整数(short)
df
双精度实型(double)
n或i
整型(int)
un
无符号整型(unsigned)
(2)在标识符内,前缀以后就是一个或者多个第一字母大写的单词,这些单词清楚地指出了变量在源程序中的用途。
例如,szStudentName表示学生姓名,数据类型是以\0结尾的字符串。
2.3.2变量的定义与初始化
C是强类型语言。
强类型语言要求程序设计者在使用变量之前必须对变量进行定义(声明变量的数据类型)。
程序设计过程中,绝大部分错误是发生在数据类型的误用上,使用强类型语言编程,编译程序能检查出尽可能多的数据类型方面的错误。
1.变量的定义
可以在一条语句中定义多个同类型的变量,变量定义的一般形式为:
类型标识符变量列表;
表2-3中列出了C语言的基本数据类型标识符。
表2-3C语言的基本数据类型标识符
标识符
基本数据类型
int
基本整型
shortint或short
短整型
longint或long
长整型
unsignedint或unsigned
无符号整型
unsignedshortint或unsignedshort
无符号短整型
unsignedlongint或unsignedlong
无符号长整型
char或signedchar
带符号字符型
unsignedchar
无符号字符型
float
单精度实型(浮点型)
double
双精度实型
longdouble
长双精度实型
void
空类型(或称无类型)
例如:
unsignedunMyAge,unMyWage;
//定义2个unsignedint类型的变量
intiLength,iWidth,iHigh;
//定义3个int类型的变量
floatfArea;
//定义1个float类型的变量
charcSex,cType;
//定义2个char类型的变量
(1)空类型(void类型)仅仅是具有数据类型的形式,不具备其他数据类型的属性,它一般是用来声明函数的类型,表示函数不需要返回值。
(2)字符串只有常量的概念,没有直接的变量概念。
但是,可以通过字符数组和字符指针变量来实现字符串变量的作用(详见第6章和第8章)。
2.变量的初始化
定义一个变量后,系统为所定义的变量按数据类型的要求分配一个一定大小的存储单元,这时该存储单元所存放的值(变量的值)一般是一个不确定的值(随机值)。
此后,可以用赋值运算符“”给变量赋值。
unsignedunMyAge;
//变量的定义
intiLength,iWidth;
unMyAge18;
//变量赋值
iLength12;
iWidth10;
也可以在定义变量的同时给变量赋值,称为变量的初始化。
unsignedunMyAge18;
//变量的定义并初始化
intiLength12,iWidth10;
可见,一条变量初始化语句相当于前面介绍的变量定义、给变量赋值两条语句,它们的效果完全一样。
系统都是先给变量分配一个存放整数的内存单元,然后将一个整数值赋给该变量(存储单元)。
3.变量或类型长度运算符sizeof()
C语言提供的运算符sizeof()是用来求C语言的类型或变量所分配存储单元的长度(字节数)。
例如,sizeof(int)或sizeof(iWidth)的值为2,sizeof(float)或sizeof(fArea)的值为4,说明int型的数据在计算机内存占2个字节,而float型的数据占4个字节。
2.3.3整型变量
基本数据类型的变量包括整型变量、实型变量、字符型变量和枚举类型变量(在第11章中讨论)。
整型变量可分为基本型、短整型、长整型三种,分别是:
(1)基本型,类型标识符为int;
(2)短整型,类型标识符为shortint或short;
(3)长整型,类型标识符为longint或long。
它们又区分为有符号(signed)和无符号(unsigned)两大类。
对于有符号数,存储单元的最高位用来存储符号,0表示,1表示;
对于无符号数,存储单元中全部二进制位(bit)用作存放数本身,而不包括符号。
无符号型变量只能存放不带符号的整数,如23、507等,而不能存放负数,如23、98。
如果整型量在内存中占2个字节(16位),则int型变量存放数的范围为3276832767,而unsignedint型变量存放数的范围为065535。
概括起来,整型变量有:
C标准没有具体规定以上各类数据所占内存字节数,各种机器处理上有所不同,一般以一个机器字(word)存放一个int型数据,而long型数据的字节数应不小于int型,short型不长于int型。
以IBMPC为例,整型数的表示范围如表2-4所示。
用户可根据数的范围来选用。
表2-4整型数据的表示范围
类型标识符
所占位数
数的范围
16
32 76832 767即215(2151)
short[int]
long[int]
32
2 147 483 6482 147 483 647即231(2311)
unsigned[int]
065 535即0(2161)
unsignedshort
unsignedlong
04 294 967 295即0(2321)
inta2;
shortintb32765;
longintc2;
unsignedintd65534;
unsignedshorte32765;
unsignedlongf0xABCDEF;
整型数据初始化后,系统分配给相应变量的存储单元及整型数据的存储结构如图2-2所示。
变量a、b、c的最高位(即最左边一位)为符号位。
2.3.4实型变量
C语言的实型变量分为单精度型(float型)、双精度型(double型)和长双精度型(longdouble型)三类。
对每一个实型变量都应在使用前加以定义。
如:
floatx,y;
//定义x、y为单精度实型变量
doublez;
//定义z为双精度实型变量
实数的有效数字位数和数值的范围随机器系统而异。
在IBMPC中,一个float型数据在内存中占4个字节(32位),一个double型数据占8个字节(64位),一个longdouble型数据占10个字节(80位)。
单精度实数提供67位有效数字,双精度实数提供1516位有效数字,长双精度实数提供1819位有效数字;
单精度实数的数值范围约为3.410383.41038,双精度实数范围约为1.7103081.710308,长双精度实数范围为3.41049321.1。
应当说明,实型常量不分float型和double型。
一个实型常量可以赋给一个float型或double型变量,根据变量的类型截取实型常量中相应的有效位数字。
floata;
a.222;
由于float型变量a只能接收7位有效数字(即a.2),因此最后两位小数不起作用。
如果a改为double型,则能全部接收上述9位数字并存储在变量a中。
2.3.5字符型变量
1.字符型变量
字符型变量(简称为字符变量)可以存放单个字符型数据。
charcl,c2;
表示cl和c2为字符型变量,各可以存放一个字符。
我们可以用下面的语句给它们赋值:
cl=a;
c2=b;
(1)系统分配一个字节大小的单元给字符型变量。
(2)对于字符型变量,存储单元中存放的是字符的ASCII码。
如c1、c2的存储形式如图2-3所示。
(3)由于在内存中,字符型数据是以ASCII码形式存储的,它的存储形式与整数的存储形式相类似,所以C语言的字符型数据和整型数据可以通用。
因此,C语言中的字符数据和整型数据可以相互赋值;
并且字符数据可以以字符形式输出,也可以以整数形式输出。
例2.4字符型数据的整型处理。
charc1,c2,c3;
c1a;
c297;
c3c132;
printf(c,c,c,c1,c2,c3);
printf(d,d,d,c1,c2,c3);
a,a,A
97,97,65
分析:
其中c1、c2、c3被定义为字符型变量,然后给c1、c2分别赋予字符常量a、整数97,而C语言对于a,和97在内存中的存储形式是完全一样的;
c3赋予一个算术表达式c132(其值为65,对应字符为A)。
上述程序中从a到A的变换是c3c132。
C语言对字符数据作这种处理使程序设计增大了自由度,因而对字符作各种转换就比较方便。
提醒读者注意,将一个整数赋给一个字符型变量时,该整数应在0255范围内,否则会产生溢出。
(4)无符号字符型标识符unsignedchar的使用。
在TurboC系统中,将字符型变量所占用的字节的最高位当成符号位,或者说把字符处理成带符号的整数。
字符a:
它的最高位(8位中最左一位)为0,此字符按整数形式输出时就输出一个正整数,它的值就是ASCII码的值97。
字符\376:
它的最高位为1,内存中被视为负数,如按字符形式输出则是系统中相应的图形字符,在IBMPC上为字符■;
如将它按整型输出,输出结果是2,因为2的补码为。
如果字符型变量说明为unsignedchar型数据,即无符号字符型变量,其最高位不作为符号位。
例2.5无符号字符数据。
unsignedcharc\376;
printf(c,d,c,c);
■,254
这是由于的十进制数值为254。
2.字符数据与字符串数据的区别
字符数据与字符串数据不仅仅是书写形式和字符的个数不同,它们在内存中的存储形式也是有较大区别的。
在C语言中,每一个字符串的结尾系统自动加上一个字符串结束标志\0,以便系统据此判断字符串是否结束。
\0是一个ASCII码为0的字符,是“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。
我们可通过比较a、a、HELLO在内存中存储形式的不同(如图2-4所示),了解字符常量与字符串常量的区别。
其中,字符a占1个字节的存储空间,字符串a占2个字节的存储空间,字符串HELLO占6个字节的存储空间。
c2a;
//错误的赋值语句
c3HELLO;
一个字符串不能赋给一个字符型变量。
(1)字符串在输出时并不输出\0。
printf(S,HELLO);
将逐个字符输出HELLO,直到遇到最后的结束符\0,就知道字符串结束,停止输出。
(2)在写字符串时不必加\0。
讲到这里,有人要问,C语言中如何定义字符串变量呢?
在C语言中,并没有直接的字符串变量的概念,但是可以通过字符数组和字符指针变量来实现字符串变量的作用(详见第6章和第8章)。
2.3.6限定词const
如果想让变量的内容自初始化后一直保持不变,则可以使用变量的限定词const。
floatx345.67;
constfloatpi3.;
虽然系统给变量x、pi都分配了4个字节,但是变量x的值是可以变化的(通过重新赋值),而变量pi受到const的限定,这意味着不能重新给pi赋值,它相当于一个float型的常量3.1415,即变量pi的作用实际上相当于常量。
x890.12;
//ok
pi3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 数据类型
![提示](https://static.bdocx.com/images/bang_tan.gif)