当前位置:首页 > 经典书库 > 工程师手册

数值类型

书籍:工程师手册

出处:按学科分类—工业技术 企业管理出版社《工程师手册》第847页(3976字)

1.变量

C程序在使用变量之前,必须对变量进行声明,根据数值的存贮格式(浮点格式或整数可靠式)和精度(如单精度浮点,双精度浮点),可以有若干种数值类型。下面的程序例子说明了五种不同数值类型的使用:

main()

int i; /*size dependent on implementation*/

short j; /*16 bit integer*/

long k; /*32 bit integet*/

float a: /*single precision floating point*/

double b; /*double precision floating point*/

k=72000;

j=k;

i=k;

b=0.1

a=bprintf(“\n%ld %d %d\n%20.15f”,k,j,i,b,a);

本例说明了三种整数类型(int,short int和long int)和两种浮点类型(float和double)。这五种类型的实际的大小(以存贮相应变量占用的字节数计)与语言的具体实现有关,但必须保证短整数的长不超过长整数,双精度浮点数的大小是单精度浮点数的两倍。声明为int的整数变量,其大小依赖于编译器的实现,一般为目标机器最便于处理的大小,以使程序对整数的使用最为有效。但是,如果整数表示的大小在一个程序中很重要(通常都是如此),那么变量声明为int可能使同一程序在不同机器上具有不同的表现。例如,在16位机上,前述程序的运行结果为:

72000 6464 6464

0·100000000000000

0.10000001490116

但在32位机上(整数int为32位),其输出结果为:

72000 6464 72000

0.100000000000000

0.10000000149011

注意在以上两种情况下,short变量k和long变量j(显示结果的前两个数)的值不变,而第三个数,即int变量i的值却不相同。在两次运行中,j的值6464都是通屏蔽32位变量r的高16位得到的。0.1的32位浮点表示,其精度为8位十进制数。

因此,要使程序真正可移植,程序中就只能包括short int和long int变量。除了上述五种类型之外,三种整数前加上unsigned可以声明为无符予数。而且,通过将一个变量声明为char(signed或unsigned),可使该变量只有一个字节长,这将在下一节关于文本数据的内容中详细讨论。表3·3·1-1给出了不同变量类型有32位机(如VAX机)和16位机(如IBM PC)上的典型大小和表示范围。

3.3.1-1 C在两种机器上的变量表示范围

2.数组

几乎所有高级语言允许定义给定数据类型的索引表。通常称为数组。在C语言中,通过将数组的元素个数放在数组名后的括号中,所有数据类型都可以声明相应的数组。在数组名后增加多个括号,每个括号中写明相应维数,就能定义多维数组。一个N维数组可定义如下:

type name[size1][size2]…[sizeN];

例如,下述语句都是合法的数组定义;

unsigned int list[10];

double input[5];

short int x[2000];

char inpng-buffer [20];

unsigned char image[256][256]

int magrix[4][3][2];

注意图像的数组定(unsigned char image[256])。[256]说明了一直8位的256×256图像平面,图像的灰度级表示为0到255。类似地最后一个定义声明了一个三维矩阵。C与它语言的区别之一是,C通过方括号中的下标引用数组元素。因此,前面定义的图像数组,其元素将以image[i][j]的形式引用,其中i和j直表示行下标和列下标。注意在C语言中,数组第一个元素的下标为0,最后一个元素的下标为N-1,N是数组在相应维上的大小,因此,对于上面定义的大小为5的一维数组input[0]=1.3;第五个元素的赋值形式为input[4]=1.3,而input[5]=1.3是错误的。

在声明数组时,可以对数组进行初始化。初始值放在一个或多个大括号内,值与值之间用逗号隔开。例如,一个名为vector的一维数组可声明并初始化如下:

int vector[]={1,2,3,5,8,13}

一个包含六个双精度浮点数的二维数组可用下述句声明并初始化:

doublea[3][2]={

{1.5,2.5},

{1.1e-5,1.7es},

{1.765,12.678},};

注意用逗号分开的三对内部大括号分别表示矩阵a的三行,而整个矩阵初始化语句必须以分号结束。

3.文本数据类型:字符的字符串

C语言中的文本(text)通过声明为char的字符的数组进行处理。char变量既可存贮数值(声明为unsigned char的变量可存贮。到255间的数值,也可以存贮字符,单个字符以字母外加单引号表示(如‘Z’表示Z的8位常量)。

字符的串通过外加双引号表示,如“This is a string”。当编译器遇到包含该字符串的语句时,它将“This is a string”赋给一个长度为17字节的存贮区域,每个字节依次初始化为串中相应的一个字符,第17个字节为字符rull(其ACⅡ码为0),然后编译器利用字符串的起始地址。例如,语句printf(“This is a string”)分配17个字节并将字符串的起始地址(即字符T的地址)传送显示设备,直到遇到字符串尾的null字符。所以C语言中的串是以null结束的。

字符串中不能含有非打印字符,如回车,换行,tab以及响铃符等。为了在串的存贮区域中存入这些特殊字符。它们在C语言中的表示如下(均以反线找打头):

\\ 表示反射线(\)

\′ 表示撇号

\″ 表示引号

\n 表示回车加换行(newline)

\ 表示水平制表符

\b 表示退符

\r 表示回车符

\f 表示清屏符

\xxx 表示ASCII码为xxx的字符,其中xxx是1到3位八进制数字(0-7)

\xHHH 表示ASCⅡ码为HHH的字符,其中HHH是1到3位七六进制数字(0-9,A-F)

上一篇:子程序 下一篇:工程师手册目录
分享到: