第六章复合数据类型

第六章复合数据类型
第六章复合数据类型

第六章 复合数据类型

一个变量是由四个要素组成的: 一个名字、一个属性、一个关联和一个值。 名字指命名变量 的标识符; 属性指变量可以存放那种类型的值; 关联指存放变量的内存位置; 值指该内存位 置当前时刻存放的数据。 应该认识到这里的值是可能改变的, 但任何时候在盒子里总有一个值 (我们将无定义的随机 值也当做一个特殊的值) 。

根据变量在赋值运算中的使用方式,将变量的关联部分称为左值,变量的值部分称为右值。 对于表达式而言, 求值结果也存在是否可作为左值使用的问题。 一般情况下, 表达式的求值 结果作为右值使用,但如果一个表达式的求职结果不是 void 类型,并且指派了一个变量,

则该表达式可作为左值。 ((i<0)?i:j)=1 (i+j) =1

6.2 指针类型

变量以两种方式被使用:作为一个关联的名字和作为一个值的名字。 对变量的访问也有两种方式:直接访问和间接访问。

在C++中实现对变量的间接访问的方法是:

先安排相关变量,专门用于存放变量地址。 要间

接访问时, 先从这些变量获得待访问的变量的地址, 然后再按所获得的地址去访问要访问的 变量。

指针是存放其他变量地址的变量, 所以从效果上看它们指向这些数据。 指针使得数据不一定 非得与某一特定变量名字相关联,指针可以指向一个没有名字的数据值。

6.2.1 指针的声明

int age = 30;

//声明一个存放年龄的整数类型变量

让C++编译程序知道有一个新的变量,该变量的名字是标识符

age,编译程序会为它分配

2

个字节的存储空间(假如我们使用的机器上 int 用两个字节表示)并将 30放在这些字节中, 并且编译程序知

道这些字节中存放的是整数类型数值而不是浮点类型或其他类型数据。 不直接访问age 的存储空间地址,而是用 age 这个名字访问器其存储空间。

ptr 常用作 pointer 的缩写

指针类型是在其他数据类型后加一个类型修饰符“ *”,这个类型被称为指针的基类型。如 int * age_ptr; 注意“ *”仅用于修饰类型,而不是变量名字的一部分。 一个指针变量占用的存储空间大小取决于机器的内存寻址方式。

指针age_ptr 的类型(int*)指明age_ptr 仅能指向整数类型的值,而不能指向字符类型、浮点 类型或其他类型的值,即age_ptr 中存放的地址所指向的存储空间中只可存放整数类型的值。 将“*”与类型名写在一起表明 int* 是一种复合类型,但要注意 Int * p,q;

声明的却是一个整数类型的指针变量

P 和一个整数类型变量

q

6.1 变量和赋值的进 步讨论

.//合法的赋值运算 //不合法的赋值运算

如果把“ *” 和指针变量写在一起,则可以连续声明几个指针变量。例如: int *p,*q,*k;

注意(int *)并不能作为一个类型来使用,例如(int *) ptr;并不是一个声明,编译程序会将它理

解为类型转换。

6.2.2 指针的引用

“&”运算符放在操作数前面,操作数必须是一个变量名,表示取出操作数的存储空间地

址;”*”运算符也放在操作数前面,操作数必须是一个指针变量,表示取出指针所指向存储空间中保持的值。在一个指针变量前面加上“ *”有两种情况:一是声明一个指针变量,此时作为类型修饰符;二是访问指针变量所指向的变量的值,此时作为一元运算符。

空指针是值为 0x00 的指针变量,许多编译程序提供的函数库中定义了一个空指针名字

NULL,其作用相当于 0x00,赋值语句:

ptr=NULL; 相当于 ptr=0;

int *ptr;

声明指着 ptr 时没有初始化它,所以 ptr 中存放的值是不确定的,它随机地指向某一内存区

域(这个区域的内容可能很关键)。如果为初始化 ptr 就使用它:

*ptr = 250;

那么存放250的两个字节将可能会写入内存中的关键区域。C++语言在编译与运行时都不报

告这种错误, 这种错误在程序开发后期才能被发现, 并且这种错误的出现具有随机性, 因而错误的定位与修改变得十分困难。

6.2.3 指针的运算

指针变量的算术运算只能做加、减运算。必须注意指针的算术运算与指针的基类型是密切相

关的。例如指针 age_ptr 的当前值为 350606 ,经过如下运算: age_ptr = age_ptr + 1;

age_ptr的当前值不是350607,而是350608。因为指针age_ptr的基类型是int,所以指针age_ptr

每次加 1就指向下一个整数,所以他存放的地址值是加 2 而不是加 1。

6.2.4 按引用调用的参数传递方式

引用类型是在其他数据类型后加上一个类型修饰符“ & ”,该数据类型被称为引用的基类型, 例如int&是基类型为int的引用类型。注意“ &”在C++语言中既可作为类型修饰符,也可作为一元运算符(取操作数的地址)或二元运算符(两个操作数进行位与运算)引用类型的变量并不真正创建一个新的对象,而是作为另一个对象的别名。

int i =1; //真正创建了一个整数类型的对象并初始化为 1

int& ir = 1; //引用类型的变量必须初始化,指明ir 是 i 的别名

引入 ir 作为 i 的别名后,对 ir 的运算就相当于作用在变量 i 上。

ir = 8; //相当于将 8 赋值给 i cout<<&ir;

//相当于输出 i 的地址

C++语言引入引用类型的主要作用是提供按引用调用的参数传递方式。 定义为引用类型时,函数调用表达式可作为左值使用。

按值调用 按引用调用 由于按引用调用不需要复制实际参数的一个副本,因而按引用调用的效率要高于按值调用, 特别是当参数时比较大的复合数据类型时。 有时候为了效率而使用按引用调用的参数传递方 式,即使并不需要修改这些实际参数的值。为确保函数无副作用,可以使用保留字 const 修

饰这个形式参数。

6.3 数组类型

在数学上, 常用一个向量表示一些相关数据组成的序列。 在程序设计中,用数组来表示,数 组是数据

项的有序列表,这

些数据项

称为数组的元素。程序中数

组有以下特点: (1) (2) (3) (4)

一维数组是相对多维数组而言, 指数组中的元素不再是数组类型。 一维数组只需要一个参数 就可以确定数组内的一个数组元素。一维数组的声明方式为: 类型 数组名 [ 常量表达式 ]; 常量表达式可出现常量或符号常量, 但不允许有变量,因为C++语言不允许动态确定数组的

长度,如: int N; cin>>N;

int scores[N]; //出错,因为 N 是变量

一个数组的所有元素在存储空间中是连续存放的, 两个相邻的数组元素之间没有空隙。 编译 程序将根据数组的长度以及数组的基类型为数组分配相应大小的存储空间。 编译程序为数组

分配的存储空间地址是不确定。

数组的大小可以用 sizeofO 运算符取得,如果 sizeofO 的操作数是一个数组变量,它将返回整 个数组占用的存储空间字节数。

6.3.2 一维数组元素的引用与初始化

程序中使用数组时, 通常引用的是数组中的一个个元素, 而不是整个数组变量, 如在屏幕上 输出数组scores 中的内容,不能用

将函数的返回值类型 数组中的每一个元素均属于同一类型,这种类型称为数组的基类型; 每个数组中的元素个数一经确定后就保持不变,称为数组的长度; 数组中的每

一个元素均能直接访问,用数组下标来标识数组的元素; 数组中的元素还允许是数组类型,从而产生二维数组、多维数组等结构。 6.3.1 维数组的声明

Cout<

而必须将数组中的元素逐个地输出到屏幕。

6.3.3 数组作为函数的参数

要想将数组传递给函数,函数形式参数中的数组必须给出数组的基类型以及左右方括号

“[] ”,这样编译程序才能理解这个参数是一个数组类型的变量,而不是其他数据类型。由于在数组声明时已确定了这个名字的数组长度,所以在形式参数中没有必要再次给出数组的大小。C++语言也允许在方括号中写上数组的长度,但在方括号中写任何数字或没有数字都可以正常工作,这些数字仅起一个注释作用。

在C++语言中,编译程序对数组进行处理时,自动将数组名转化为指向这个数组首元素的指

针(数组首元素的地址)。所以,在函数调用时,只须给出数组的名字作为实际参数。所有数组都是按引用被自动传递过去(实际上是它们起始地址的一个副本),因此如果给一个函

数传递一个数组作为实际参数,并且在这个函数中改变了数组元素的值,那么,函数调用返回时这些改变仍然保持着。

按值调用的参数传递方式的最大好处是函数调用没有副作用,因为被调用函数的执行结果不

影响调用程序中的数据。但数组作为函数参数时是按引用调用的,如果不想再函数体中改变数组元素的值,如何保证函数调用没有副作用呢?可以在函数原型中数组参数前加上const 修饰符,以显式指明调用该函数对数组是没有副作用的,即数组中的任何元素对不能再改函数体中改变。

6.3.4 一维数据应用举例

冒泡排序法:将相邻的两个数据做比较,把较小的数据交换到前面

6.3.5 二维数组的声明

如果一个数组的基类型是一维数组,则称这种类型为二维数组。二维数组需要两个参数方可确定数组内的一个数组元素。声明二维数组的一般形式为:

类型数组名 [常量表达式 ][ 常量表达式 ];

int scores[50,3]; //语法错误“50,3”是逗号表达式,相当于 int scores[3];

为二维数组分配存储空间可以有以行为主和以列为主两种。以行为主(以行优先)是一行一

行地存,各行按列次序连续存储,一行存完后再存下一行。以列为主(以列优先)是一列一列地存,各列按行次序连续存储,一列存完后再存下一列。

在 C++ 中,一律采用”以行为主”的存储形式。

6.3.6 二维数组元素的引用与初始化

int matrix[3][4] = {{1,2,3,4},{1,3,5,7},{2,4,6,8}};

int matrix[3][4] = {1,2,3,4,1,3,5,7,2,4,6,8};

int matrix[3][4] ={{1,2},{2,3,5}};

与一维数组相似,在C++语言中,编译程序对二维数组进行处理时,自动将数组名转化为指

向这个数组首元素的指针(数组首元素的地址)

6.3.7 二维数组应用举例

符号常量的值是不可修改的,所以使用全局符号常量并无什么副作用。

一维数据作为参数时, 可以不给出数组的大小; 但二维数组作为形式参数则必须给出数组的 大小(或只给出第二维的长度)

6.3.8 指针与数组

指针类型变量可以当做数组使用, 数组类型变量也可当做指针使用。

C++语言的数组名字只

是一个指针而已。

虽然数组名字也是一种指针类型,但它是一种常量指针类型,其值是不可改变的。

C++语言

允许以指针形式访问数组元素正是需要利用指针是变量这一特点来弥补数组名字作为常量 指针的不足,以提高处理数据 (特别是一组连续数据 )的能力和简化对数据的操作方式。

6.3.9 指针数组与数组指针

指针数组是指基类型为指针类型的一个数组,而数组指针是指基类型为数组类型的一个指 针。如果需要保留许多指针的值,可以使用指针数组。如: int * ptr_array[10];

[]的优先级高于 *,所以 ptr_arrary 先于[10 结合,组成长度为 10的数组形式, 然后才决定这个 数组中的每一个元素师指针类型 (int *). 。如果写成 int(* array_ptr)[10]; 那么声明的将是一个指针类型的变量

array_ptr,它指向一个长度为10的整数类型数组。

6.4 字符串

6.4.1 字符串常量与变量

字符串”A ”与字符'的区别,编译程序为字符 串”A ”分配两个字节,其中一个字节存放 A 的ASCII 编码,第二个字节存放串结束标志 C++语言在处理字符串时, 全靠这个结束标志才知道字符串的终止位置, 双引号并没有存储起来,不能用它们为字符串确定边界。

字符串的长度是指字符串中所有字符的总和, 包括其中的空格以及其他转义字符在内, 尽管 转义字符在字符串中占了几个位置, 但只当做一个字符计算长度。 一个字符串常量占用的存 储空间是其长度加 1 个字节,因为最后还要存储一个串结束标志。

字符串变量是一个基类型为字符类型的数组变量,同样遵循“先声明、后使用“的原则。字 符串定义的一般形式为:

Char 数组名 [ 元素个数 ];

字符串实际上是基类型为字符的一个特殊数组, 一个 0 值字节表示串结束。

它与普通字符数组的区别在于字符串最后有

'A'只分配一个字节的存储空间,而为字符

”\0”。

因为括住字符串的

在声明字符串常量时,可以字符串常量进行初始化,如: char name[30] = ”Zhongshan University ”; 这时编译程序会为字符串变量

name 分配30个字节的存储空间,并将"Zhongshan University ”

中 20 个字符的 ASCII 码存储在前 20 个字节中,然后在第 21 个字节中放一个 ”\0”表示串结 束,至于第 22 个至第 30 个字节是什么内容是不关心的。 字符串变量占用的存储空间大小与 其中存放的字符串的长度之间没有相等关系,

尽管name 中存放的字符串长度为 20,实际使

用了 21个字节,但它仍然占用着 30个字节存储空间。

鉴于上述存储空间组织方式, 在初始化字符串变量时一定要注意字符串长度不要超过其存储 空间大小,如: char name[20] =”Zhongshan University ”; 可能会引起严重问题,因为字符串的结束标志 ”\0”超出了为它分配的存储空间变价,可能破

坏了其他数据。

C++语言为避免上述字符串越界错误,

也帮助程序员提供了一条捷径,

即不必声明字符数组

的长度,由编译程序根据初始化的字符串常量的长度自动决定。如: char name[] = “Zhongshan University ”; 对于这个声明,编译程序会根据字符串常量的长度为 char name[] = “Zhongshan University ”;

由于字符串是一个字符类型的数组,所以既可以用数组下标方式访问字符串中的各个字符, 也可用指针方式访问。逐个访问字符串中的字符时,一般使用循环语句 判断字符是否为 '\0'作为循环结束条件。

6.4.2 字符串数组

const int max_subjects = 24; char* subjects[max_subjects];

6.4.3 关于字符串操作的库函数

与其他类型的数组一样, 只可在声明字符串变量时用赋值运算作初始化, 直接使用赋值运算,如: char name[30];

name = “Zhongshan University ”; //语法错误

因为 name 实际上是一个常量指针,不可用赋值语句改变其值,即 左值 ”。可

以每次使用循环语句逐个字符赋值一个字符串,或比较两个字符串的每一个字符 是否相等,但这一类常用操作已由

C++系统提供,只要使用以下语句即可完成字符串的复制:

strcpy(name,”Zhongshan University ”);

这些常用函数组织成标准库的形式供程序员重用,该标准库的名字为 #include

(1) unsigned int strlen(const char* str);

返回字符串 str 中字符个数,包括其中的空格与转义字符,但不包括结束标记 (2) char* strcpy(char* str1,const char* str2);

将str2指向的字符串复制到 str1指向的位置并返回str1。注意为str1分配的存储空间必

须能放下 str2 指向的字符串。

name 分配 21 个字节,相当于

for 或 while 并且以 在其他地方不允许

name 不允许作为一个 ”

string 。

'\0'

int main(int argc,char* argv[]);

以下是初学者常犯的错误: char* str;

strcpy(str,”Be careful ”); // 可能引起严重的问题

因为 str 所指向的存储空间地址是不确定的,我们还没有让这个指针指向一块已分配到 的存储空间。 char* str;

str = “Be careful. ”;

因为字符串常量已经分配了存储空间,赋值后指针 char str[20]; strcpy(str, ”Be careful ”);

因为 str 已经静态地分配了 20个字节的空间, 所以可以将字符串常量复制到这一存储空 间。注意为str 静态或动态申请的存储空间大小不可小于 12个字节,否则会出现越界写 入错误。

str 指向这一空间。

(3) char* strcat(char* str1,const char* str2);

将字符串 str2 连接到字符串 str1 后,形成一个新字符串,原先 str1 的结束标记 '\0'被取 消。函数返回值为 str1。注意为字符串常量 str1分配的存储空间一定要足够大,能够容 纳两个字符串连接后的新字符串。

(4) (5) int strcmp(const char* str1,const char* str2);

比较两个字符串 str1 和 str2 的内容是否相同(按字典排序方法) 。如果 str1 小于 str2 则 返回负数,str1等于str2则返回零,str1大于str2则返回整数。 char * strchr(const char* str,int ch);

寻找字符串str 中第一出现字符ch 的位置。如果找到ch,则返回指向该位置的指针,否 则返回空指针。 (6) char* strstr(const char* str1,const char* str2);

寻找字符串 str2 在字符串 str1 中第一次出现的位置,不包括 str2 的结束标记 '\0'。如果 找到str2,则返回指向该位置的指针;否则返回空指针。

6.4.4 字符串与指针数组应用的例子(主函数带参数)

程序员写出源程序之后, 要利用编译程序吧源程序转换为机器语言程序, 再利用连接程序把 编译所得的机器语言程序组织处理成为可装入内存并执行的可执行机器语言程序 (或称可执

行文件),最后才能执行这个程序。

得到了可执行目标程序之后, 在操作系统环境下, 直接输入可执行文件名便可以执行这个程 序,不必每次都从源程序编译、连接后才去执行。 主函数带参数 stdlib.h

把指针s 所指向的数字字符串转换为整数 int atoi(const char*s); 把指针s 所指向的数字字符串转换为实数

Double atof(const char* s); 把指针s 所指向的数字字符串转换为长整数

long atoll(const char* s);

主函数带参数主要有以下两种方式:

(1) (2) (3) (int):

(double):

(long):

第六章 复合数据类型

第六章复合数据类型 6.1变量和赋值的进一步讨论 一个变量是由四个要素组成的:一个名字、一个属性、一个关联和一个值。名字指命名变量的标识符;属性指变量可以存放那种类型的值;关联指存放变量的内存位置;值指该内存位置当前时刻存放的数据。 应该认识到这里的值是可能改变的,但任何时候在盒子里总有一个值(我们将无定义的随机值也当做一个特殊的值)。 根据变量在赋值运算中的使用方式,将变量的关联部分称为左值,变量的值部分称为右值。对于表达式而言,求值结果也存在是否可作为左值使用的问题。一般情况下,表达式的求值结果作为右值使用,但如果一个表达式的求职结果不是void类型,并且指派了一个变量,则该表达式可作为左值。 ((i<0)?i:j)=1 .//合法的赋值运算 (i+j) =1 //不合法的赋值运算 6.2指针类型 变量以两种方式被使用:作为一个关联的名字和作为一个值的名字。 对变量的访问也有两种方式:直接访问和间接访问。 在C++中实现对变量的间接访问的方法是:先安排相关变量,专门用于存放变量地址。要间接访问时,先从这些变量获得待访问的变量的地址,然后再按所获得的地址去访问要访问的变量。 指针是存放其他变量地址的变量,所以从效果上看它们指向这些数据。指针使得数据不一定非得与某一特定变量名字相关联,指针可以指向一个没有名字的数据值。 6.2.1指针的声明 int age = 30; //声明一个存放年龄的整数类型变量 让C++编译程序知道有一个新的变量,该变量的名字是标识符age,编译程序会为它分配2个字节的存储空间(假如我们使用的机器上int用两个字节表示)并将30放在这些字节中,并且编译程序知道这些字节中存放的是整数类型数值而不是浮点类型或其他类型数据。 不直接访问age的存储空间地址,而是用age这个名字访问器其存储空间。 ptr常用作pointer的缩写 指针类型是在其他数据类型后加一个类型修饰符“*”,这个类型被称为指针的基类型。如int * age_ptr; 注意“*”仅用于修饰类型,而不是变量名字的一部分。 一个指针变量占用的存储空间大小取决于机器的内存寻址方式。 指针age_ptr的类型(int*)指明age_ptr仅能指向整数类型的值,而不能指向字符类型、浮点类型或其他类型的值,即age_ptr中存放的地址所指向的存储空间中只可存放整数类型的值。

西门子S7-300 PLC的数据类型汇总

西门子S7-300 PLC的数据类型汇总 2010-07-14 11:12 S7-300的数据类型分以下三种:基本数据类型、复合数据类型和参数类型。 一、基本数据类型 1、位(bit) 常称为BOOL(布尔型),只有两个值:0或1。如:I0.0,Q0.1,M0.0,V0.1等。 2、字节(Byte) 一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。范围:00~FF(十进制的0~255)。 3、字(Word) 相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,字为16位。如:IW0是由IB0和IB1组成的,其中I是区域标识符,W表示字,0是字的起始字节。需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。字的范围为十六进制的0000~FFFF(即十进制的0~65536)。在编程时要注意,如果已经用了IW0,如再用IB0 或IB1要特别加以小心。 4、双字(Double Word) 相邻的两个字(Word)组成一个双字,来表示一个无符号数。因此,双字为32位。如:MD100是由MW100和MW102组成的,其中M是区域标识符,D表示双字,100是双字的起始字节。需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。双字的范围为十六进制的0000~FFFFFFFF(即十进制的0~4294967295)。在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特别加以小心。 以上的字节、字和双字数据类型均为无符号数,即只有正数,没有负数。 5、16位整数(INT,Integer) 整数为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-32768~32767。 6、32位整数(DINT,Double Integer) 32位整数和16位整数一样,为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-2147483648~2147483647。 7、浮点数(R,Real) 浮点数为32位,可以用来表示小数。浮点数可以为:1.m×2e,其存储结构如图所示: 8、常数的表示方法 常数可以是字节、字或双字,CPU以二进制方式存储,也可以用十进制,十六进制ASCII 码或浮点数形式来表示。如下图所示: 说明:(1)S5T#格式为:S5T#aD_bH_cM_dS_eMS,其中a,b,c,d,e分别是日,小时,分,秒和毫秒的数值,输入时可以省掉下划线,如表中所示。 (2)D#取值范围为:D#1990_1_1~D#2168_12_31。 二、复合数据类型 用户通过复合基本数据类型而生成就是复合数据类型。 复合数据类型包括以下几种: 1、数组(ARRAY) 将一组同一类型的数据组合在一起组成一个单位就是数组。

复合算术运算符

复合算术运算符 现在我们来看看由几种运算符和包含混合数据类型的更复杂的表达式。 优先权规则 算术表达式能够由许多常量、变量、运算符和括号组成,那么操作执行的次序是怎样的呢?例如,在赋值语句中 avgTemp = FREEZE_PT + BOIL_PT / 2.0; 是FREEZE_PT + BOIL_PT首先被计算呢还是BOIL_PT / 2.0首先被计算? 基本的算术运算符的运算顺序与数学的运算符顺序是一样的,按照优先权规则: 最高优先级:单目+单目- 中等优先级: * / % 最低优先级: + - 在上面的表达式例子中隐含着用括号一样: FREEZE_PT + (BOIL_PT / 2.0) 即,我们首先用2除BOIL_PT然后加FREEZE_PT得到结果。 你能够使用括号改变求值的次序,在语句 avgTemp = (FREEZE_PT + BOIL_PT) / 2.0; 中FREEZE_PT和BOIL_PT首先被加,然后它们的和再除以2。我们首先求括号内的子表达式的值,然后接下来再按运算符的优先权规则求值。 当一个算术表达式有几个具有同样优先权的双目运算符时,它们的结合次序是从左到右。表达式int1 - int2 + int3

意味着(intl - int2) + int3,不是int1 - (int2 + int3)。另一个例子,我们使用表达式(float1 + float2) / float1 * 3.0 首先求括号内的表达式的值,然后将得到的和除以float1再乘以3.0。下面是更多的一些例子。 ———————————————————— 表达式值 10/2*3 15 10%3-4/2 -1 5.0*2.0/4.0*2.0 5.0 5.0*2.0/(4.O*2.O) 1.25 5.0+2.0/(4.0*2.0) 5.25 ———————————————————— 在C++中,所有的单目运算符都有从右到左的结合性,例如,-+x意味着-(+x)而不是意味着(-+)x。 类型的强制和类型的转换 整型值和浮点值被不同的存储在计算机存储器内,如果在一条赋值语句或算术表达式中我们将整数和浮点值混合在一起会发生什么情况?让我们首先看看赋值语句。 赋值语句如果你做如下声明 int someInt ; float someFloat ; 赋值语句 someFloat = 12;

数据类型

数据类型 数据元( Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型。 中文名 数据元 外文名 Data element 又称 数据类型 被认为 是不可再分的最小数据单元 目录 .1基本属性 .2组成 .3分类 .4命名规则 .5数据元与元数据 .6数据元提取 .?自上而下提取法 .?自下而上提取法 基本属性

(1)标识类属性:适用于数据元标识的属性。包括中文名称、英文名称、中文全拼、内部标 识符、版本、注册机构、同义名称、语境。 (2)定义类属性:描述数据元语义方面的属性。包括定义、对象类词、特性词、应用约束。 (3)关系类属性:描述各数据元之间相互关联和(或)数据元与模式、数据元概念、对象、 实体之间关联的属性。包括分类方案、分类方案值、关系。 (4)表示类属性:描述数据元表示方面的属性。包括表示词、数据类型、数据格式、值域、 计量单位。 (5)管理类属性:描述数据元管理与控制方面的属性。包括状态、提交机构、批准日期、备 注。 组成 数据元一般由对象类、特性和表示3部分组成: (1)对象类(Object Class)。是现实世界或抽象概念中事物的集合,有清楚的边界和含义,并 且特性和其行为遵循同样的规则而能够加以标识。 (2)特性(Property)。是对象类的所有个体所共有的某种性质,是对象有别于其他成员的依据。 (3)表示(Representation)。是值域、数据类型、表示方式的组合,必要时也包括计量单位、 字符集等信息。 对象类是我们所要研究、收集和存储相关数据的实体,例如人员、设施、装备、组织、环境、物资等。特性是人们用来区分、识别事物的一种手段,例如人员的姓名、性别、身高、体重、职务,坦克的型号、口径、高度、长度、有效射程等。表示是数据元被表达的方式的一种描述。 表示的各种组成成分中,任何一个部分发生变化都将产生不同的表示,例如人员的身高用“厘米” 或用“米”作为计量单位,就是人员身高特性的两种不同的表示。数据元的表示可以用一些具有表示含义的术语作标记,例如名称、代码、金额、数量、日期、百分比等。 数据元基本模型中,对象类对应于数据模型中的实体、特性和表示对应于数据模型中的属性。 分类 数据元的类型按不同的分类方式可以作如下分类。 1)按数据元的应用范围

西门子S7-300全教程第六章

第六章 S7-300/400的用户程序结构 6.1 用户程序的基本结构 6.1.1 用户程序中的块 操作系统处理起动、刷新过程映像表、调用用户程序、处理中断和错误、管理存储区和处理通信等。用户程序包含处理用户特定的自动化任务所需要的所有功能。 用户程序和所需的数据放置在块中,使程序部件标准化,用户程序结构化,可以简化程序组织,使程序易于修改、查错和调试。块结构显著地增加了PLC程序的组织透明性、可理解性和易维护性。 表6-1 用户程序中的块 块简要描述 组织块(OB)操作系统与用户程序的接口,决定用户程序的结构 系统功能块(SFB)集成在CPU模块中,通过SFB调用一些重要的系统功能,有存储区系统功能(SFC)集成在CPU模块中,通过SFC调用一些重要的系统功能,无存储区功能块(FB)用户编写的包含经常使用的功能的子程序,有存储区 功能(FC)用户编写的包含经常使用的功能的子程序,无存储区 背景数据块(DI)调用FB和SFB时用于传递参数的数据块,在编译过程中自动生成数据共享数据块(DB)存储用户数据的数据区域,供所有的块共享 1.组织块(OB) 控制扫描循环和中断程序的执行、PLC的启动和错误处理等。 (1)OB1用于循环处理,用户程序中的主程序。 (2)事件中断处理,需要时才被及时地处理。 (3)中断的优先级,高优先级的OB可以中断低优先级的OB。 2.临时局域数据 生成逻辑块(OB、FC、FB)时可以声明临时局域数据。这些数据是临时的,局域(Local)数据,只能在生成它们的逻辑块内使用。所有的逻辑块都可以使用共享数据块中的共享数据。3.功能(FC) 没有固定的存储区的块,其临时变量存储在局域数据堆栈中,功能执行结束后,这些数据就丢失了。用共享数据区来存储那些在功能执行结束后需要保存的数据。 调用功能和功能块时用实参(实际参数)代替形参(形式参数)。形参是实参在逻辑块中的名称,功能不需要背景数据块。功能和功能块用IN、OUT和IN_OUT参数做指针,指向调用它的逻辑块提供的实参。功能可以为调用它的块提供数据类型为RETURN的返回值。4.功能块(FB) 功能块是用户编写的有自己的存储区(背景数据块)的块,每次调用功能块时需要提供各种类型的数据给功能块,功能块也要返回变量给调用它的块。这些数据以静态变量(STAT)的形式存放在指定的背景数据块 (DI) 中,临时变量TEMP存储在局域数据堆栈中。 调用FB或SFB时,必须指定DI的编号。在编译FB或SFB时自动生成背景数据块中的数据。一个功能块可以有多个背景数据块,用于不同的被控对象。 可以在FB的变量声明表中给形参赋初值。如果调用块时没有提供实参,将使用上一次存储在DI中的参数。 5.数据块 数据块中没有STEP 7的指令,STEP 7按数据生成的顺序自动地为数据块中的变量分配地址。数据块分为共享数据块和背景数据块。 应首先生成功能块,然后生成它的背景数据块。在生成背景数据块时指明它的类型为背景数

数据类型

数据元: 数据元(DataElement),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型。 分类: 1)按数据元的应用范围 分为通用数据元、应用数据元(或称“领域数据元”)和专用数据元。通用数据元是与具体的对象类无关的、可以在多种场合应用的数据元。应用数据元是在特定领域内使用的数据元。应用数据元与通用数据元是相对于一定的应用环境而言的,两者之间并没有本质的区别,应用数据元是被限定的通用数据元,通用数据元是被泛化的应用数据元,随环境的变化彼此可以相互转化。专用数据元是指与对象类完全绑定、只能用来描述该对象类的某个特性的数据元。专用数据元包含了数据元的所有组成部分,是“完整的”数据元。 2)按数据元值的数据类型 可分为文字型数据元与数值型数据元。例如人的姓名是用文字表示的,属于文字型数据元;人的身高是用数值表示的,属于数值型数据元。 3)按数据元中数据项的多少 可分为简单数据元和复合数据元。简单数据元由一个单独的数据

项组成;复合数据元是由2个及以上的数据项组成的数据元,即由2个以上的数据元组成。组成复合数据元的数据元称为成分数据元。虽然数据元一般被认为是不可再分的数据的基本单元,而复合数据元是由两个以上的数据元组成的,但是在实际应用中复合数据元一般被当作不可分割的整体来使用,所以复合数据元仍然可以看作是数据的基本单元,即数据元。例如数据元“日期时间”是一个复合数据元,表示某一天的某一时刻,它由“日期”和“时间”两个数据元组成。

06第六章表(答案)

第六章表 一、单项选择题 1、Access提供的数据类型中不包括( B )。 A、备注 B、文字 C、货币 D、日期/时间 2、下列关于“是/否”型常量的说法正确的是( A )。 A、是一个逻辑值 B、-1表示假 C、0表示真 D、不属于布尔型 3、Access的表中,下列不可以定义为主键的是( D )。 A、自动编号 B、单字段 C、多字段 D、OLE对象 4、数据类型是( B )。 A、字段的另一种说法 B、决定字段能包含哪类数据的设置 C、一类数据库应用程序 D、一类用来描述Access表向导允许从中选择的字段名称 5、使用ACCESS在数据表的某字段存放图像数据,则该字段应设为哪一种数据 类型( C )。 A、文本型 B、数字型 C、OLE对象 D、二进制型 6、当文本型字段取值超过255个字符时,应改用( B )数据类型。 A、文本 B、备注 C、OLE对象 D、超链接 7、自动编号数据类型一旦被指定,就会永久的与( B )进行。 A、字段 B、记录 C、表 D、数据库 8、货币数据类型等价于具有( D )属性的数字数据类型。 A、整型 B、长整型 C、单精度 D、双精度 9、定义表结构时,不用定义的是( B )。 A、字段名 B、数据库名 C、字段类型 D、字段长度 10、在设置“默认值”时,说法正确的是( D )。 A、输入文本值时,必须加上引号 B、如果设置了默认值,用户就必须使用,不能输入新值来取代 C、默认值不能输入表达式,只能输入文本或字符 D、设置默认值属性时,必须与字段中所设的数据类型相匹配 11、在Access中,向数据库添加数据时,当输入的数据不符合有效性规则时 会弹出一个消息框,这个消息框是通过下面的( B )属性来设置的。 A、标题 B、有效性文本 C、输入掩码 D、默认值 12、在关于输入掩码的叙述中,不正确的是( B )。 A、在定义字段的输入掩码时,Access只为“文本”和“日期/时间”型字段提供向导 B、定义字段的输入掩码时,是为了设置密码 C、输入掩码中的字符9表示可以选择输入数据或空格 D、直接使用字符定义输入掩码时,可以根据需要将字符组合起来 13、创建表时,可以在下列选项中( C )项进行。 A、报表设计器 B、表浏览器 C、表设计器 D、查询设计器 14、使用表设计器定义表中字段时,不是必须设置的内容是( C )。

第六章复合材料在无人飞机上的应用状态

课 题 第六章复合材料在无人飞机上的应用状态 目的与要求明确复合材料在无人飞机上的应用程度和现状 使用复合材料制造无人机是的该机种具有了特别突出的优势 熟悉全复合材料无人机在未来战争、救灾和特殊环境下的应用特点明确复合材料已经成为制造无人机不可或缺的基础 了解复当前国内外无人机的发展状态、应用领域和主要特点 重点使用复合材料制造无人机是的该机种具有了特别突出的优势 熟悉全复合材料无人机在未来战争、救灾和特殊环境下的应用特点 难点明确复合材料已经成为制造无人机不可或缺的基础 了解复当前国内外无人机的发展状态、应用领域和主要特点 教具 复 习提问明确复合材料在无人飞机上的应用程度和现状 使用复合材料制造无人机是的该机种具有了特别突出的优势 新知识点考查明确复合材料在无人飞机上的应用程度和现状 使用复合材料制造无人机是的该机种具有了特别突出的优势 布置 作业 课堂布置 课后回忆熟悉全复合材料无人机在未来战争、救灾和特殊环境下的应用特点明确复合材料已经成为制造无人机不可或缺的基础 备注教员

第六章复合材料在无人飞机上的应用状态第2 页共10 页 美国RQ-4A全球鹰无人机 MFX-2 “柔性蒙皮”变形无人机 图8 尾翼典型结构切面

第六章复合材料在无人飞机上的应用状态第3 页共10 页 1.概述 小型无人飞机结构的主要功能是保持气动外形及舱室形状,承受飞机气动载荷、 发射回收产生的集中载荷以及机载设备的质量力,为机载设备提供一个良好安装平 台。飞机结构在满足强度、刚度的前提下,还应满足重量轻、成本低、工艺性好等 要求。 小型无人机由于其低风险、低成本及总体尺寸较小的特点,使一些新材料、新 式构型与新型结构设计应用成为可能。利用先进复合材料实现结构/功能一体化、采 用夹芯壁板的硬壳式结构,减少机体内部骨架支持的结构形式,可以提高机体内可用 空间,增大设备空间、油量,同时降低结构重量系数,另外,整体壁板的结构形式, 便于实现复合材料结构/功能一体化。复合材料优良的性能、显著的减重效益及良好 的整体成型工艺性,为小型无人机减轻重量和降低制造成本提供了更大的可能性, 使其逐渐成为了小型无人飞机的主体材料。 2.小型无人机新型结构型式 2.1.主要结构新型构型与新型结构设计 小型无人机采用泡沫夹层结构等新式构型,泡沫夹层结构重量轻、具有较大的 弯曲刚度和强度。泡沫夹层结构是承载效率较高的结构形式,对于小型无人机,不仅 一般结构可以采用,主要承载结构也可采用,而且,一般情况下,面板采用玻璃纤维 复合材料,就能满足强度要求。 泡沫夹层结构由上下薄复合材料面板、泡沫芯和胶粘剂组成,胶粘剂将面板和 芯材胶接成一个整体,如图 1 所示。(面板主要承受面内拉伸、压缩和面内剪切; 芯材支持面板承受垂直于面板的压缩应力,并能防止面板在侧压载荷下产生屈曲(芯 材承受压缩和剪切载荷)。 泡沫夹层结构薄复合材料面板根据载荷大小可选用玻璃布或碳纤维: 1) 玻璃布成本低,粘接成型工艺性好,可在常温下进行粘接固化,但强度性能 相对要差一些,适用于载荷较小、重量/ 刚度要求较低的部件; 2) 碳纤维成本相对较高,需高温高压固化,热压罐成型,工艺复杂,但碳纤维强度 性能较好,适用于载荷较大、重量/ 刚度要求高的部件。 泡沫芯可选用NOMEX 蜂窝、ROHACELL 泡沫板和硬质聚氨脂泡沫: 1)NOMEX 蜂窝夹芯优点是比强度、比刚度大,价格便宜,工艺方法成熟, 缺点是制造曲板较困难,蜂窝与形面贴合较难,需铣切加工,因蜂窝较软,不易装夹, 加工困难;蜂窝为开畅式结构,蜂窝内易积水等液体,蜂窝与内、外玻璃钢面板胶接 成形后,不易排除,在高空底温环境下结冰,易涨破面板,造成面板脱胶,从而破坏 壁板蒙皮结构;蜂窝与壁板胶接面较小,蜂窝内需预浸一定厚度的胶粘剂,才能保证 胶接强度,蜂窝内预浸的胶粘剂的厚度不容易控制,因此,胶接重量难以控制,这是 蜂窝夹芯结构超重的主要因素之一。 2)在相同密度下,ROHACELL泡沫是强度和刚度最高的泡沫材料。 ROHACELL 泡沫板为闭孔结构,各向同性,平面和横向、法向都有较高的剪切模量, 横向、法向变形小;100%闭孔泡沫,不易受潮和进水;可加温软化成型与面板贴合, 成型性能好;ROHACELL 泡沫板为闭孔结构,低树脂吸收率,而降低树脂吸收率, 在一定程度上会优化夹层结构的重量,减少面板和芯材之间的树脂量,使之与壁板胶 接面大,胶粘剂厚度均匀,从而提高胶接强度。

基本数据类型

S7-300的数据类型分以下三种: 基本数据类型、复合数据类型和参数类型。 一、基本数据类型 1、位(bit) 常称为BOOL(布尔型),只有两个值:0或1。 如:I0.0,Q0.1,M0.0,V0.1等。 2、字节(Byte)一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。范围:00~FF(十进制的0~255)。 3、字(Word) 相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,字为16位。 如:IW0是由IB0和IB1组成的,其中I是区域标识符,W表示字,0是字的起始字节。 需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。 字的范围为十六进制的0000~FFFF(即十进制的0~65536)。 在编程时要注意,如果已经用了IW0,如再用IB0或IB1要特别加以小心。 4、双字(Double Word) 相邻的两个字(Word)组成一个双字,来表示一个无符号数。因此,双字为32位。 如:MD100是由MW100和MW102组成的,其中M是区域标识符,D表示双字,100是双字的起始字节。 需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。 双字的范围为十六进制的0000~FFFFFFFF(即十进制的0~4294967295)。 在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特别加以小心。 以上的字节、字和双字数据类型均为无符号数,即只有正数,没有负数。 5、16位整数(INT,Integer) 整数为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-32768~32767。 6、32位整数(DINT,Double Integer) 32位整数和16位整数一样,为有符号数,最高位为符号位,1表示负数,0表示正数。 范围为-2147483648~2147483647。 7、浮点数(R,Real) 浮点数为32位,可以用来表示小数。浮点数可以为:1.m×2e ,其存储结构如图所示:

s7-300的数据类型

S7-300的数据类型分以下三种:基本数据类型、复合数据类型和参数类型。 一、基本数据类型 1、位(bit) 常称为BOOL(布尔型),只有两个值:0或1。如:I0.0,Q0.1,M0.0,V0.1等。 2、字节(Byte) 一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。范围:00~FF(十进制的0~255)。 3、字(Word) 相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,字为16位。如:IW0是由IB0和IB1组成的,其中I是区域标识符,W表示字,0是字的起始字节。需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。字的范围为十六进制的0000~FFFF(即十进制的0~65536)。在编程时要注意,如果已经用了IW0,如再用IB0或IB1要特别加以小心。 4、双字(Double Word)

相邻的两个字(Word)组成一个双字,来表示一个无符号数。因此,双字为32位。如:MD100是由MW100和MW102组成的,其中M是区域标识符,D表示双字,100是双字的起始字节。需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。双字的范围为十六进制的0000~FFFFFFFF(即十进制的0~4294967295)。在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特别加以小心。 以上的字节、字和双字数据类型均为无符号数,即只有正数,没有负数。 5、16位整数(INT,Integer) 整数为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-32768~32767。 6、32位整数(DINT,Double Integer) 32位整数和16位整数一样,为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-2147483648~2147483647。 7、浮点数(R,Real) 浮点数为32位,可以用来表示小数。浮点数可以为:1.m×2e,其存储结构如图所示:

第二章 数据类型(3)

C语言初学者入门讲座第二讲数据类型(3) 基本运算符和表达式 运算符的种类、优先级和结合性 C语言中运算符和表达式数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。这也是C语言的主要特点之一。 C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+ +)、自减(--)共七种。 2.关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。 3.逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 5.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&

=,|=,^=,>>=,<<=)三类共十一种。 6.条件运算符 这是一个三目运算符,用于条件求值(?:)。 7.逗号运算符 用于把若干表达式组合成一个表达式(,)。 8.指针运算符 用于取内容(*)和取地址(&)二种运算。 9.求字节数运算符 用于计算数据类型所占的字节数(sizeof)。 10.特殊运算符 有括号(),下标[],成员(→,.)等几种。 优先级和结合性 C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。 算术运算符和算术表达式基本的算术运算符 1.加法运算符“+”加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+ 8等。具有右结合性。 2.减法运算符“-”减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。

第六章金属基复合材料

复合材料习题 第六章 一、简述铝基复合材料的制造 常用的工艺有两种,一种是纤维与基体的组装压合和零件成型同时进行;一种先加工成复合材料的预制品,然后再将预制品制成最终形状的零件。制造过程可分为三个阶段:纤维排列、复合材料组分的组装压合和零件层压。 (1)挥发性粘合剂工艺 纤维排列有单丝滚筒缠绕和多丝排列连续条带。粘合剂必需在热压结之前排除。 (2)等离子喷涂工艺 纤维排列如前所述,只是不喷涂粘合剂,而是将铝合金粉注入到灼热的等离子气流中溶化喷涂。 (3)还有电成型、金属粉末成型、铸造和纤维缠绕配合等离子喷涂及烧结等工艺。 二、简述金属基功能复合材料的应用。 用于微电子技术的电子封装:基体主要是纯铝和纯铜,高含量碳化硅颗粒增强铝基(铜基)复合材料(SiC p/Al、Cu),高模量石墨纤维增强铝基(铜基)复合材料(C f/Al、Cu),金刚石颗粒或多晶金刚石纤维/铝(铜)复合材料,硼纤维/铝复合材料等。 用于耐电弧烧蚀的集电材料和电触头材料:碳(石墨)纤维、金属丝、陶瓷颗粒增强铝、铜、银及其合金等金属基复合材料。 用于耐腐蚀的电池极板材料:C f/Al复合材料。 用于耐磨零部件:碳化硅、氧化铝、石墨颗粒、晶须、纤维等增强铝、镁、铜、锌、铅等金属基复合材料。 三、石墨纤维增强金属基复合材料的类型是什么? 碳纤维、石墨纤维和许多金属缺乏相容性,目前相容性较好的有铝镁镍钴等,和钛等其它金属复合时会形成碳化物,故需进行表面处理。碳纤维和某些材料复合会有特殊性质,如与铜,铝和铅等复合有高的强度,导电性,低摩擦性,低膨胀性(尺寸稳定性)等。与碳复合的金属除铝是主要的外,还有铜镁铅锌锡铍等。Cf/Al:对纤维进行增强与铝的润湿性处理很关键。这样在热压时能很好结合。涂敷金属或非金属层是可期待的改性方式。Cf/Ni:电沉积热压是主要方法。但低压时获得的强度更高,原因是高压损伤了纤维。 (1)石墨-铝复合材料 石墨-铝复合材料的研究是在上世纪60年代,当石墨纤维参量20%-40%时,复合材料强度大大超过了单纯的合金。为了改善纤维润湿性,对石墨纤维进行涂层包覆,发现钽可能成为理想的涂层。此外,真空蒸发工艺能成功的将铝沉积到纤维上,但有遮蔽的问题;连续铸造法将涂镍的纤维连续通过熔融铝液,并在模中固结。 (2)石墨-镍复合材料 开始于上世纪的70年代,在石墨纤维上电镀镍得丝束后热压。之后研究了不同取向的多层正交多层板。应用电沉积工艺是生产石墨-镍复合材料的最佳工艺。 (3)其他石墨增强复合材料 石墨-铜复合材料具有很长的研究历史,工艺主要是电镀法;石墨-镁复合材料仍处于发展的

浅谈oracle复合数据类型

浅谈oracle复合数据类型 --本文档可以直接拷贝运行。 /* oracle复合数据类型 PL/SQL有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。*/ /* 一、记录类型 类似C语言中的结构,有两种定义方式:显式定义和隐式定义。 */ create table test ( id varchar2(20), mc varchar2(60) ); insert into test values('111','11111'); insert into test values('222','22222'); insert into test values('333','33333'); insert into test values('444','44444'); insert into test values('555','55555'); insert into test values('666','66666'); commit; /* 1.1、显示定义记录 */ set serverout on declare type t_record is record ( id test.id%type, mc test.mc%type ); var_record t_record; counter number default 0;

begin for row_test in (select id,mc from test) loop counter := counter + 1; var_record.id := row_test.id; var_record.mc := row_test.mc; dbms_output.put_line('var_record:'||var_record.id||'---'||var_record.mc); dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc); dbms_output.put_line('================loop '||counter||' times.'); end loop; exception when others then dbms_output.put_line(sqlcode||sqlerrm); end; / /*有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性,比如游标FOR循环或触发器中的ld 和:new记录。*/ /* 1.2、隐式定义记录 */ 隐式定义记录中,我们不用描述记录的每一个域,在声明记录变量时使用%ROWTYPE命令定义与数据库表,视图,游标有相同结构的记录。 declare t_record1 test%rowtype; cursor cur_test(v_id in varchar2) is select id,mc from test where id <= v_id; t_record2 cur_test%rowtype; begin for row_test in cur_test('333') loop t_record1.id := row_test.id; t_record1.mc := row_test.mc; t_record2.id := row_test.id; t_record2.mc := row_test.id; dbms_output.put_line('t_record1:'||t_record1.id||'---'||t_record1.mc); dbms_output.put_line('t_record2:'||t_record2.id||'---'||t_record2.mc); dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc); dbms_output.put_line('================loop '||cur_test%rowcount||' times.'); end loop;

数据类型

数据类型 数据类型2010-06-30 10:22类型在本质上是一种数据的名称。当声明一 个变量时,必须指定它的类型;类型决定了它的取值范围和可以进行的操作(运算)。每个表达式返回一个特定类型的值,函数也是如此;大多数函数和过程要求指定类型的参数。Object Pascal是一种'强类型'语言,也就是说,它对各 种数据类型加以区分,并且不总是允许你用一种数据类型替代另一种。这通常 是有好处的,因为它使编译器能聪明地处理数据并且更深入地验证你地代码, 可以避免产生难于调试的运行时错误。但当你需要更多灵活性的时候,也有办 法可以绕过强类型限制,它们包括强制类型转换(typecasting)、指针、变体类型(Variant)、记录中的变体部分(Variant parts in records)和绝对地址变量。数据类型就是你把一个二进制数值以什么类型的格式读取和使用常用的类型可 分为:简单类型Integer types(整数类型)整数类型表示所有数字的一个子集。一般(generic)整数类型是Integer和Cardinal,只要可能就尽量使用它们, 因为它们对依赖的CPU和操作系统作了优化。下表给出了32位编译器下它们的取值范围和存储格式:类型取值范围格式Integer-2147483648.2147483647 32 位有符号Cardinal 0.4294967295 32位无符号基本整数类型包括Shortint、Smallint、Longint、Int64、Byte、Word和Longword。类型取值范围格式Shortint-128.127 8位有符号Smallint-32768.32767 16位有符号Longint-2147483648.2147483647 32位有符号Int64-2^63.2^63-1 64位有符号Byte 0.255 8位无符号Word 0.65535 16位无符号Longword 0.4294967295 32位无 符号通常,对整数类型进行(算术)运算返回一个Integer类型(当前相当于32 位的Longint)。只有当对一个Int64类型的整数运算时才返回Int64类型Character types(字符类型)基本字符类型是AnsiChar和WideChar。AnsiChar 是8位字符集,它们将依照本地字符集的顺序排列,这可能是多字节的。AnsiChar原先是根据ANSI字符集建立的,但现在扩展为可以指定本地字符集。WideChar使用多于一个字节来表示每个字符。在当前实现中,WideChar依据Unicode字符集(要意识到它的实现将来可能会改变),使用一个字的宽度(16-bit)来存储字符。开头的256个Unicode字符对应于ANSI字符。一般字符类型是Char,它相当于AnsiChar。因为Char的实现可能被迫改变,所以,在需要 处理不同大小的字符时,应该使用SizeOf而不要使用硬编码常数,这通常是个

第六章ORACLE复习提纲

第六章PL/SQL基础 一、PL/SQL块 1、分类 ●无名块:动态构造,只能执行一次。 ●子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后 可以在其他程序中调用它们。 ●触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。 2、无名PL/SQL块结构 由声明部分、执行部分、异常处理部分三个部分组成,执行部分是必须的。 DECLARE /* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/ BEGIN /* 执行部分: 过程及SQL 语句, 即程序的主要部分*/ EXCEPTION /* 执行异常部分: 错误处理*/ END; 3、PL/SQL写法 语句可以写在多行上 语法单位可以分为分隔符、标识符(包括保留字)、文字常量、注释 分隔符是有特殊意义的简单或复合符号,如: + - * / = @(访问远程数据库的符号) ;(语句结束符)<> != || --(单行 注释)/* */(注释开始和结束):= 标识符 文字常量: 字符和日期文字常量必须使用单引号括起 数字常量可以是简单数值或科学计数法表示的数值 XeY表示X*10Y

二、使用变量 1、标识符 标识符名不能超过30个字符; 第一个字符必须为字母; 不分大小写; 不能用‘-’(减号); 不能是SQL保留字。 注意:一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。 变量名不要与数据库中的列重名 本地变量或形参的名字优先于表名 数据库列名优先于本地变量的名字 2、数据类型 变量分为标量类型、复合类型、LOB类型和引用类型 1)标量数据类型 保存单个值 没有内部组件 CHAR[(maximum_length)]最大32767字节 V ARCHAR2(maximum_length)最大32767字节 LONG 32760 字节 LONG RAW 32760 字节 RAW(长度) 最大32760字节 NUMBER[(precision,scale) BINARY_INTEGER 符号数 PLS_INTEGER符号数,占用内存更少,运算速度快 BOOLEAN,只能保存TURE、FALSE和NULL 2)BLOB、CLOB、BFILE,保存了大对象的定位器(一个指向大对象存贮位置 的指针) 3)复合数据类型

第六章复合数据类型

第六章 复合数据类型 一个变量是由四个要素组成的: 一个名字、一个属性、一个关联和一个值。 名字指命名变量 的标识符; 属性指变量可以存放那种类型的值; 关联指存放变量的内存位置; 值指该内存位 置当前时刻存放的数据。 应该认识到这里的值是可能改变的, 但任何时候在盒子里总有一个值 (我们将无定义的随机 值也当做一个特殊的值) 。 根据变量在赋值运算中的使用方式,将变量的关联部分称为左值,变量的值部分称为右值。 对于表达式而言, 求值结果也存在是否可作为左值使用的问题。 一般情况下, 表达式的求值 结果作为右值使用,但如果一个表达式的求职结果不是 void 类型,并且指派了一个变量, 则该表达式可作为左值。 ((i<0)?i:j)=1 (i+j) =1 6.2 指针类型 变量以两种方式被使用:作为一个关联的名字和作为一个值的名字。 对变量的访问也有两种方式:直接访问和间接访问。 在C++中实现对变量的间接访问的方法是: 先安排相关变量,专门用于存放变量地址。 要间 接访问时, 先从这些变量获得待访问的变量的地址, 然后再按所获得的地址去访问要访问的 变量。 指针是存放其他变量地址的变量, 所以从效果上看它们指向这些数据。 指针使得数据不一定 非得与某一特定变量名字相关联,指针可以指向一个没有名字的数据值。 6.2.1 指针的声明 int age = 30; //声明一个存放年龄的整数类型变量 让C++编译程序知道有一个新的变量,该变量的名字是标识符 age,编译程序会为它分配 2 个字节的存储空间(假如我们使用的机器上 int 用两个字节表示)并将 30放在这些字节中, 并且编译程序知 道这些字节中存放的是整数类型数值而不是浮点类型或其他类型数据。 不直接访问age 的存储空间地址,而是用 age 这个名字访问器其存储空间。 ptr 常用作 pointer 的缩写 指针类型是在其他数据类型后加一个类型修饰符“ *”,这个类型被称为指针的基类型。如 int * age_ptr; 注意“ *”仅用于修饰类型,而不是变量名字的一部分。 一个指针变量占用的存储空间大小取决于机器的内存寻址方式。 指针age_ptr 的类型(int*)指明age_ptr 仅能指向整数类型的值,而不能指向字符类型、浮点 类型或其他类型的值,即age_ptr 中存放的地址所指向的存储空间中只可存放整数类型的值。 将“*”与类型名写在一起表明 int* 是一种复合类型,但要注意 Int * p,q; 声明的却是一个整数类型的指针变量 P 和一个整数类型变量 q 6.1 变量和赋值的进 步讨论 .//合法的赋值运算 //不合法的赋值运算

相关文档
最新文档