第2 章 数据与操作

举报
资源描述
第2章 数据与操作在任何程序中,数据和对数据的操作都是最为基本的内容。即是说围绕着存放在哪里的数据将进行怎样的操作。数据及其相互关系构成了数据结构。对某种数据的描述及数据存取的使用规则正确与否将直接影响解决问题的算法效率和复杂程度;对数据的操作方法则体现了解决此问题的算法,这是组成程序的两个基本要素。在计算机语言中,数据结构要以数据类型和存贮属性为基础,而算法的具体实现则依赖语言中所形成的各种运算。本章将围绕这两部分基本内容展开讨论,介 绍C语言最基本的数据类型,常见运算及其构成的表达式以及基本的输入输出操作。0 2.1数据类型通过第一 章 图L 3 T算法动作分解图的介绍,我们已经基本了解了计算机执行程序算法的基本原理。但是,举例中存放在存贮单元的数据都是假设为整数,而且是0和正整数。但是,实际问题的需要并非如此。如果要求的数是负整数或正负小数怎么办?如果存放的数据是英文字符或汉字又该怎么办?另外受数据值的表示范围和小数点精度的影响,到底应该使用多大的空间(多少存储单元)来盛装它?面对其它的复杂操作,数据又要以什么样的结构来组织存贮?这些问题都要在数据类型中解决。换句话说,程序设计者即要知道他使用的数据是以什么样数据类型存放,又要知道这种类型的数据应该怎样操作。从现在开始,就要清楚地认识到:通过学习C/C+语言的语法规则,使用C/C+编译器能够识别的符号及表示方法,将要解决的问题的算法书写成程序,在 C/C+的源文件中,这些程序就是告诉C/C+的编译器即计算机你所要表达的计算信息。C 语言中数据类型十分丰富。本节介绍基本类型,其他类型在后续章节中介绍。C 语言中的数据类型包括以下几种:整型(int)/典 本 类 开H 4+上 实型C字点型)单精度 数组类型(口)构 造 结构体类型(struct)数据类型】-1_*_1 F ile s3)exanple1_ii_1.c*exanple1_M_1_1.c2JAddress:|0 x0012tf74include include void nain()IkUin t t o t a l,;total-100;p&total;print F(,td v%xu.to ta lvp);变量total的值是100存储在12fF7c单元中0012FF59CC CC CC CC CC CC CC CC J t C CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CCB012FF7H CC CC CC CC 7C FF 12 00 应 小 E C8 FF 12 00 79 12 Q6 01 00 00 00 86 0E&38S12FF8F 00 CO O D M3 00 00 00 00 00 OU 00 00 00 00 FO Ff)7F RR no an nA nn an n an FF0012FFAA 12 00 00 00 07 00 EO FF 12 00 9H 3E“0 00 300012FFC5 1A E7 77 00 00 06 00 00 00 00 00 00 F0 FD 7FO012FFES FF FF FF FF 97 E5 E6 77 00 1B E7 77 00 00 000012FFFB OS 00 00 80 00 C8 00 UO 00 00 81 00 00 FF EE线裂煲烫烫煲烫烫烫烫烫烫煲.3.ii.y.a a.c 1习 Context:jmainQNamenx0012Ff7ctotal86amestel_S Woos.|_sl第2量Cifi百Ready 开 闻l|与 1 2Citt-Mcrostf”.|g c:MyDoajwe6trtexai j R(B 4k.16:33XJr三1、多 他,“余每个变量使用前必须进行定义。在 C 语言中,要求对所有用到的变量必须定义其名字和类型,也就是“先定义,再使用。如 int x;x=10;或同时:int x=10;o 若 student=30;未定义直接赋值将出现“c2065:studentundeclared identifier”的错误信息。委变量名的取名规则。使用有效字符序列来标识变量名,符号常量名,函数名,数组名,类型名,文件名(标识符identifier参 见 2.1.4小节)等。规则为:只能用英文字母、数字和下划线组成,第一个字母必须是字母或下划线。大小写敏感。如Sum和 sum是不同的两个变量。一般变量名用小写。合 法 变 量 名 举 例:sum,average,total,Class,Student name,lotus 1 2 3,BASIC 等。不合法变量名举例:M.D.John,123,#33,3D64。泰变量名的意义与长度。取变量名时,尽量取与其意义相关的英文词或缩写组合,但不能与系统保留的关键字相同(关键字参见2.1.4小节)。为方便起见,在本书中所定义的变量 多 为 a,b,c,x,y,z,但是为了增加程序的可读性,建议读者不要在程序中采用。变量名长度,VC+6.0环境下的系统最多识别32个字符。由于各个C 编译系统都有自己的规定,为了程序的可移植性,建议不超过8 个字符。吸每个变量在定义时必须指定该变量的数据类型。这样即可在编译时系统能为其分配相应数量的存贮单元,如 inta,b;VC+6.0编译系统为a,b各分配4B(4 个字节),按整数方式存贮数据;也可以在编译时据此检查该变量将进行的运算是否合法。如 a%b(求余操作,即取a/b的余数),若 a,b定义为实型则不允许,给 出“错误消息”。喷变量定义须放在程序的前面。目的是在程序编译开始时即申请用于存放数据的存放空间,为后续变量的使用做好准备。O注意喷 由于在程序中书写常量数据的习惯和计算机内存存储该数据存在着差异,所以表示数据的时候,采用左高位,右低位。如 100的 4B 二进制形式为最高位00000000 00000000 00000000 0110010031.0而在内存的存储形式,内存地址从低到高排列,系统将该变 量 的4个字节的低位字节存放在低地址单元,后面依次类推,4个字节的最高位字节存放在高地址单元。字节内各位顺序不变。并将变量名total与4B中的最低字节的地址对应(如例 中12ff7c).o如图2.1-1所示。如遇第7位向第8位进位时,则跨字节存储。最高位在31位。在编译器中打开内存窗口,地址显示从低到高(既从上至下,又从左至右),所以俗称“倒装”,参见图2.17(b)。2.1.1整型数据没有小数点的正、负整数和。的数据。1.整型常量C语言中,整型数可用3种不同的数制表示。整型常量即为整型常数,常出现在赋值符号“=”的右值。(1)十进制数数字为09,如789,-123,0等。或为了区别同八进制、十六进制的混淆,在手写表示中用括号加进制下标说明,但不能在源程序中书写。因 为C编译系统自动识别并没有任何进制表示的常量默认十进制数。比如可写成(789)io,(-123)10o(2)八进制数以0(零)开头的数表示八进制。使用数字07,告诉编译系统该常数为八进制。如0234代表八进制数,或手写成(234)8O 它等于十进制数 2X82+3X81+4X8=156O(3)十六进制数以Ox(零和小写x)开头的数表示十六进制数。使用数字09与AaFf。如0 x7a代表十六进制数,或手写成(7A h。它等于十进制数7X 16U10X 16=122o2.整型变量整型变量根据实际需要,按定义变量使用内存存贮单元(以字节为单位)的多和少又分为整型,短整型,长整型和无符号型几种。其一般的定义形式为数值类型变量名表;其中变量名表中的变量可为1个或多个。如果为多个,则用逗号隔开。如 inta,b,c;。(1)短整型如果为节省内存空间,可 用short in t表示或以short表示,系统留出2B。取值范围从-3276832767,即-2匕程序中用到的数据不能超过这个范围,否则结果将出现错误。如果程序中要用到数据大于这个范围,须定义成其它类型。数据表示范围见图(2)整型以int表示,取integer整数的意思。如int a表示变量a为整型变量。在32位字长的计算机中编译时,系统为其留出4B。取值范围从-21474836482147483647,即31(23寸)。数据表示范围见图2.1-2o(3)长整型以long int表示或以long表示。系统为其留出4B(32位)空间。它的取值范围从-21474836482147483647,BP-231-(23,-1)O数据表示范围同整型见图2.1-2。15.0 符号位.0-32768 10000000 00000000 00000000 00000000 1-214748364816()00000 00000000 00000000 00000001 J-214748364711111111 11111111 11111111 11111111-1012147483647图2.1-1短整型数据范围(补码存储)图2.1-2整型、长整型数据范围(补码存储)(4)无符号型无符号型是指不带符号的数据,原符号位二进制数参与表示整型数据。在二进制最左边的一位,不再是符号位,而是与右边各位一起用来表示数值,使得表示数的最大值扩大了一倍。无符号型又分无符号短整型,以unsigned short表示;无符号整型,以unsigned int表示;无符号长整型,以unsigned long表示。无符号短整型系统为其留出2B的内存空间。由于最高位已不代表符号位,是数值的一部分。它 的 取 值 范 围 为。(216-1);无符号整型和无符号长整型系统留出4B的内存空间。取值范围从0-4294967295,即0-(232-1)。数据表示范围见图 2.1-3(a)(b)o最高位不作符号最高位不作符号oF.0r00000000 00000000Z/00000000 000000016J53511111111 11111111图2.17(a)无符号短整型数据范围3.300000000 00000000 00000000 0000000010000000 00000000 00000000 00000001 U 42,496729511111111 11111111 11111111 11111111图2.1 3(b)无符号整型、长整型数据范围整型数据在使用时,还应该注意以下几个问题。O注意余整型数据的补码表示。C语言编译系统识别源程序的整型数据以后,为了方便处理数据和存贮数据,引入了原码和补码的概念。处理和存贮数据均是以补码(complement)的形式进行,无论字节的多或少。也就是说所有的正、负整数都是以补码形式表示和存贮。若处理和存储一个正整数,该数值二进制形式最高位为“0”一表示正整数。它的补码也是它的原码(包括零)。如图2.1-1 和图2.1-2 的最高位为0的所有数值。若处理和存储一个负整数,其二进制形式最高位为“1”,以该数值的补码形式表示或存贮。如图2.1-1 和图2.1-2 的最高位为1 的所有数值,-3 2 7 6 7 的补码为1 0 0 0 0 0 0 1 o求负数的补码的方法是:将该数的绝对值的二进制形式,按位取反再加1。比如求-1 0 0 的补码,首先取-1 0 0 的绝对值为1 0 0 ,100的 二 进 制 形 式(短 整 型 为 例)原 码 为0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0,再各位取反为 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 1,最后加1,即为(1 1 1 1 1 m i 0 0 1 1 1 0 0)2=(F F 9 C)i 6。如果通过补码求数值则过程相反:首先最高位为“1”,其数值为负数,再 减 1 各位取 反 后 为(0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0)2=1 0 0,即-1 0 0。也就是说(F F 9 C.6 是-1 0 0 的补码。请记住几个重要的数值的补码,
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号