文档库 最新最全的文档下载
当前位置:文档库 › 第三章 数组、簇和波形

第三章 数组、簇和波形

第三章 数组、簇和波形
第三章 数组、簇和波形

第三章 数据类型:数组、簇和波形

3.1 概述

数组是同类型元素的集合。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素。可以通过数组索引访问其中的每个元素。索引的范围是0到n – 1,其中n 是数组中元素的个数。图3-1所显示的是由数值构成的一维数组。注意第一个元素的索引号为0,第二个是1,依此类推。数组的元素可以是数据、字符串等,但所有元素的数据类型必须一致。

图3-1 数组示意图

簇(Cluster)是另一种数据类型,它的元素可以是不同类型的数据。它类似于C语言中的stuct。使用簇可以把分布在流程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤程度。减少子VI的连接端子的数量。

波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。

3.2 数组的创建及自动索引

3.2.1 创建数组

一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。

如果需要用一个数组作为程序的数据源,可以选择Functions?Array?Array Constant,将它放置在流程图中。然后再在数组框中放置数值常量、布尔数还是字符串常量。下图显示了在数组框放入字符串常量数组的例子。左边是一个数组壳,中间的图上已经置入了字符串元素,右边的图反映了数组的第0个元素为:”ABC”,后两个元素均为空。

图3-1 数组的创建

在前面板中创建数组的方法是,从Controls模板中选择Array & Cluster,把数组放置在前面板中,然后选择一个对象(例如数值常量)插入到数组框中。这样就创建了一个数值数组。

也可以直接在前面板中创建数组和相应的控制对象,然后将它们复制或者拖曳到流程图

中,创建对应的常数。

还有很多在流程图中创建和初始化数组的方法,有些功能函数也可以生成数组。

3.2.2 数组控制对象、常数对象和显示对象

通过把数组与数值、布尔数、字符串或者簇组合在一起,可以在前面板和流程图中创建任何一种控制对象、常数对象和显示对象。数组元素不能是数组、图表或者图形。如果您想查看一些数组的例子,请查看Examples\General\arrays.llb中的例子。

3.2.3 自动索引

For循环和While循环可以自动地在数组的上下限范围内编索引和进行累计。这些功能称为自动索引。在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。循环会对一维数组中的标量元素,或者二维数组中的一维数组等编制索引。在输出通道也要执行同样的工作――数组元素按顺序进入一维数组,一维数组进入二维数组,依此类推。

在默认情况下,对于每个连接到For循环的数组都会执行自动索引功能。可以禁止这个功能的执行,方法是用鼠标右键单击通道(输入数组进入循环的位置),在快捷菜单中选择Disable Indexing。

练习 3-1创建一个自动索引的数组

目的:使用 For 循环的自动索引功能创建数组,并用一个图形(Graph)显示该数组。 前面板

图3-2 练习3-1的面板

1.打开一个新的前面板。

2.选择Controls?Array & Cluster,在前面板中放置一个数组。设置它的

标签为Waveform Array。

3.选择Controls?Numeric,在数组框中插入一个数字式显示

对象。如右图所示。它用于显示数组的内容。

4.选择Controls?Graph,在前面板中放置一个波形图。设置

它的标签为Waveform Graph。

5.隐藏图例和模板。

6.用鼠标右键单击图形,并在快捷菜单中取消选中 Y Scale?Autoscale Y,禁止自动坐标功能。

7. 使用文本工具,把Y 轴的范围改为-0.5到1.5。

流程图

8. 按照下图创建流程图。

图3-2 练习3-1的流程图

z 由Functions?Select a VI…寻找LabVIEW\activity 目录下的Generate Waveform VI ,它的作用是返回波形中的某一点。这个VI 需要输入一个索引,我们将循环周期连接到这个输入。

z 注意Generate Waveform VI 连出来的连线在循环边界变成一个数组时会变粗,正是在这个边界处形成了一维数组。

z For 循环会自动累计边界内的数组。这种功能叫做自动索引。在这个例子中,连接到循环计数输入的数值常数令For 循环创建了一个由100个元素组成的数组。

z Bundle 函数( Functions? Cluster )——将图块中的各个组件组合成一个簇,在正确连接以前需要改变该函数的图标的大小。将移位工具放在图标的左下角。变形工具会变成如左图所示,拖曳鼠标直到出现第三个输入端子。

z 数值常数( Functions?Numeric)——三个数值常数用于设置For 循环执行的周期数N=100,初始X=0和delta X=1。

9. 从前面板执行该VI。该VI 将把自动索引后的波形图数组显示在波形图中。

10. 把 X 的delta 值改为0.5,X 的初始值改为20。再次执行该VI。注意,波形图现在同样显示100个点,而每个点的初始值为20,X 的delta 值为0.5(见X 轴)。

11. 只需在显示器中输入元素的索引号就可以查看波形数组中的任何元素。如果输入的数比数组的元素个数大,那么显示器将变暗,表示您没有为该元素设置索引。

如果需要一次查看多个元素,可以通过改变数组显示对象的大小来实现。 把定位工具放置在数组框的右下角。工具将变成右图所示的变形工具。当工具变形时,用鼠标拖曳数组的右边或者下边。数组现在就可以按照元素索引的上升顺序显示多个素,以某个与指定索引对应的元素开始,如下图所示。

图3-3 练习3-1中多个数组元素的同时观察

在前面的流程图中,您为波形图指定了初始的X 值和delta X 值。默认的X 初始值是0,

delta X 值是1。这样,也可以把波形数组直接连接到波形图端子, 而无需指定初始的X 值和delta X

值,如图3-4所示。

图3-4 练习3-1使用默认X 及Delta X 时简化后的流程图

12. 按上图删除 Bundle 功能函数和它所连接的常数对象。方法是用移位工具选择该功能函数和连接的常数对象,按下。再选择Edit?Remove Bad Wires。按照上图完成流程图的连线。

13. 执行该VI。注意初始的X 值是0,delta X 值是1。

z 多图区图形

可以创建含有多条曲线的图形,方法是创建一个数组,用它来汇集传给单图区图形的类型的数据元素。

图3-5 练习3-1多图区图形的流程图

14. 按照上图创建流程图。 z 正弦函数(Functions?Numeric?Trigonometric )——在这里,它用于在For 循环中创建一个由数据点组成的数组,表示一个正弦波周期。

z Pi 常数(Functions?Numeric?Additional Numeric Constants ) z Build Array (Functions?Array )——在这里,它用于创建合适的数据结构(一个二维数组),在波形图中绘制两条曲线。。用移位工具拖曳边角可以增大该函数的面积,创建两个输入端子。

15. 返回前面板,执行该 VI。注意同一个波形中的两个图区。默认情况下,它们的X 初始值都是0,delta X 初始值都是1。下图是该程序的运行结果(前面板未改动)。

16. 把该VI 保存为LabVIEW\Activity 目录中的Graph Waveform Arrays.vi。

17. 可以修改图形中的某个图区的外观。方法是,用鼠标右键单击这个图形,再从弹出菜单选择对应的图例。

Array

图3-6 练习3-1多图区图形的面板显示

练习 3-1 结束。

在上面这个例子中,由于计算端子连接了一个值为100的常数对象,所以 For 循环将执行100次。下面这个例子显示了另外一种控制循环执行次数的方法。

更详细的例子建议调阅Examples》Fundamentals 》Graphs and Charts》Graph Examples》Waveform Graph 例子。

练习 3-2 对输入数组使用自动索引功能

目的:打开并执行一个VI ,它将在一个For 循环中使用自动索引功能处理一个数组。 1. 选择File?Open …,打开Examples\General\arrays.llb 中的Separate Array Values VI 。

2. 打开流程图。下面的示意图显示的是在TRUE 和FALSE 时的情况。

Initialize Array

Build Array

Initialize Build Array

图3-7 练习3-2的流程图

注意,Input Array 引出的连线与For 循环外的粗线不同,表示这是一个数组,而循环

内部的细线则表示这是一个数组元素。 数组元素在每个循环期间将自动编号。

z用自动索引功能设置 For 循环的计数器

注意,计数器端子还没有连线。当您对某个进入For循环的数组使用自动索引功能时,循环就将根据数组的大小执行相应的次数,这样就无需连接某个值到计数器的端口。如果对一个以上的数组使用自动索引功能,或者在使用自动索引功能之外还需要设置计数器时,实际的循环次数将是其中最小的数。

3.执行该VI。在输入的八个数中,可以看到4个属于正数数组,另外4个属于负数数组。

4.从流程图中将一个值为5的常数对象连接到For 循环的计数器端子。执行该 VI。可以看到尽管输入数组仍然有八个元素,但是3个位于正数数组,另外2个位于负数数组。这说明,如果设置了N并开启了自动索引功能,那么实际循环的次数将取较小的数。

5.关闭该VI,不要保存任何修改。

注:练习 3-2的算法说明

下面是一段伪代码,解释上面的算法,假定输入数组为A(已赋值),B(正数)、C(负数)。Sbr 、Scr分别是与B数组、C数组对应的右寄存器数组,Sbl 、Scl分别是与B数组、C数组对应的左寄存器数组,size运算为测数组实际大小,ins运算为将一个数插入数组中最左边的空位。

B=0 初始化

C=0

K=size(A(.)) 测A数组大小

For i=0 to k-1

p=A(i) 取第I个元素值

if p>=0 then

Ins p,Sbr 将p值插入右寄存器

Else

Ins p,Scr

end if

Sbl=Sbr 右寄存器值送给左寄存器

Scl=Scr

Next i

B=Sbr 右寄存器值送到正数组

C=Scr

Print B 显示

Print C

End

练习 3-2结束。

3.3 数组功能函数

LabVIEW提供了很多用于操作数组的功能函数,位于Functions?Array中。其中包括Replace Array Element,、Search 1D Array、Sort 1D Array、Reverse 1D Array和 Multiply Array Elements等等。

z创建数组——Build Array函数(Functions?Array),用于根据标量值或者其他的数组创建一个数组。

开始时,Build Array函数具有一个标量输入端子。您可以根据需要向该功能函数中加入任意数量的输入,输入可以是标量或者数组。如果要添加其他的输入,用鼠标单击函数的左侧,在弹出菜单中选择Add Element Input或者Add Array Input。还可以用变形工具来增大节点的面积(把移位工具放置在某个对象的边角就会变成变形光标)。也可以使用变形光标或者选择Remove Input来删除输入。

下图显示了利用流程图中的常数对象的值创建和初始化数组的两种方法。左侧的方法是,将5个字符串常数放入一个一维字符串数组中。右侧的方法是,将三组数值常数放入三个一维数值数组,再将这三个数组组成一个二维数组。这样最后产生的是一个3x3的数组,三列分别是3, 4, 7; –1, 6, 2; 5, –2, 8.。

还可以通过结合其他的含有标量元素的数组来创建数组。例如,假设有两个数组,三个标量元素,可把它们组成一个新的数组,顺序是:数组1,标量1,标量2,数组2,标量3。

z初始化数组(Initialize Array)——用于创建所有元素值都相等的数组。下图

中,该功能函数创建了一个一维数组。

元素输入端子决定每个元素的数据类型和数值,维长度输入端子决定数组的长度,例如,假设元素类型是长整型,值为5,维长度为100,那么创建的数组是一个一维的、由100个值为5的长整型元素组成的数组。也可以从前面板控制端子、流程图常数或者程序其他部分的计算结果得到输入。

创建和初始化一个多维数组的方法是,用鼠标右键单击函数的右下侧,在弹出菜单中选择Add Dimension。还可以使用变形光标来增大初始化数组节点的面积,为每个增加的维添加一个维长度输入端子。也可以通过缩小节点的方法来删除维,即从函数的弹出菜单中选择Remove Dimension,或者使用变形光标。下面的示意图显示了怎样初始化一个三维数组。

如果所有的维长度输入都是0,该函数会创建一个具有指定数据类型和维数的空数组。z数组大小——Array Size函数,返回输入数组中的元素个数。

z数组子集(Array Subset)——选取数组或者矩阵的某个部分。

该函数可以返回从某个指针开始的部分数组,并包括了长度元素。下图显示了一些数组子集的例子,注意,数组索引从0开始。

z索引数组(Index Array)——用于访问数组中的某个元素。

下图显示了一个索引函数的例子,它用于访问数组中的第三个元素。注意,因为第一个元素的索引为0,所以第三个元素的索引是2。

将一个二维数组与Index Array函数相连,Index Array就会含2个索引端子。将一个三维数组与Index Array函数相连,Index Array就会含3个索引端子。余类推。可以使用的索引端的符号是一个黑方快,被禁止使用的索引端(Disable Indexing)是一个空心的小方框。当给一个被禁止使用的索引端连接上一个Constant 或 Control是它会自动变为黑方快,即变为可以索引,相反原来一个可以使用的索引端上连接的Constant 或 Control被删去时,索引端符号会自动变为空心的小方框,即变为禁止使用。

也可以按照任何维的组合提取子数组,下面的示意图显示了怎样从一个二维数组中提取一个一维的行或者列数组。

还可以从一个三维数组中提取一个二维数组,方法是禁止两个索引端子,或者通过禁止一个索引端子提取一个一维数组。下图显示了从三维数组提取数组的各种方法。

下面的规则对使用剪切数组进行了规定:

输出对象的维数必须等于被禁止的索引端口的数目。例如

0个索引端口被禁止=标量元素

1个索引端口被禁止=一维元素

2个索引端口被禁止=二维元素

启动的端子所连接的数值必须指定输出元素。

这样,您就可以理解,上图中左下方的例子的作用是,利用0列和3行的所有元素产生一个一维数组,而右上方的例子的作用是利用第一帧中的所有元素产生一个二维数组。新的第0个元素是与原有元素最近的元素。

练习 3-3 使用创建数组功能函数

目的:使用创建数组函数,把一些元素和输出组织成一个更大的数组。

图3-8 练习3-3的面板和框图

1.按照图3-8创建一个前面板。

2.从Controls?Numeric模板中选择一个数字控制对象放置在前面板中,设置它的标签为scalar 1。

3.复制并粘贴该数字显示对象,创建两个新的对象,并分别设置它们的标签为scalar 2和scalar 3。

4.创建一个数字控制对象的数组,设置它的标签为array 1。复制并粘贴它,创建一个新的数组,设置它的标签为array 2。

5.在array 1、scalar 1、 scalar 2、scalar 3、array 2中输入数值1到9。

6.创建流程图。选择Functions?Array,在流程图中放置一个Build Array功能函数。用定位工具增大函数额面积,以容纳5个输入。

7.把数组和标量与Build Array连接起来。创建输出的一维数组,它由 array 1、scalar 1、 scalar 2、array 2、scalar 3中的元素所组成,如图所示。

8.执行该VI。可以看到array 1、scalar 1、 scalar 2、scalar 3、array 2中的数值出现在同一个一维数组中。

9.保存该VI为LabVIEW\Activity目录下的Build Array.vi。

练习3-3结束。

3.4 什么是多态化(Polymorphism)?

多态化是指一种函数功能,即可以协调不同格式、维数或者显示的输入数据。大多数LabVIEW的函数都是多态化的。例如,图3-9给出了Add函数的一些多态化组合。

图3-9 多态化组合的例子

第一个组合中,两个标量相加,结果还是一个标量。第二个组合中,该标量与数组中的每个元素相加,结果是一个数组。数组是数据的集合。第三个组合中,一个数组的每个元素被加到另一个数组的对应元素中。您还可以使用其他的组合,例如数值簇或者簇数组。

可以把这些准则应用到其他的G语言函数或者数据类型。G语言函数对于各种情况都具有多态性功能。有些函数接受数值和布尔输入,而有些函数接受其他任何数据格式的组合。如果您想了解更多关于多态化的知识,请参阅Online Reference?Function and VI Reference。

3.5 簇

3.5.1 创建簇控制和显示

在前面板上放置一个簇壳(Cluster shell)就创建了一个簇。

然后你可以将前面板上的任何对象放在簇中。例如数组,你也

可以直接从Control 工具板上直接拖取对象堆放到簇中。一个簇

中的对象必须全部是Control,或全是Indicator,不能在同一个

簇中组合Control与Indicator,因为簇本身的属性必须是其中之

一。一个簇将是Control或Indicator,取决于其内的第一个对象

的状态。如果需要可以使用工具重置簇的大小。右图所示是一

个含4个Control的簇。也可以在流程图上用类似的方法创建簇

常数。

如果你要求簇严格地符合簇内对象的大小,可在簇的边界上弹出快速菜单选择自动定义大小(Autosizing)

簇的序(Order)

簇的元素有一个序,它与簇内元素的位置无关。簇内第一个元素的序为0,第二个是1,等等。如果你删除了一个元素,序号将自动调整。如果你想将一个簇与另一个簇连接,这两个簇的序和类型必须同一。

如果想改变簇内元素的序,可在快速菜单中选择ReOrder Controls In Claster,这时会出现一个窗口,在该窗口内可以修改序。

3.5.2 使用簇与子VI传递数据

一个VI的连接窗口最大有28个端子,如果你不希望使用全部28个端子传递数据,这既烦琐又易出错。通过把控制或显示对象捆绑成一个簇的方法,仅使用一个端子就可以实现

该功能。

z 捆绑(Bundle)数据

Bundle 功能将分散的元件集合为一个新的簇,或允许你重置一个已有的簇中的元素。可以用位置工具拖曳其图标的右下角以增加输入端子的个数。

最终簇的序是取决于被捆绑的输入的顺序。

右图中Bundle 图标中部的Claster 端子用于用新元素重置原簇中的元素。

z

分解(Unbundle)簇

Unbundle 功能是Bundle 的逆过程,它将一个簇分解为若干分离的元件。如果你要对一个簇分解,就必须知道它的元素的个数。LabVIEW 还提供一种可以根据元素的名字来捆绑或分解簇的方法,稍后介绍。

练习 3-4 簇

目的:学习创建簇、分解簇,再捆绑簇并且在另一个簇中显示其内容。

Not

stop 图3-10 练习3-4的面板和框图

1.打开前面板,创建一个簇壳(Array & Cluster palette ),标签改为Input Cluster ,拖曳至

适当大小。

2.在这个簇壳中放置一个数字Control ,两个布尔开关,和一个串Control 。

3.仿照以上步骤,创建Output Cluster 如上。注意将各Control 改为相应的indicator 。 4.用快速菜单查看两个簇的序是否一致,若有差别,改之。

5.在前面板上设置一个[STOP]按钮。注意其缺省值为FALSE ,不要改变它的状态。 6.建立如上面所示的流程图。注意在[STOP]按钮与循环条件端子之间接入了一个NOT 函

数,因为按钮缺省值为FALSE,经NOT函数后变为TRUE,这就意味着当按钮状态不变时,循环继续执行,相反一旦按钮动作,则循环终止。在6i版本中这个设置可以简化,不必使用NOT函数,直接将[STOP]按钮与循环条件端子相连,然后用鼠标右键点击循环条件端子,选择stop if true即可。结果如右图所示。

7.返回前面板并运行VI。在输入簇中输入不同的值观察输出。

8.关闭并保存程序。Cluster Exercise.vi

练习 3-4 结束

3.5.3 用名称捆绑与分解簇

有时你并不需要汇集或分解整个簇,而仅仅需要对其一、两个元素操作。这时你可以用名称来捆绑与分解簇。在Cluster 工具模板中除了Bundle及Unbundle功能外,还提供有Bundle By Name和Unbundle By Name功能。它们允许根据元素的名称(而不是其位置)来查询元素。与Bundle不同,使用Bundle By Name可以访问你需要的元素,但不能创建新簇;它只能重置一个已经存在的簇的元素,同时你必须给Bundle By Name图标中间的输入端子一个输入以申明要替换其元素的簇。Unbundle可返回指定名称的簇元素,不必考虑簇的序和大小。例如,如果你想重置上例中Boolean 2的值,就可以使用Bundle By Name功能而不必担心簇的序和大小。与此类似如果你要访问串的值,可以使用Unbundle By Name功能。

String

图3-11 用名称操作簇

在上面的例子中,Cluster Control中有两个元素,一个是数据类型(名称是Numeric),另一个是字符串型(名称是String),另一个控制是字符串“ABCD”,框图如右所示,运行该程序,即可将簇内的字符串值重置。(本例中为了使Bundle By Name的输入端由Numeric 变为String,需使用快速菜单中的Select Item 项操作。)

3.5.4 数组和簇的互换

有时你会发现,将数组变为簇(或者相反)很方便。尤其是因为LabVIEW包括的关于数组的操作功能多于簇。例如,前面板上有一个多按钮的簇,你希望颠倒这些按钮值的序。好了,Reverse 1D Array功能正好可用,但是它仅可用于数组。这没关系,你可以使用功能Cluster to Array将簇转换为数组,使用Reverse 1D Array切换开关的值,最后再利用Array to Claster 变换回簇。

3.6 Waveform数据类型

在数据采集和信号分析中经常要遇到波形数据,在LabVIEW 6i中增加了Waveform数据类型,使得波形的描述更加简洁。Waveform数据类型包含了波形的数据(Y)、起始时刻(t0)和步长ΔX,使用Waveform 模板的Build Waveform 函数可以建立一个波形。许多用于数据采集和波形分析的VI和函数的缺省状态都接受或返回Waveform数据类型。当你将一个Waveform数据类型连接到Waveform Graph或Chart时,会自动画出相应的曲线。

图3-12 使用Waveform的波形发生例子

图3-12是一个使用Waveform函数产生正弦波的例子。其中仅仅调用了Sine Waveform一个函数,只要将有关参数指定,就可产生正弦波。Sine Waveform实际上是一个子VI,点击其图标,就可看到下层的程序,还是比较复杂的。在LabVIEW 6I以前的版本中用户就需要那样去编程。

Waveform数据类型是根据原有的数据类型进一步“打包”组合而成,这种打包也不可避免地带来一些负作用,有时还需要对Waveform数据类型“解包”。有关这一数据类型的函数或VI在 Functions?Waveform之中。它们有:

Build Waveform :构造波形数据类型

Get Waveform Components:提取波形元素(Y,Δt,t0)

Set Waveform Attribute :设置波形属性

Get Waveform Attribute:提取Waveform属性

Waveform Operations:波形运算

Waveform Generation :波形发生

Waveform Measurements :与波形相关的测量

Waveform File I/O :Waveform格式的文件I/O

其中后4个是类目,分别还有下一层函数。现在我们具两个例子看看。

数据采集的结果通常是一个Waveform格式的数据,有时需要提取其中的Y数组,可以这样实现:

这里使用的就是Get Waveform Components函数。

在一个多通道的数据采集中,直接的输出是包含多个Waveform成分的Waveform结构,有时我们需要将它们摘开。下面是一个双通道采集的例子,我们使用Waveform Operations 下的Index Waveform Array函数,首先将它分为两个Waveform,然后再用Get Waveform Components函数提取出了各自的Y数组。

实验三 数组和字符串

实验三数组和字符串 一、实验目的 1.掌握Java中的数组定义、引用 2.掌握向量的基本概念和应用技术 3.掌握使用字符串String类处理字符串的方法 4.掌握使用字符串StringBuffer类处理字符串的方法 5.掌握Date类以及Calendar类的常用方法; 二、实验内容 1.使用https://www.wendangku.net/doc/b010105802.html,ng.Math类,生成100 个100~999 之间的随机整数,找出他们之中的最大的和最小的,并统计随机产生的大于300 的整数个数。 package exercise; publicclass shiyan3_1 { publicstaticvoid main(String [] args) { int count=0; int max=0; int min=Integer.MIN_VALUE; int num[]=newint[100];//声明并创建一个具有100 个元素的整型数组对象num int i; for(i=1;i<=100;i++) { num[i-1]=100+(int)(Math.random()*899); System.out.print(num[i-1]+"\t");//随机产生一个100~999 之间的随机整数 if(i % 10 == 0) System.out.println();//输出当前产生的随机数,并一行输出10 个数 if(num[i-1]>max) max=num[i-1]; if(num[i-1]300) count++; } System.out.println("最大的随机整数是:"+max); System.out.println("最小的随机整数是:"+min); System.out.println("大于300 的整数个数是:"+count); } }

数据结构练习题第三章栈、队列和数组习题与答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”; top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x)

第三章lAB VIEW 数组、簇和图形1

第三章数据类型:数组、簇和波形 3.1概述 数组是同类型元素的集合。一个数组可以是一维或者多维, 如果必要,每维最多可有231-1个元素。可以通过数组索引访问 其中的每个元素。索引的范围是0到n – 1,其中n是数组中 元素的个数。图3-1所显示的是由数值构成的一维数组。注意 第一个元素的索引号为0,第二个是1,依此类推。数组的元素 可以是数据、字符串等,但所有元素的数据类型必须一致。 图3-1数组示意图 簇(Cluster)是另一种数据类型,它的元素可以是不同类 型的数据。它类似于C语言中的stuct。使用簇可以把分布在流 程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤 程度。减少子VI的连接端子的数量。 波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。 3.2数组的创建及自动索引 3.2.1创建数组 一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。 如果需要用一个数组作为程序的数据源,可以选择 Functions?Array?Array Constant,将它放置在流程图中。然后 再在数组框中放置数值常量、布尔数还是字符串常量。下图显示 了在数组框放入字符串常量数组的例子。左边是一个数组壳,中 间的图上已经置入了字符串元素,右边的图反映了数组的第0个 元素为:”ABC”,后两个元素均为空。 图3-1数组的创建

在前面板中创建数组的方法是,从Controls模板中选择 Array & Cluster,把数组放置在前面板中,然后选择一个对象 (例如数值常量)插入到数组框中。这样就创建了一个数值数组。 也可以直接在前面板中创建数组和相应的控制对象,然后将 它们复制或者拖曳到流程图中,创建对应的常数。 还有很多在流程图中创建和初始化数组的方法,有些功能函 数也可以生成数组。 3.2.2数组控制对象、常数对象和显示对象 通过把数组与数值、布尔数、字符串或者簇组合在一起,可以在前面板和流程图中创建任何一种控制对象、常数对象和显示对象。数组元素不能是数组、图表或者图形。如果您想查看一些数组的例子,请查看Examples\General\arrays.llb中的例子。 3.2.3自动索引 For循环和While循环可以自动地在数组的上下限范围内编索引和进行累计。这些功能称为自动索引。在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。循环会对一维数组中的标量元素,或者二维数组中的一维数组等编制索引。在输出通道也要执行同样的工作――数组元素按顺序进入一维数组,一维数组进入二维数组,依此类推。 在默认情况下,对于每个连接到For循环的数组都会执行自 动索引功能。可以禁止这个功能的执行,方法是用鼠标右键单击 通道(输入数组进入循环的位置),在快捷菜单中选择Disable Indexing。 练习3-1创建一个自动索引的数组 目的:使用 For 循环的自动索引功能创建数组,并用一个图形(Graph)显示该数组。 前面板 图3-2练习3-1的面板 1.打开一个新的前面板。 2.选择Controls?Array & Cluster,在前面板 中放置一个数组。设置它的标签为Waveform Array。 3.选择Controls?Numeric,在

java基本数据类型习题(选择24)

1、下列哪一个是合法的标识符: A、12class; B、+viod; C、-5; D、_black; 2、下列哪一个不是JAVA语言中保留字: A、if; B、sizeof; C、private; D、null; 3、下列描述中正确的一项是: A、标识符首字符的后面可以跟数字; B、标识符不区分大小写; C、复合数据类型变量包括布尔型、字符型、浮点型; D、数组属于基本数据类型; 4、下列哪一项不属于变量的组成部分: A、变量名; B、变量属性; C、变量初值; D、变量大小; 5、下列关于变量组成部分描述正确的一项是: A、变量名不是标识符;

B、变量名是标识符; C、浮点型属于复合类型; D、变量属性分为:基本类型和符合类型; 6、下列选项中,哪一项不属于JAVA语言的简单数据类型: A、整数型; B、数组; C、字符型; D、浮点型; 7、下列关于变量作用域的描述中,不正确的一项是: A、变量属性是用来描述变量作用域的; B、局部变量作用域只能是它所在的方法的代码段; C、类变量能在类的方法中声明; D、类变量的作用域是整个类; 8、下列关于基本数据类型的说法中,不正确的一项是: A、boolean是JAVA非凡的置值,或者为真或者为假; B、float是带符号的32位浮点数; C、double是带符号的64位浮点数; D、char应该上是8位的Unicode字符; 9、下列关于溢出的说法中,正确的一项是: A、一个整型的数据达到整型能表示的最大数值后,再加1,则机器产生上溢,结果为整型的最大值; B、一个整型的数据达到整型能表示的最小数值后,再减1,

第三章栈和队列习题_数据结构电子教案

习题三栈和队列 一单项选择题 1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D. n/2 2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。 A 可能是2 B 一定是2 C 可能是1 D 一定是1 3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是() A.2 B. 3 C. 5 D.6 5. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。 A. |top[2]-top[1]|=0 B. top[1]+1=top[2] C. top[1]+top[2]=m D. top[1]=top[2] 6. 执行完下列语句段后,i值为:() int f(int x) { return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1)); A.2 B. 4 C. 8 D. 无限递归 7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。 A. 3,2,4,1,1;(*^(+*- B. 3,2,8;(*^- C. 3,2,4,2,2;(*^(- D. 3,2,8;(*^(- 8. 用链接方式存储的队列,在进行删除运算时()。 A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 10.设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为() A.front=front+1 B. front=(front+1)% m C.rear=(rear+1)%(m+1) D. front=(front+1)%(m+1) 11.循环队列的队满条件为 ( ) A. (sq.rear+1) % maxsize ==(sq.front+1) % maxsize; B. (sq.front+1) % maxsize ==sq.rear C. (sq.rear+1) % maxsize ==sq.front D.sq.rear ==sq.front

实验2基本数据类型与数组(最新整理)

民族学院实验报告 计算机科学 系 级 班 指导教师 报告人20 年 月 日 成 绩 课程名称 JAVA 语言程序设计实验名称实验二 基本数据类型与数组实验 目的 1.掌握基本数据类型及其相互之间的转换2.掌握JAVA 中数组的使用实验仪器 和器材具有JDK 环境的计算机一台 实验内容和要求 一、输出希腊字母表 1.请按模板要求,将【代码】替换为Java 程序代码,运行该程序时在命令窗口中输出希腊字母表。其运行效果如图 2.1所示。 图2.1 输出希腊字母表 GreekAlphabet.java public class GreekAlphabet { public static void main(String[] args) { int startPosition=0,endPosition=0; char cStart='α',cEnd='ω'; startPosition=(int )cStart; //cStart 做int 型数据转换,并将结果赋值给startPosition endPosition=(int )cEnd; //cEnd 做int 型数据转换,并将结果赋值给EndPosition System.out.println("希腊字母\'α\'在Unicode 表中的顺序位置:"+(int)cStart); System.out.println("希腊字母表:"); for (int i=startPosition;i<=endPosition;i++){ char c='\0'; cStart=(char )i; //i 做char 型转换运算,并将结果赋值给c System.out.print(" "+c); if ((i-startPosition+1)%10==0) System.out.println(); } } } 2.实验后练习 (1)将一个double 型数据直接赋值给float 型变量,程序编译时提示怎样的 错误? 答:程序提示的内容为:“可能损失精度”。 (2)在应用程序的main 方法中增加语句:

java第三章上机练习题

习题1. 数据类型转换应用 【案例简介】下例说明了整型、浮点型、字符串型之间的相互转换。 【案例目的】掌握Java中两个不兼容类型能够的数据格式之间的转换。 【技术要点】高精度到低精度的数据转换时候需要进行强制转换,低精度向高精度进行转换的时候的会自动进行,字符串到其他类型的转换需要用到特定的方法。 【代码分析】 public class Conversation { public static void main(String [] args) { String str = "123"; int j; byte b; int i=257; double d = 323.142; System.out.println("\nConversion of int to byte."); //i强制转换成byte型 System.out.println("i and b "+ i + " "+b); System.out.println("\nConversion of double to int."); //d强制转换成int型 System.out.println("d and i "+ d + " "+i); //d强制转换成byte型 System.out.println("d and b "+ d + " "+b); j=Integer.parseInt(str); //str转换成int型 System.out.println("j="+j); } } 【相关知识】 数据类型转换 (1)简单数据类型中各类型数据间的优先关系和相互转换 不同类型数据间的优先关系如下 低----------------------------------------------->高 byte->short->char-> int -> long -> float -> double 自动类型转换规则 整型,实型,字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。 (2)强制类型转换 高级数据要转换成低级数据,需用到强制类型转换,如: int i; byte b=(byte)i; //把int型变量i强制转换为byte型 (3)其他转换 数字变为字符串 用如下方法转换相应类型的数字: Double.toString(double); Float.toString(float);

第3章 数组

第4章数组 一、一维数组 1.若有说明:int a[][3]={1,2,3,4,5,6,7}; 则a数组第一维的大小是【】 2. 下面程序的运行结果是【5】 #include "stdio.h" main() { int i, f[10]; f[0]=1; f[1]=1; for (i=2; i<10; i++) f[i]=f[i-2]+f[i-1]; for (i=0; i<10; i++) { if (i%4==0) printf("\n"); printf("%3d", f[i]); } } 3.在C语言中,引用数组元素时,其数组下标的数据类型允许是【】A)整型常量B)整型表达式 C)整型常量或整型表达式C)任何类型的表达式 4.若有说明:int a[10];则对数组元素的正确引用是【】 A) a[10]; B)a[3.5] C)a(5) D)a[10-10] 5.以下能正确定义一维数组的选项是 A) int num []; B) #define N 100 Int num [N]; C) int num[0..100]; D) int N=100; 6.以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。 #include "stdio.h" void reverse(int a[ ],int n) { int i,t; for(i=0;i

reverse(b,8); for(i=6;i<10;i++) s+=b[i]; printf(“%d\n”,s); } 程序运行后的输出结果是 A)22B) 10 C) 34 D) 30 7.以下程序的输出结果是 #include "stdio.h" f(int b[],int m,int n) { int i,s=0; for(i=m;i=0;i--) a[i]=10-i; printf(“%d%d%d”,a[2],a[5],a[8]); } A) 258 B) 741 C) 852 D) 369 11.以下程序运行后的输出结果是【】 #include "stdio.h"

lABVIEW关于数据类型的编辑:数组、簇和波形

数据类型:数组、簇和波形 .1概述 数组是同类型元素的集合。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素。可以通过数组索引访问其中的每个元素。索引的范围是0到n – 1,其中n是数组中元素的个数。图3-1所显示的是由数值构成的一维数组。注意第一个元素的索引号为0,第二个是1,依此类推。数组的元素可以是数据、字符串等,但所有元素的数据类型必须一致。 图3-1数组示意图 簇(Cluster)是另一种数据类型,它的元素可以是不同类 型的数据。它类似于C语言中的stuct。使用簇可以把分布在流 程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤 程度。减少子VI的连接端子的数量。 波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。 3.2数组的创建及自动索引 3.2.1创建数组 一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(如果需要用一个数组作为程序的数据源,可以选择Functions?Array?Array Constant,将它放置在流程图中。然后再在数组框中放置数值常量、布尔数还是字符串常量。下图显示了在数组框放入字符串常量数组的例子。左边是一个数组壳,中间的图上已经置入了字符串元素,右边的图反映了数组的第0个元素为:”ABC”,后两个元素均为空。 图3-1数组的创建 在前面板中创建数组的方法是,从Controls模板中选择 Array & Cluster,把数组放置在前面板中,然后选择一个对象 (例如数值常量)插入到数组框中。这样就创建了一个数值数组。 也可以直接在前面板中创建数组和相应的控制对象,然它们

labview数组、簇和图形的区别

数组是同类型元素的集合。一个数组可以是一维或者多维, 如果必要,每维最多可有231-1个元素。可以通过数组索引访问 其中的每个元素。索引的范围是0到n – 1,其中n是数组中 元素的个数。图3-1所显示的是由数值构成的一维数组。注意 第一个元素的索引号为0,第二个是1,依此类推。数组的元素 可以是数据、字符串等,但所有元素的数据类型必须一致。 图3-1数组示意图 簇(Cluster)是另一种数据类型,它的元素可以是不同类 型的数据。它类似于C语言中的stuct。使用簇可以把分布在流 程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤 程度。减少子VI的连接端子的数量。 波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。 3.2数组的创建及自动索引 3.2.1创建数组 一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。 如果需要用一个数组作为程序的数据源,可以选择 Functions?Array?Array Constant,将它放置在流程图中。然后 再在数组框中放置数值常量、布尔数还是字符串常量。下图显示 了在数组框放入字符串常量数组的例子。左边是一个数组壳,中 间的图上已经置入了字符串元素,右边的图反映了数组的第0个 元素为:”ABC”,后两个元素均为空。 图3-1数组的创建 在前面板中创建数组的方法是,从Controls模板中选择 Array & Cluster,把数组放置在前面板中,然后选择一个对象 (例如数值常量)插入到数组框中。这样就创建了一个数值数组。 也可以直接在前面板中创建数组和相应的控制对象,然后将

实验三.数组与字符串

1.实验三数组与字符串 一、实验目的: 1.熟悉Java的数组的使用,编程练习数组声明、定义、遍历和排 序等操作。 2.熟悉Java的字符串相关类的使用,通过编程实现针对字符串的 一般操作。 二、实验内容: 1.定义一个有10个元素的整型数组,找出最大最小值; 2.定义一个有10个元素的整型数组,用选择法实现由小到大排序; 3.定义一个能实现冒泡法排序的方法bSort(int[] arr),然后定义并 初始化一4*5的二维数组,用bSort(int[] arr)将该二维数组的每 行元素进行升序排序; 4.编程求解一个3*3矩阵每一行的元素之和,每一列元素之和,对 角线元素之和,并输出。 5.接收键盘输入的字符串,使用String类的方法indexOf()来统 计该字符串中各个字符出现的次数。 6.设定并初始化一个字符串数组,并将数组中那些以字母b开头的 元素打印出来。 7.接收键盘输入的字符串,分别按顺序输出该字符串中的大写字符 和小写字符。 8.接收键盘输入的英文字符串(单词之间用空格隔开),将字符串 中出现的单词首字母改成大写后输出。 三、实验要求: 1.通过实验掌握数组的定义和初始化; 2.掌握数组最值求解算法; 3.掌握数组的基本排序算法; 4.掌握遍历数组的算法; 5.通过实验掌握String类的使用; 6.通过实验掌握String类常用方法的使用;

7.从JDK文档中查阅String类的以下方法(与本实验内容相关): split(),startWith(),toUpperCase(),indexOf(),charAt(),并说明 它们的用法; 8.写出实验报告。 四、实验学时:3学时 五、实验步骤: 1.进入Java编程环境; 2.新建一个Java文件,编写main()方法实现一维数组求最值的算 法; 3.新建一个Java文件,编写main()方法实现一维数组选择法排序 算法; 4.新建一个Java类,定义bSort(int[] arr)方法(冒泡法)实现数组 升序排序,然后在main方法里实现对一4*5二维数组每行元素 的升序排序; 5.新建一个Java文件,编写main()方法声明并初始化一两维3*3 数组,设计算法实现行、列和对角线元素的求和操作; 6.编写主方法main(),其中实现接收键盘输入功能、文件操作功能 和文件内容输出功能; 7.调用相应构造方法创建String对象; 8.查阅JDK文档,找出可以实现实验内容的String方法,设计算 法,编写程序; 9.调试运行程序,观察输出结果。

数据结构练习题 第三章 栈、队列和数组 习题及答案备课讲稿

数据结构练习题第三章栈、队列和数组 习题及答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性 表。在栈顶进行插入运算,被称为________或________,在栈顶进行删 除运算,被称为________或________。 2.栈的基本运算至少应包括________、________、________、________、 ________五种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生 “________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生 “________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________ 实现。 6.top=0表示________,此时作退栈运算,则产生“________”; top=sqstack_maxsize-1表示________,此时作进栈运算,则产生 “________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以 填充。

int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填 充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予 以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x) {if(________________) return(0); else{*x=________________; return(1);} }

(完整版)实验2基本数据类型与数组

民族学院实验报告 计算机科学系级班指导教师 报告人20 年月日成绩 课程 名称JAVA语言程序设计 实验名称实验二基本数据类型与数组实验 目的 1.掌握基本数据类型及其相互之间的转换 2.掌握JAVA中数组的使用 实验仪器 和器材 具有JDK环境的计算机一台 实验内容 和要求 一、输出希腊字母表 1.请按模板要求,将【代码】替换为Java程序代码,运行该程序时在命令窗 口中输出希腊字母表。其运行效果如图2.1所示。 图2.1 输出希腊字母表 GreekAlphabet.java public class GreekAlphabet { public static void main(String[] args) { int startPosition=0,endPosition=0; char cStart='α',cEnd='ω'; startPosition=(int)cStart; //cStart做int型数据转换,并将结果赋值给startPosition endPosition=(int)cEnd; //cEnd做int型数据转换,并将结果赋值给EndPosition System.out.println("希腊字母\'α\'在Unicode表中的顺序位置:"+(int)cStart); System.out.println("希腊字母表:"); for (int i=startPosition;i<=endPosition;i++){ char c='\0'; cStart=(char)i; //i做char型转换运算,并将结果赋值给c System.out.print(" "+c); if ((i-startPosition+1)%10==0) System.out.println(); } } } 2.实验后练习 (1)将一个double型数据直接赋值给float型变量,程序编译时提示怎样的 错误? 答:程序提示的内容为:“可能损失精度”。 (2)在应用程序的main方法中增加语句:

第3章数组及矩阵运算

第三章 数组与矩阵及其基本运算 3.1 数组 3.1.1数组与矩阵的输入 1. 直接输入法 对于规模较小的矩阵,可直接在MATLAB 命令窗输入,也可在程序编辑器中写入程序,矩阵元素值还可在变量浏览器修改。 矩阵所有元素包含在“[]”内,同行元素之间用“,”隔开,也可用空格,两行元素用“;”分开,矩阵元素可以是数值,也可以是表达式。 【例3-1】输入矩阵???? ? ?????=987654321A 。 解:(1)在键盘上输入下列内容 A = [1,2,3; 4,5,6; 7,8,9] (2)按【Enter 】键,指令被执行,工作窗将显示以下结果: A = 1 2 3 4 5 6 7 8 9 也可输入:A = [1 2 3; 4 5 6; 7 8 9] %同行元素之间用空格 或 A=[1 2 3; 4 5 6; 7 8 9] 【例3-2】已知B=2+3i ,输入矩阵?? ?? ??????+=9872*6)5(4323 /1B sqrt A 。 解:(1)在键盘上输入下列内容 A = [1/3,2,3; 4,sqrt(5),6*B+2; 7,8,9] (2)按【Enter 】键,指令被执行,工作窗将显示以下结果: A = 0.3333 2.0000 3.0000 4.0000 2.2361 14.0000 +18.0000i 7.0000 8.0000 9.0000 【例3-3】用下面三条指令创建二维数组C 。 解:(1)在键盘上输入下列内容 a=sqrt(2); b=33^0.5; C=[1,1/a+i*b,b*sqrt(a);sin(pi/6),a+b,3+2i] (2)按回车后得: C = 1.0000 0.7071 + 5.7446i 6.8315 0.5000 7.1588 3.0000 + 2.0000i 复数矩阵的输入见例2-2、例2-3。 【例3-4】输入矩阵?? ? ? ??++++++=i i i i i i CN 166155144133122111。 解:在键盘上输入下列内容后,按回车后得CN 矩阵。 M_1=[1,2,3;4,5,6],M_2=[11,12,13;14,15,16]; CN=M_1+i*M_2 【例3-5】将时间轴t 在[-1,6]之间等分,间距为0.2,求等分后的t 数组。

matlab 第三章 字符串、元胞和构架数组

内容简介 本书由纸质媒体和电子媒体有机结合而成。纸质媒体便于读者进行系统、全面、长时间连续地阅读,便于随心的翻阅、浏览;而电子媒体向读者提供色彩信息、动态交互的软件环境,提供读者实践本书内容所需的各种文件。 本书第一章系统讲述MATLAB6.5的集成工作平台,引导读者初会MATLAB基本用法。第二、三章系统叙述MATLAB6.1的四大基本数据类型(数值数组、字符串数组、元胞数组、构架数组),至于其它扩展数据类型(函数句柄、符号数据、内联函数、unit数组、稀疏类)则另辟章节专述。此后,本书用九个独立章分述MATLAB6.5的数值计算、符号计算、函数和数据可视、面向对象编程、GUI交互操作界面设计、EXE独立应用程序生成、实现不同软件平台交互的API、M-book 数据图形文字环境集成等八大通用功能。本书用专门的一章深入浅出地阐明SIMULINK的分层建模、仿真功能、与MATLAB交互的功能。 全书包含390多个计算范例。所有算例的程序是可靠、完整的。读者可以在自己的MATLAB环境中完全准确地重现本书所提供的算例结果。算例的举一反三,将使读者很快掌握要领,从模仿走向灵活应用。 书中正文(包括算例)所涉及的指令全部罗列在附录的“A索引”中,用户很容易根据关键字符找到相关的正文说明和算例应用。 本书随带包含700多个文件的光盘。光盘文件包含:可直接在Notebook中运行的全部算例的M-book DOC文件;可在MATLAB环境中直接运行的算例M和MDL文件;可供读者实践MATLAB编译器及API的所有文件;可在PowrPoint中放映幻灯的PPT文件。它们不仅有效地提供了纸质媒体所不具备的交互能力和色彩感染力,而且弥补了纸质媒体没有SIMULINK模型源码文件、没有PPT源码文件、没有编译源文件和验证文件的缺陷。 本书既可作为理工科院校研究生、本科生系统学习的教材,又可以作为广大科技工作者掌握和精通MATLAB的自学用书和使用手册。 作者简介 张志涌 1944年出生于无锡;教授,获政府专项津贴,IEEE高级会员,中国电子学会高级会员,江苏省自动化学会理事、网络与系统专委会主委;1967年毕业于清华大学自动控制系,1982年初在上海交通大学获控制理论硕士学位,1989—90年在荷兰王国Eindhoven技术大学研修系统辨识、故障诊断;主持并完成国家自然科学基金、省部基金及科研项目近十项,发表论文50余篇,著作1本。现主要从事自动控制教学和计算机控制、计算机仿真、故障诊断等研究。 1989年在荷兰用MATLAB3.0研究系统辩识和故障诊断;1992年对MATLAB3.0实现汉化并编写了相应讲义;在1994、95年借助于MATLAB3.5、4.0先后完成国家自然科学基金和国家教委留学生基金课题研究;1996年在省基金支持下从事MATLAB4.2c建立仿真实验室的研究,并于1997年编写出版《掌握和精通MATLAB》;1997年底获原邮电部预研经费资助开始了以MATLAB5.x为工具的智能技术研究。

基本数据类型与基本运算

第二章基本数据类型与基本运算 本章主要介绍程序设计中高级语言提供的数据类型和其上允许的基本运算。在介绍这些内容时,我们通过穿插一些实例介绍如何应用数据类型与基本运算来解决一些简单的问题。 2.1 数据类型的概念 2.1.1 为什么程序设计语言中要引入“数据类型”这一概念? 2.1.2 数据类型的概念 数据类型是程序设计语言中的一个非常重要的概念。那么,什么是数据类型呢? 数据类型是由该类型的数据的值域(即值集)和在这些数据上所有施加的运算的集合(即运算集或操作集)组成。值域指出了每一种数据类型的变量合法的数据取值范围,而运算集合则规定了每一种数据类型的变量和数据其上所允许进行的运算。值域和运算集是数据类型的两个基本属性。在下面介绍Pascal语言的数据类型的有关章节中,对每一种数据类型均将说明这两种属性。 2.1.3 数据类型的代数理论基础 一个数据类型是一个二元组(D,R)。其中,D是一个数据类型的值域,R是建立在D上的运算(操作)的集合。这个二元组构成了一个代数系统。其中,D叫做该系统的基集。从本质上说,一个代数系统就是一个带运算的集合,而一个数据类型就是一个代数系统。 从这个概念出发,程序设计语言理论在数据结构的基础上发展了一些数据和类型的代数理论。这些理论属于程序设计语言语义学的范畴,将来,有兴趣的学生在具备了比较深入的基础之后,可以作进一步的了解。 2.1.4 Pascal语言中数据类型的分类 Pascal语言的优点之一是有丰富的数据类型,按照其定义者的不同可分为下面几类,如表2-1所示。 整数类型 实数类型 系统预定义的数据类型布尔类型(逻辑类型) 基本(标准)数据类型 字符类型 Pascal 枚举类型 数据类型子界类型 数组类型 用户自定义的数据类型记录类型构造型数据类型 集合类型 文件类型 指针类型 图2-1 Pascal的数据类型 2.2 基本数据类型 本节介绍四种基本数据类型(Elementary Date Type),它们是整数类型、实数类型、布尔类型(逻辑类型)和字符类型。基本数据类型又称为标准数据类型(Standard Date Type),我国国家标准中将它改称为需求数据类型。基本数据类型是语言系统预先定义或规定的数据类型。 2.2.1 整数类型 整数类型(Integer Date Type)简称整型,在Pascal语言中用类型标识符integer表示整数类型。整型的数据可以是正整数、负整数和零,其中,正整数和零可以省略“+”号。 1.整数类型的值域 任何计算机系统由于受机器字长的限制,它所能表示的整数只是数学中整数集合的一个有穷的子集合。其中,最大整数为maxint,它的值与具体机器的字长有关。一般地,若机器的字长为W时(假设用一位表示数符),由于整数在机器内采用二进制补码表示,因此,

基本数据类型

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.1 概述 数组是同类型元素的集合。一个数组可以是一维或者多维, 如果必要,每维最多可有231-1个元素。可以通过数组索引访问 其中的每个元素。索引的范围是0到n – 1,其中n 是数组中 元素的个数。图3-1所显示的是由数值构成的一维数组。注意 第一个元素的索引号为0,第二个是1,依此类推。数组的元素 可以是数据、字符串等,但所有元素的数据类型必须一致。 图3-1 数组示意图 簇(Cluster )是另一种数据类型,它的元素可以是不同类 型的数据。它类似于C 语言中的stuct 。使用簇可以把分布在流 程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤 程度。减少子VI 的连接端子的数量。 波形(Waveform )可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。 3.2 数组的创建及自动索引 3.2.1 创建数组 一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell ),然后在这个壳中置入数组元素(数或字符串等)。 如果需要用一个数组作为程序的数据源,可以选择 Functions?Array?Array Constant ,将它放置在流程图中。然后 再在数组框中放置数值常量、布尔数还是字符串常量。下图显示 了在数组框放入字符串常量数组的例子。左边是一个数组壳,中 间的图上已经置入了字符串元素,右边的图反映了数组的第0个 元素为:”ABC”,后两个元素均为空。 ABC 0Array Constant ABC 0Array Constant 0Array Constant 图3-1 数组的创建

相关文档
相关文档 最新文档