版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.1整型数据2.2字符型数据2.3浮点型数据2.4格式化的输入与输出2.1整型数据2.1.1整型数据的进制整型数据,顾名思义,即是没有小数点部分的整数数据。整型数据以二进制补码的形式在内存中存储。整型常量即整型常数,可正可负。在C语言中,整型常量有三种形式,即八进制整数、十进制整数和十六进制整数。十进制的计数规则为逢10进1,基本数字为0、1、2、3、4、5、6、7、8、9。十进制数的每一位都是10的指数幂。八进制的计数规则为逢8进1,基本数字为0、1、2、3、4、5、6、7。在C语言中,八进制整数的表示以0开头,如0367表示八进制数367。八进制数的每一位都是8的指数幂,因此可以转化为十进制数。同理,十进制数也可以转换为八进制数,其规则为该十进制数除以8,求得商和余数,并继续用商除以8,直到商比8小为止。如十进制数247除以8等于30余7,30大于8,所以继续;30除以8等于3余6,3比8小,因此将所剩的余数按自下而上的顺序排列即得八进制数367。该计算过程用图2-2方法表示则更清晰。十六进制的计数规则为逢16进1,基本数字包括0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。在C语言中,十六进制的整数以0x或者0X开头,如0x367,0X1AF2。十六进制整数与十进制整数之间也可以相互转换,其方法与八进制整数和十进制整数之间的转换一样。而将十进制整数871转换为十六进制,参考图2-2可得图2-3,即得到十六进制数0x367。十六进制整数与八进制整数之间也可以相互转换,可以通过十进制作为中间转换数制,即将十六进制数先转换为十进制数,再将十进制数转换为八进制数。二进制是计算技术中广泛采用的一种数制。二进制使用0和1两个数码来表示数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,是由18世纪德国数理哲学大师莱布尼兹(Leibniz)发明的。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以二进制补码的形式存储。设计补码的目的是简化运算规则。所谓补码的概念,主要是针对负数而言的。对于一个正数来说,原码、反码及补码是一样的。而对于负数来说,其补码等于其绝对值按位取反再加1。二进制数向八进制数或十六进制数的转换十分方便。由二进制数到八进制数,只需从右向左,取三位合一位,不够三位的前面补0,如图2-4所示。同理由二进制数转换到十六进制数,只需从右向左,取四位合一位,不够四位的前面补0。而八进制数、十六进制数向二进制数的转换,仅需对应地将每一位用三位或四位二进制数表示即可。2.1.2整型变量整型变量的基本类型符为int(英文integer的缩写),在整型的表示符号int之前,分别加上不同的修饰符,便可以扩展整型的类型为基本整型:int。短整型:shortint,可简写为short。长整型:longint,可简写为long。双长整型:longlongint,可简写为longlong。在数学上,整数可以是正数或负数。整型数据的正、负之分,在C语言中是用有符号数与无符号数的概念来定义的。如果预先知道某变量要处理的数据不会有负数存在,这时候就可以使用无符号类型。无符号和有符号类型的区分是由类型符int前的修饰符所定义的,通过有符号(signed)和无符号(unsigned)两个修饰符来表示。如果没有加修饰符,则默认为有符号(signed)。由于数据在内存中的存储占用一定的空间(字节数),因此数据就有相应的取值范围。C语言本身并没有明确规定各类型数据占多少字节,仅保证了short类型不比int长,而long类型不会比int短。早期C语言这种规定的目的是适应不同的机器。在计算机中,数据使用二进制表示,即0或1,每一位(bit)就代表了一个0或者1。每8个位组成一个字节(byte),字节是数据存储的单位。例如,在C语言的数据类型中,通常把short定义为2个字节,即16位。虽然C语言本身没有规定各种数据类型所占字节数,但是C语言标准中提出了将相关的数值取值范围的限制定义在头文件limits.h、float.h、stdint.h中。因此如果我们要确定某一数据类型所占字节数,可以通过查阅这几个文件或者通过sizeof( )函数来确定数据类型的字节数。各种数据类型所占字节数和取值范围与编译器如何实现C语言标准有很大关系,本书列出Dev-C++ 中的整型数据的取值范围,如表2-1所示。在确定了编译系统的各数据类型的取值范围之后,就可以根据程序对相应数据的需求,来设计变量的类型。比如人的年龄,就可以使用unsignedchar类型。由于表2-1的取值范围的存在,在计算过程中,会出现例2.1中超出某数据类型取值范围的状况存在。2.1.3整型常量上一节中提到了整型常量即是整型常数,包括十进制数、八进制数和十六进制数。我们在例2.1中使用到的整数,都可以作为整型常量来使用。整型变量根据所表示数字的范围不同以及正负数的不同,可以有多种扩展类型。由此可知,整型常量也不局限于int类型。C语言标准(C11)中,对于扩展整型常量的表示法,通过添加后缀来实现,如表2-2所示。以一个十进制整数为例,由表2-2可知,如果该整数没有加后缀,则根据其数值所在的范围来确定它的类型。2.1.4整数的存储当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以二进制补码的形式存储的。下面以短整型数据的存储为例来介绍计算机内部整型数据的表示。如果有一个短整型变量a:首先我们将其转换为二进制数,有十进制数 123二进制数 1111011二进制补码 1111011那么根据表2-1,短整型shortint的数据位数为16位,因此在内存中,该数字存储为整型数据分为有符号数和无符号数。对于无符号数,根据表2-1,unsignedshort的数据位数为16位,其取值范围为0~65 535,在内存中的表示如下:0:65 535:对于有符号数,其最左边的一位(称作最高位)表示符号位,如果该位的数字为1,则表示负数;如果为0,则表示非负数(0或正数)。有符号的shortint数据同样占据16位的存储空间,其中第一位为符号位,因此数字0只能用15位表示,则有0:最大的正数为32 767。如果正数32767 + 1,则有符号位是1,所以该数字为负数(-32 768)。根据前面讲到的负数在计算机中存放的补码是该数的绝对值的原码取反再加1,我们对负数 -32 768取绝对值,得到32 768。其二进制为对其取反,得再加1,则有所以,根据上述推导过程,我们可以得出当有符号位时,32 767 + 1在计算机中表示为 -32 768。那么 -32 767为以此类推,最大的负数为-12.2字符型数据2.2.1字符型变量字符型变量用来存放程序中使用的字符型数据。字符型变量通过关键字char来定义。字符型变量属于整型数据类型的范畴,可以参与运算,也可以使用signed(有符号)和unsigned(无符号)两个修饰符来修饰。其中,signed可省略,即在没有使用修饰符来定义字符型变量时,则认为是signedchar。使用signed或者unsigned定义字符型变量时,二者的取值范围不同。signedchar型变量的最高位为符号位,因此仅能存放7位二进制数,取值范围为 -128~127;使用码值0~127表示标准ASCII字符,使用码值 -1~-128表示扩展的ASCII字符。unsignedchar型变量的最高位不是符号位,因此可以存放8位二进制数,取值范围为0~255;使用码值0~127表示标准ASCII字符,使用码值128~255表示扩展的ASCII字符。字符型变量的存储单元长度和取值范围如表2-3所示。2.2.2字符型常量正如整型数据一样,字符型数据既可以是变量,也可以是常量。字符型常量是单引号括起来的字符,如 'a' 。注意,这里讲的字符是指ASCII和EASCII字符集中的单字节字符。双字节字符(如中文字符),不能定义为字符型常量。C语言中还有一类字符称作转义字符(escapesequence),这类字符是以反斜杠“\”开头的字符序列,它包含了如表2-4所示的转义字符。2.3浮 点 型 数 据C语言的基本数据类型之一的浮点型数据,用来表示实数。浮点型数据有三种类型,即单精度(float)、双精度(double)和长双精度(longdouble)。浮点型数据在内存中的存储方式与整数不同,它由三部分构成:由此,导致浮点型数据的精度是不确定的,即浮点数只能近似地表示某个实数,而不是精确地等于某个实数。具体来说,这个实数是由一个整数乘以某个基数(常用2)的整数次幂得到的。在计算机中,数值都是用二进制数字表示的,对于4个字节的单精度浮点数(float)而言,总共有32位,其中符号位占1位,尾数部分占23位,指数部分占8位。从这里也可以看出,尾数部分占的位数越多,表示的浮点数有效数字越多,精度越高;指数部分占的位数越多,则能表示的数值范围越大。因此,我们可以得到单精度浮点数的十进制表示的有效数字个数为10n-1≥223-1即n≥log10223
这里n的最小值为7,当浮点数的绝对值大于等于1时,小数点后有效位数为6位。对于双精度浮点数(double)而言,占8个字节共64位,其中指数部分为11位,符号部分占1位,尾数部分为52位,因此它的有效数字为15~16位。同理可得到长双精度浮点数(longdouble)的有效数字为18~19位。由于浮点数的近似表示特点,导致了浮点数参与计算时容易产生误差,特别是当参与运算的两个数值相差很大时。浮点型常量的表示法可以通过在浮点数后加后缀来实现,后缀可以是f或F(表示float类型)、l或L(表示longdouble类型);如果没有后缀,则认为是double类型。也可以通过科学计数法表示浮点型常量,通过使用指数符号e(或E)来表达,其格式为2.4格式化的输入与输出2.4.1printf函数函数printf的作用是向系统默认的输出设备(一般是显示器)按照指定格式输出信息。虽然C语言要求变量与函数在使用前一定要声明或定义,但作为一个特例,在使用printf的时候可以不包含stdio.h(在这种情况下,编译器一般会警告启用了内置不兼容的隐式声明的printf)。printf函数的一般格式为作为函数而言,printf函数有返回值,其返回值的类型是整型。当成功执行该函数后,返回输出的字符的个数;如果有错误发生,则输出负值。printf函数包含了两个参数,即格式控制字符串和输出列表。输出列表是需要输出的数据,可以是变量,也可以是表达式。不同的输出变量与表达式之间需要使用逗号分隔开。格式控制字符串规定了输出列表中的数据输出的方式,因此输出列表中所要输出的数据的个数应与格式控制字符串中指定的数据格式的个数一一对应。如果格式控制字符串中指定格式的数据个数多于输出列表个数,则会输出错误数据;如果输出列表中的数据个数多于格式控制字符串中指定格式的数据个数,则多出的输出列表中的数据不被输出。printf函数的两个参数中,输出列表可以省略。当没有输出列表时,printf函数可以输出格式控制字符串中的信息。格式控制字符串,顾名思义,是一个字符串,它的一般格式为printf函数中的每一个指定格式的说明总是从符号“%”开始,然后才是格式控制符,它的作用是将输出数据转换为指定的格式,在符号“%”与格式控制符之间,可以加入不同的格式控制选项。1.格式控制符printf函数中可使用的格式控制符如表2-5所示。2.[标识]格式控制字符串中的标识可以根据需要设置:(1)如果标识没有指定,则表示输出为右对齐,左边填充0或者空格。(2)如果标识是“ - ”,则表示输出为左对齐,右边根据需要填充0或者空格。(3)如果标识是“+”,则表示输出结果为有符号数,根据数据转换结果添加正号( + )或者负号( - )。(4)如果标识是空格,若输出结果为正数,则显示空格;若输出结果为负数,则显示负号。(5)如果标识是“#”,则当格式控制符为c、d、i、s、u中任意一种时,不起作用,而①当格式控制符为“o”时,输出时加前缀0;②当格式控制符为“x”或“X”时,输出时分别加前缀0x或0X;③当格式控制符为“g”或“G”时,总是显示小数点及无意义的0;④当格式控制符为“e”或“E”或“f”时,总是显示小数点。3.[宽度][精度]对于整型数据,[精度]选项不起作用,只有[宽度]选项起作用。当指定宽度为m时,如果输出的整型数据的位数小于m,则左端补空格;若大于m,则以整型数据的实际长度输出。对于浮点型数据,[宽度]和[精度]两个选项均起到控制作用。当宽度为m、精度为n时,如果输出的浮点型数据的位数小于m,则左端补空格;若大于m,则以浮点型数据的实际长度输出。如果浮点型数的小数点后位数小于n,则右端补0,凑够n位小数;如果浮点型数据的小数点后位数大于n,则第n+1位四舍五入后输出n位小数。对于字符串,[宽度]和[精度]两个选项均起到控制作用。当宽度为m、精度为n时,其作用是输出m列n个字符。如果字符串的实际长度大于m,则按字符串实际长度输出;若小于m,则左补空格;如果n小于m,则输出m列,不足部分补空格;若n大于m,则保证n个字符的正常输出。4.printf函数输出详解(1) %c:作用:以单个字符形式输出。说明:格式符c前可加入[标识]及[宽度]控制。(2) %d(或者%i):作用:整数以有符号的十进制整数输出,正整数的符号忽略。说明:格式控制符 %i与 %d的使用一致,格式符d(i)前可加入[标识]、[宽度]控制,前还可加字符l或L输出长整型。(3) %e(或者%E):作用:以指数形式输出浮点数。说明:可有效控制浮点型数据的输出格式,格式符e(E)前可加入[标识]、[宽度]、[精度]控制。(4) %f:作用:以小数形式输出浮点数,小数点后保留6位数字。说明:可有效控制浮点型数据的输出格式,格式符f前可加入[标识]、[宽度]、[精度]控制。(5) %g(或%G):作用:系统自动选取控制符“%f”或“%e”格式中输出宽度较短的格式输出浮点数,并且不输出无意义的0。说明:可有效控制浮点型数据的输出格式,格式符g(G)前可加入[标识]、[宽度]、[精度] 控制。使用“%G”时,若输出指数形式,则指数部分使用大写的E。(6) %s:作用:输出字符串。说明:只能用于字符串的输出,格式符前可加入[标识]、[宽度]、[精度]控制。“%s”输出字符串,是通过指向字符串第一个字符位置的指针来实现的,通过该指针将字符串中的字符依序读出,直到遇到空字符 '\0' 才停止。可以使用[标识]来控制字符串的对齐位置,也可以规定输出字符串的[宽度]及[精度](字符个数)。若指定精度n,则输出字符串中的前n个字符。如果精度n小于宽度m,则补充空格。如果精度n大于宽度m,则忽略宽度m,输出n个字符。(7) %o、%u、%x(或%X):作用:无符号整数分别以无符号八进制、无符号十进制、无符号十六进制输出。说明:用于整型数据的输出格式控制,格式符前可加入[标识]、[宽度]控制。2.4.2scanf函数scanf函数的作用是从系统默认的输入设备(例如,键盘)按照指定的格式读入信息。虽然C语言要求变量与函数在使用前一定要声明或定义,但作为一个特例,在使用scanf函数的时候也可以不包含stdio.h。scanf函数的一般格式为scanf函数按照格式控制字符串中的内容扫描从标准输入设备输入的数据,并将结果存储在地址列表中各内存地址所对应的变量或字符串中。作为函数,scanf有返回值,其返回值的类型是整型;如果scanf函数成功执行,则返回地址列表中成功赋值的参数个数。scanf函数有两个参数,分别是格式控制字符串和地址列表。地址列表中包含的是不同变量的地址,而不是变量名。所谓地址,即该变量在内存中的存储位置,通过取地址运算符“&”,可以得到变量的地址。地址列表中包含的多个地址,需使用逗号间隔开来,地址列表中所包含的地址的个数,需要与格式控制字符串中的控制符的个数相对应。scanf函数的格式控制字符串的一般格式为与printf函数不同的是,scanf函数没有[标识]和[精度]控制项。但其使用的格式控制符与printf函数所使用的基本一致。1.格式控制符scanf函数中可使用的格式控制符如表2-8所示。2.scanf函数输入详解scanf函数从标准输入设备读入数据,其方式是按照格式控制字符串中的内容,依次读取,遇到格式控制符,则将输入数据按照该格式存入对应的地址。当输入的字符与格式控制符数目不匹配时,该输入字符及其后的输入字符将不能被scanf函数读取,而继续保留在内存中。1)输入数据的读取scanf函数从标准输入设备读入数据是按照格式控制字符串中的内容依次读取的。2)输入数据的间隔因为scanf函数读入数据的方式是按照格式控制字符串中的内容依次读取的,因此,输入的数据,尤其是对同种类型的输入数据,如果使用间隔符号,比如空格或者逗号等区隔开来,则会使输入数据与地址列表中变量的对应关系更加清晰。scanf函数的格式控制符为同一类型且没有使用任何间隔符号进行区别,那么系统会将所有连续的输入都认为是第一个控制符的输入内容,直到发生下列情况:(1)遇到空格,scanf函数会将空格符后的内容认为是下一个输入数据。(2)遇到回车换行,scanf函数会将回车换行后的内容认为是下一个输入数据。(3)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加工课课件教学课件
- 幼师课件用电教学课件
- 2024年国际旅游开发与合作合同
- 2024年广州市二手房交易合同(标准版)
- 2024年度智能制造设备采购合同
- 2024年度物业公司居民关系协调服务合同
- 2024年大数据中心合作运营合同
- 2024年工程质量检验与确认合同
- 鱼罐头课件教学课件
- 2024年库房租赁与健身器材存放合同
- 香菇种植示范基地项目可行性策划实施方案
- 混凝土硫酸盐侵蚀基本机理研究
- 《机械设计基础A》机械电子 教学大纲
- 水工岩石分级及围岩分类
- 基因扩增实验室常用仪器使用课件
- 斜井敷设电缆措施
- 施工机械设备租赁实施方案
- 牙膏产品知识课件
- 液化气站人员劳动合同范本
- 第一章 教育政策学概述
- 常见土源性寄生虫演示文稿
评论
0/150
提交评论