C语言学习----04 数据与数据类型

       数据是指能够输入到计算机中,并能够被计算机识别和加工处理的符号的集合,是程序处理的对象。所处理的数据可能很简单,也可能很复杂,数据之间存在某种内在联系。为了方便处理这些数据,计算机程序设计语言需要提供一种数据机制以便在程序中更好地表示它们,从而反映出数据的有关特征和性质。                                                                                                                                 C语言采用这样一种数据机制:把要处理的数据对象划分为一些类型,每个类型是一个数据值的集合。数据类型是按被定义变量的性质、表示形式、占据存储空间的多少、构造特点来划分的。为此C语言一方面提供了一组基本数据类型,如int、char、float、double等,用于对基本数据的表示和使用:另一方面提供了数据构造机制,该数据构造机制提供一组可以由基本数据类型或数据构造更复杂的数据类型或数据的手段。反复使用这些手段可以构造出任意复杂的数据结构,以满足复杂数据处理的需要。                                                                                                                                C语言具有非常丰富的数据类型,包括基本数据类型、构造数据类型、指针类型和空类型,见下表。本次主要介绍基本数据类型,一是因为基本数据类型是构造其他数据类型的基础;二是不希望冗长繁杂的数据类型介绍影响读者程序设计方法的学习和程序设计能力的培养。其他各种数据类型将在后面陆续进行详细介绍。

C语言中数据类型分类
数据类型关键字变量定义实例
基本类型整型基本整型intint a;
长整型longlong int a;或long a;
短整型shortshort int a;或short a;
无符号整型unsigned

unsigned int a;

unsigned long b;

unsigned short c;

实型(浮点型)单精度实型floatfloat a;
双精度实型doubledouble a;
长双精度实型long doublelong double a;
字符型charchar a;
枚举类型enum

enum response{no,yes,none};

enum response answer;

构造类型数组

int score[10];

char name[20];

结构体struct

struct date

{

      int year;

      int month;

      int day;

}

struct date d;

共用体union

union

{  

    int class;

     char position[10]

}category;

指针类型

int*p
空类型voidvoid sort(int array[],int n);

基本数据类型 

       基本数据类型最主要的特点是,其值不可在分解为其他类型,并且基本数据类型是由系统预先定义好的。C语言的基本数据类型包括整型、实型、字符型和枚举类型。没有小数部分的数就是整型,而有小数部分的数则是实型(也称浮点型),字母或者符号更广泛的说是字符类型。

   1.整型数据                                                                                                                                                在C语言中,整型是比较常用的数据类型。针对不同的用途,C语言提供了多种整数类型,可分为基本整型(int,简称“整型”)、短整型(short)和长整型(long)。上述类型又分为有符号型(signed)和无符号型(unsigned),即数值是否可以取负值,因此整型数据可细分为6种。各种整型数据占用的内存空间大小不同,取值范围也不同,如下表(以Code::Blocks环境为例)

整型数据分类
类型名称类型说明符所占字节数取值范围
有符号基本整型[signed] int 4

-2147483648~+2147483647

-2^{32-1}~+2^{32-1}-1

有符号短整型[signed] short [int]2

-32768~+32767

-2^{16-1}~+2^{16-1}-1

有符号长整型[signed] long [int]4

-2147483648~+2147483647

-2^{32-1}~+2^{32-1}-1

无符号基本整型unsigned [int]4

0~4294967295

0~2^{32}-1

无符号短整型unsigned short [int]2

0~65535

0~2^{16}-1

无符合长整型unsigned long [int]4

0~4294967295

0~2^{32}-1

                         注 [ ]内的关键字可以省略。  

需要说明的是,C语言没有具体规定以上各类数据在内存中所占的字节数,只要求long≥int≥short。具体所占的字节数与机器及系统有关。例如,int类型,表3.9中所列int类型数据在64位系统中Code:Block环境下占4个字节,但是在TurboC下int类型数据只占2个字节。编程时,可以用运算符sizeof0求出所使用环境中int类型数据究竟占用多少字节。                                                                  数值是以补码(complement)表示的。一个正整数的补码和该数据的原码(即该数的二进制形式)相同。求负数的补码的方法是,将该数的绝对值的二进制形式,按位取反再加1。例如,求-10的补码:取-10的绝对值10;10的绝对值的二进制形式为1010;对1010取反得1111111111110101(以2字节为例);再加1得1111111111110110。                                                                                                可知整数最左面的一位数字是表示符号的,该位为0,表示数值为正,为1则表示数值为负。

    2.实型数据

       在多数情况下使用各种整数类型就可以满足需求,然而,生活中还会涉及相邻整数之间的数,如财务、学生成绩和数学计算中经常要使用实数类型。C语言中实型包括单精度实型(float)、双精度实型(double)和长双精度实型(longdouble)。同样,存储实型数据所占字节数也与系统有关,实型数据的有效数字位数和数值范围由具体实现的系统决定。常用的C语言环境中实数类型的占用空间、取值范围见下表。

类型名称类型说明符所占字节数有效数字取值范围(绝对值)
单精度实型float4约6或7位10^{-37}~10^{38}
双精度实型double8约15或16位10^{-307}~10^{308}
长双精度实型long double12约18或19位10^{-4931}~10^{4932}

不同于整型数据的存储方式,实型数据按指数形式存储,分为小数部分(尾数)和指数部分(阶码),如实数N可以表示为N=s*r^{j},如下图所示:

 实型数据的存储方式

       例如,实型数据-101.1001B,先转换成规范的指数形式-0.1011001*2^{11},对应的指数符号为0,指数数值为11;小数符号为1,小数数值为1011001。指数部分与小数部分各占多少二进制位,用原码还是补码形式存放,都与具体的系统有关。                                                                           实型数据的存储空间是有限的,所以精度也是有限的,有效位数以外的数字将被舍去,因此会存在误差。

    3.字符型数据

         在数据处理中,C语言还有一种基本类型——字符类型,类型说明符为char。字符型数据只占1个字节,只能存放1个字符,无法存放多个字符组成的字符串。                                                          字符型数据在存储时并不是将字符本身存放到内存中去,而是将该字符对应的ASCI码值转换成二进制形式存放到存储单元中。由于它与整型数据的存储方式类似,在ASCII码取值范围(1个字节,0~255)内,字符型数据和整型数据可以通用。字符型数据和整型数据之间可以进行算术运算,一个字符型数据可以按字符形式输出也可以按整数形式输出,这给字符处理带来很大的灵活性。

    4.枚举类型数据

       枚举类型是用标识符表示的有限个整数常量的集合,是指将变量的值一一列出来,变量的值只在列举出来的值的范围内(将在10.5节中介绍)。

构造数据类型

        C语言的基本数据类型并不能满足实际应用中的所有需求,用户可以利用整型、实型、字符型这些基本数据类型构造满足需要的数据类型,即构造类型。它包括数组类型、结构体类型和共用体类型。                                                                                                                                                         数组是由一系列相同类型的数据元素构成的,并且是按照一定顺序组织在一起的一个数据集合。例如,人们利用计算机来处理学生成绩、管理每月的销售额等。对于这些大量相互关联的数据,利用数组能够有效方便地进行处理。                                                                                                 在实际问题中,一组数据也可能具有不同的数据类型。例如,一个学生的信息记录中,姓名应为字符数组;学号可为字符数组或长整型;年龄应为整型;性别应为字符型;成绩可为实型。显然不能用一个数组来存放这些数据。因为数组中各元素的类型和长度都必须一致。为了解决这个问题,C语言给出了另一种构造数据类型——结构体类型。结构体类型由不同的“成员”组成,每个成员可以是不同的数据类型。结构体类型与共用体类型会在以后进行详细介绍。                                       共用体类型也是用来描述类型不相同的数据,但与结构体类型不同,共用体数据成员存储时采用覆盖技术,共享(部分)存储空间。例如,有一张教师与学生通用的表格,教师的数据有姓名(char)、年龄(int)、身份(char)、教研室(char)4项,学生的数据有姓名(char)、年龄(int)、身份(char)、班级(int)4项。可以采用覆盖技术使用教研室(char)和班级(int)共享存储单元。

其他数据类型

    1.指针类型                                                                                                 

       指针是一种特殊的数据类型,也是一种很重要的数据类型。指针的值指的是内存中的地址。指针的使用非常灵活,可以有效地表示各种复杂的数据结构。指针的定义和使用将在第9章进行详细介绍。

    2.无类型

       C语言中无类型用void表示,一般用于描述指针以及作为不返回值的函数的返回值类型。无类型的第一个用途是定义指针时用作指针的类型,表示该指针可以指向任何类型,但它不同于空指针;第二个用途是表示函数的返回值类型,调用函数时,通常应向调用者返回一个函数值,这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中加以说明。也有一类函数在调用后并不需要向调用者返回函数值。对于那些确实不需要返回值的函数,可以将类型说明为void类型。

<br>【原 书 名】 Professional Java Data <br>【原出版社】 Wrox <br>【作 者】[美] Danny Ayers ,John Bell ,Carl Calvert Bettis等 <br>【译 者】 戴英 张晓晖 王辉 等 <br>【丛 书 名】 乐思公司编程指南系列 <br><br>http://images.china-pub.com/ebook/5221/shupi.jpg<br><br>Java是一种功能强大的编程平台,带有大量的Application Programming Interfaces(APIs,应用程序编程接口)。在本书中,我们将研究Java用于访问和处理数据的各种技术。本书将向读者介绍如何使用Java开发企业级的分布式应用程序,其中涉及生成、处理、存储、 与检索各种类型的数据与不同的数据库。<br>本书按照一定的逻辑顺序分为六个部分。在相互的基础上,前四部分深入广泛地探讨了各种Java技术,它们可以组合或单独用于为各种数据访问与处理情况开发实际方案。第五部分中的案例研究包括了一些实际的围绕数据的应用程序范例。<br>本书只需要读者具有Java的使用知识,所有的技术与概念都会用图表与实际范例充分给予解释。<br><br>目录<br>第一部分 软件、对象、数据设计与建模<br>第1章 软件开发的方法与过程<br>为什么我们需要方法与过程<br>什么是软件方法与过程<br>方法的内容<br>过程模型<br>源代码管理的要素<br>软件缺陷与修改的跟踪和解决方案<br>软件品质<br>参考文献<br>第2章 面向对象的分析与设计<br>OOA、OOD与OOP<br>面向对象的分析<br>面向对象的设计<br>小结<br>第3章 用UML进行对象建模<br>为什么使用UML<br>什么是UML<br>UML图表<br>如何将UML建模图表配合在一起<br>如何将UML合并到我们的项目中<br>可以考虑的一些UML CASE工具<br>小结<br>第4章 数据建模<br>数据建模的阶段<br>可以考虑的一些数据建模工具<br>小结<br>第二部分 数据库访问<br>第5章 数据库的概念与技术<br>数据库设计 <br>数据库规格化与数据仓库<br>数据库视图<br>数据库元数据<br>临时表<br>约束<br>静态SQL与动态SQL<br>准备语句<br>事务处理与隔离级别<br>存储过程<br>触发器<br>复制<br>优化基础<br>小结<br>第6章 Java数据库连接(JDBC)<br>什么是JDBC<br>JDBC结构<br>开始起步<br>使用JDBC<br>一个简单的范例<br>对映Java与SQL类型<br>处理SQL错误<br>ResultSet与数据库元数据<br>JDBC中的事务处理<br>一个JDBC事务范例<br>JDBC事务隔离级别<br>保存点<br>使用光标<br>PreparedStatement接口<br>批更新<br>CallableStatement<br>JDBC Escape语法<br>JDBC支持类<br>小结<br>第7章 JDBC 2.0可选包<br>简介<br>DataSource与JNDI<br>连接池<br>RowSet<br>分布式事务与Optional Package<br>小结<br>第8章 SQLJ<br>简介<br>什么是SQLJ<br>准备开始<br>使用SQLJ<br>SQLJ定制<br>小结<br>第9章 数据库性能问题<br>本地编译机制<br>挑选适当的JDBC驱动程序<br>连接池<br>事务和批量查询<br>存储过程和JDBC准备语句<br>JDBC准备语句<br>在程序块上检索大数据集合<br>高速缓存频繁使用的数据<br>性能监控<br>小结<br>第10章 Java和ODMG 3.0规范<br>基础<br>ODMG的核心概念<br>对象定义语言<br>小结<br>第11章 目录服务与JNDI<br>命名与目录服务<br>使用JNDI<br>JAVA与LDAP<br>从理论到实践<br>标准的LDAP操作<br>LDAP服务器改进<br>在LDAP中存储并检索Java对象<br>其他目录服务<br>小结<br>第三部分 网络客户机上的数据显示<br>第12章 Web体系结构<br>引言<br>典型的Web中心体系结构<br>应用程序体系结构<br>Web中心应用程序的判定标准<br>小结<br>第13章 服务程序(Servlets)<br>概述<br>服务程序的结构<br>服务响应<br>服务程序Cookies<br>会话跟踪<br>深入性主题<br>小结<br>第14章 使用服务程序进行数据访问<br>引言<br>使用服务程序的数据库连接<br>范例应用程序<br>JDBC驱动器之结语<br>小结<br>第15章 JSP<br>JSP与服务程序<br>JSP与ASP<br>实现JSPs<br>JavaServer Page范例<br>JavaBeans综述<br>在JSPs中使用JavaBeans<br>JSP事宜<br>资源<br>小结<br>第16章 使用JSP进行数据访问<br>访问数据<br>范例应用程序<br>深入性主题<br>小结<br>第17章 分析和生成XML<br>文档和数据<br>XML概述<br>Java XML技术<br>生成XML<br>读取XML<br>小结<br>第18章 WAP客户机<br>WAP概览<br>WAP构成组件<br>WML基础<br>Java服务程序和WML<br>WML服务程序和JDBC<br>相关URLs<br>小结<br>第四部分 Enterprise JavaBeans与分布式应用程序<br>第19章 Enterprise JavaBeans<br>Enterprise JavaBean体系结构<br>一个简单的Enterprise JavaBean<br>会话Beaus<br>面向对象与关系模型<br>实体beans<br>数据映射<br>EJB事务置<br>EJB 2.0<br>小结<br>第20章 Java事务API(JTA)和Java事务服务(JTS)<br>进行事务处理的理由<br>使用事务处理的益处<br>事务处理的属性<br>事务服务<br>理论足已!一些Java细节<br>设计性事务处理<br>铭记要点<br>小结<br>第21章 开发EJB客户机<br>引言 <br>EJBs的客户机<br>小结<br>第22章 开发可扩缩的EJB应用程序<br>引言<br>Enterprise JavaBeans的优点<br>EJB的广阔开放空间<br>Enterprise JavaBeansas行范例<br>可扩缩性概念和目的<br>数据传输概念<br>传输简单对象<br>静态数据传输<br>复合对象传输和集合<br>ePIM的基本设计<br>测试代码<br>利用Facade和Proxy模式减少网络通信量<br>进一步增强<br>小结<br>第23章 J2EE通信<br>通信概述<br>JMS的详细情况<br>消息驱动EJB<br>小结<br>第24章 Java数据对象(JDO)<br>概述<br>JDO对象模型<br>JDO API<br>JDO实例的生命周期<br>JDO和EJB<br>开发可持久类<br>范例应用程序<br>配置FFJ<br>配置数据源<br>捕获数据库模式<br>把类映射到数据库对象<br>编译类<br>小结<br>第五部分 案例分析<br>第25章 案例分析:XML网站入口<br>案例分析综述<br>XML-Client应用程序<br>XML跳过HTTP<br>配置<br>开始应用程序服务器<br>XML-RPC<br>小结<br>第26章 案例分析:网站通信量的统计分析<br>案例分析综述<br>客户机网站<br>跟踪应用程序<br>配置<br>小结<br>第27章 案例分析:网络数据工具箱<br>任务<br>逐步实现工具箱<br>前进道路<br>小结<br>第28章 案例分析:WAP Tic-Tac-Toe游戏<br>纵览应用程序结构<br>玩游戏<br>存储并检索分数:JDBC连接<br>会话管理<br>安装应用程序组件<br>相关的URL<br>小结<br>第六部分 附录<br>附录A SQL入门<br>什么是SQL<br>什么是数据库<br>关系数据库基础<br>关系数据库的优点和缺点<br>SQL:数据定义<br>基本数据操作<br>数据完整性<br>表达式<br>连接<br>合并<br>子查询<br>小结<br>附录B 序列化<br>简介<br>序列化<br>可串行化的接口<br>小结<br>附录C Java和分布式应用程序<br>分布式系统<br>分布式数据库应用程序<br>在分布式应用程序的Java<br>小结<br>附录D 配置Tomcat、JRun和Orion<br>Tomcat安装和配置<br>JRun 3.0安装和配置<br>安装检索<br>附录E 在WebLogic 6.0上配置并部署EJB<br>设置配置属性<br>生成EJB容器类<br>加载EJB类到WebLogic服务器<br>附录F UML符号<br>类和对象<br>关系<br>状态<br>对象相互作用<br><br><br>http://www.china-pub.com/5221<br><br>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值