您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C语言(谭浩强)第2章数据描述
第2章基本数据类型●基本数据类型的特征●数据常量●数据类型转换●数据的控制台输入与输出C语言数据类型基本数据类型导出数据类型double(双精度浮点型)long(长整型)char(字符类型)整型short(短整型)int(整型)浮点型float(单精度浮点型)longdouble(长双精度浮点型)void类型用户定制类型T*(指针类型)struct{…}(结构体类型)union{…}(共用体类型)文件类型enum(枚举)函数类型构造类型T[…](数组类型)C语言提供有丰富的数据类型:2.1基本数据类型的特征C语言提供的基本数据类型包括char(字符)型、int(整)型、float(单精度实)型、double(双精度实)型。并且还可以通过使用short、long、signed和unsigned修饰char和int,用long修饰double,形成更多的类型。2.1.1数值的定点表示与浮点表示定点表示和浮点表示,是C语言基本数据类型的重要特征。为了说明什么是“定点”,什么是“浮点”,先看π值的几种表示形式:日常的表示法C语言中的表示形式3.14159×1003.14159e00.314159×1010.314159e+10.0314159×1020.0314159e+231.4159×10-131.4159e-13141.59×10-33141.59e-3浮点形式存储3.14159+1数值部分(尾数)指数(阶码)2.1.2整数的有符号类型与无符号类型内存中的数值是以补码形式存放的,一个正数的补码就是该数的二进制数(如10的补码为0000000000001010)。求一个负数的补码的方法如下:如-10的补码可以这样求:①先取该数的绝对值;先取10②然后以二进制形式表示;10的二进制码为0000000000001010③再对其取反;取反得1111111111110101④然后加1;加1,得1111111111110110,即-10的16位存储形式为:1111111111110110。2.1.3类型宽度与取值范围C语言对不同类型的数据分配不同宽度的存储空间,典型的存储空间宽度有:1个字节(8位)、2个字节(16位)、4个字节(32位)、8个字节(64位)和10个字节(80位)几种。显然,不同的长度,对应的数据的取值范围是不同的。当然,同样长度的取值范围还与有无符号、是定点表示(整型)还是浮点表示(实型)有关。另外还取决于所用的编译系统。大多数编译系统对一个带符号整数的数值范围处理为:-2n-1~2n-1-1。其中n为该整数所占的比特数。如果一个整数所占的比特数为16,则该想整数的苑围为-32767~32767。也有一些编译系统对一个带符号整数的数值范围处理为:-(2n-1–1)~2n-1-1。如果一个整数所占的比特数为16,则该想整数的苑围为-32768~32768。不同长度整型数据的取值范围数据长度(比特)取值范围Signed(有符号)Unsigned(无符号)8-127~1270~25516-32767~327670~6553532-2147483647~21474836470~429496729564-(263-1)~263-10~264-1(18446744073709551615)C语言中不同长度实型数据的取值范围和表数精度宽度(比特)数据类型机内表示(位数)取值范围有效数字和精度阶码尾数符号32float8231|3.4e-38|~|3.4e+38|大约7位十进制有效数字,7位精度64double11521|1.7e-308|~|1.7e+308|16或17位十进制有效数字,7位精度80longdouble由具体实现确定|1.2e-4932|~|1.2e+4932|18位十进制有效数字,7位精度C语言提供了一个测定某一种类型数据所占存储空间长度的运算符“sizeof”它的格式为:sizeof(类型标识符或数据)当不了解所使用的编译器中的某数据类型的宽度时,可以使用这个运算符计算之。例2.1用sizeof运算符测定所用的C系统中各种类型数据的长度。/******文件名:ex020101.c******//******测定数据类型长度******/#includestdio.hintmain(void){inti=0;printf(char:%dbytes.\n,sizeof(char));printf(short:%dbytes.\n,sizeof(short));printf(i:%dbytes\n,sizeof(i));/*计算变量i的字节数*/printf(long:%dbytes\n,sizeof(long));printf(float:%dbytes\n,sizeof(float));printf(double:%dbytes\n,sizeof(double));printf(1.23456:%dbytes\n,sizeof(1.23456));/*计算常量的字节数*/printf(double:%dbytes\n,sizeof(double));return0;}用VC++6.0编译并运行,得到以下结果:char:1bytesshort:2bytesi:4byteslong:4bytesfloat:4bytesdouble:8bytes1.23456:8bytes个样2.2数据常量2.2.1整型常量1.整数常量的三种进制在C语言中,整型常量可以使用十进制数、八进制数、十六进制数等几种形式书写。C语言规定,程序中凡出现以数字0开头的数字序列,一律作为八进制数处理;凡出现以0x开头,后面跟若干位数字的,一律作为十六进制数处理;其它数字作为十进制数处理。下面是合法的整型常量:5121——(十进制正整数)0111——(八进制正整数,等于十进制数73)010007——(八进制正整数,等于十进制数4103)0177777——(八进制正整数,等于十进制65537)0XFFFF——(十六进制正整数,等于十进制数65537)0xA3——(十六进制正整数,等于十进制数163)-32768——(十进制负整数)下面不是合法的整型常量:09876——(非十进制数,又非八进制数,因为有数字8和9)20fa——(非十进制数,又非十六进制数,因为不是以0x开头)0x10fg——(出现了非法字符)2.整数常量类型的确定在C语言中整数可以进一步分为short、int、long和longlogn等类型。那么,对于一个常数如何分辨其类型呢?一般说来,有以下原则:1)默认原则:在没有任何特别标志的情况下,可以按照常数所在的范围,决定其类型。例如,在16位的机器中,当一个常整数的值在十进制-32768~32767(八进制数0~0177777、十六制数0x0~0xFFFF),则被看作一个shortint或int型整数。超出上述范围的整常数,则被看作长整数(32位)表示。例如,234、32766、0177776、0xFFFE等被看作是int型,而-32769、32768、0200000、0x10000等被看作是long型。2)后缀字母标识法:用L或l表示long类型整数。用LL或ll表示longlong类型整数。用U或u表示unsigned类型。例如:-12L——(十进制long整数)-12LL——(十进制longlong整数)774545L——(十进制long整数)076L——(八进制long整数,等于十进制数32768)0100000L——(八进制long整数,等于十进制62)0x12l——(十六进制long整数,等于十进制数18)0X8000l——(十六进制long整数,等于十进制数32768)12345u——(十进制unsignedint类型)12345UL——(十进制unsignedlong类型)在16位字长的机器中,一旦把一个常数表示成long整数,系统便将其存储空间扩充为4个字节。从值的大小上看,12L与12没有区别,但它们占用的存储空间不相同2.2.2字符类型及其常量1.可打印字符字符类型的数据在内存中以相应的ASCII代码存放。例如,′a′的ASCII码为97,则在内存中的二进制存储形式为:01100001。例2.2/*文件名:ex020201.c*/#includestdio.hintmain(void){charch;/*定义了一个字符类型的变量ch*/ch=′a′;printf(″%d″,ch);/*使用整型格式码*/return0;}运行结果为:97例2.3/*文件名:ex020301.c*/#includestdio.hintmain(void){charch;inti;ch=′A′;ch=ch+32;i=ch;printf(″%dis%c\n″,i,ch);/*注意格式码*/printf(″%cis%d\n″,ch,ch);/*注意格式码*/return0;}运行结果如下:97isaais97例2.4/*文件名:ex020401.c*/#includestdio.hintmain(void){charc;c=0362;printf(″%d\n″,c);return0;}运行结果:-142.字符常量ASCII字符分为可打印字符和不可打印字符两种。在C语言程序中,可打印字符常量是用一对单撇号括起来的一个字符,如′a′,′A′,′?′,′#′。需要注意如下几点:•单撇号只是字符与其它部分的分隔符,或者说是字符常量的定界符,不是字符常量的一部分,当输出一个字符常量时不输出此撇号。•不能用双引号代替撇号,如″a″不是字符常量。•撇号中的字符不能是单撇号或反斜杠,如′′′或′\′不是合法的字符常量。3.转义字符转义字符(反斜杠码)是C语言提供的处理一些特殊字符(包括一些不可打印字符)方法。重要有如下一些:•用反斜杠开头后面跟一个字母代表一个控制字符(不可打印字符);•用\\代表字符“\”,用\′代表撇号字符;•用\后跟1到3个八进制数代表ASCII码为该八进制数的字符;•用\x后跟1到2个十六进制数代表ASCII码为该十六进制数的字符。转义字符表转义字符形式意义\n换行\t水平制表\v垂直制表\b退格\r回车\f走纸换页\a报警(如铃声)\\反斜杠\?问号\“双撇号\’单撇号\ddd1~3位八进制常数xhh1~2位十六进制常数例2.5/*文件名:ex020501.c*//*打印人民币符号″¥″*/#includestdio.hintmain(void){printf(″Y\b=\n″);return0;}该程序运行时先打印一个字符“Y”。这时打印头已走到下一个位置,用控制代码\b使打印头回退一格,即回到原先已打印好的Y位置再打印字符“=”,两字符重迭形成人民币符号“¥”。当然,这一输出只能在打印机上实现,而不能在显示器上实现。因为显示器无此重迭显示功能(在显示后一字符时原在该位置上的字符消失)。转义字符除用来形成一个外设控制命令外,还用来输出不能直接从键盘上输入或不能用字符常量书写出的ASCII字符。这时要在反斜杠\后跟一个代码值,这个代码值最多用三位八进制码数(不加前缀)或两位十六进制数(以x作前缀)表示。例2.6/*文件名:ex020601.c*/#includestdio.hintmain(void){charch;ch=′\362′;/*将八进制数362的ASCII字符赋给ch*/printf(″%c″,ch);return0;}上运行可在显示屏上输出:≥4.字符串常数在C语言中,把用一对双撇号括起来的零个或多个字符序列称为字符串常数。如:″hello″,″ProgramminginC″,″A″,″a″,″″等。字符串以双撇号为定界符,但双撇号并不属于字符串。要在字符串中插入撇号,应借助转义字符。例如要处理字符串″Isay:′Goodby!′″时,可以把它写为″Isay:\′Goodby!\′″字符串中的字符数称为该字符串的长度。字符串常数在机器内存储时,系统自动在字符串的末尾加一个“字符串结束
本文标题:C语言(谭浩强)第2章数据描述
链接地址:https://www.777doc.com/doc-3369218 .html