第3章单元数组与结构数组_第1页
第3章单元数组与结构数组_第2页
第3章单元数组与结构数组_第3页
第3章单元数组与结构数组_第4页
第3章单元数组与结构数组_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 单元数组与结构数组 3.1 字符串数组字符串数组 3.2 单元数组单元数组 3.3 结构数组结构数组 3.4 综合实例综合实例3.1 字符串数组字符串数组3.1.1 串数组的生成串数组的生成 1直接输入法直接输入法直接用单引号输入,例如:直接用单引号输入,例如: Book=MATLAB 7.14 (R2012a)基础基础显示的结果为:显示的结果为:Book =MATLAB 7.14 (R2012a)基础基础若在单引号外加大括号若在单引号外加大括号也可以显示字符串,例如:也可以显示字符串,例如: S=数组计算数组计算S = 数组计算数组计算从结果来看,显示的内容有单引号标示,而单引号法显

2、示的却只是从结果来看,显示的内容有单引号标示,而单引号法显示的却只是文本。文本。 2利用命令利用命令disp法法格式 disp(S) %S是字符串,显示出S的文本例如:disp(Book)显示的结果为:MATLAB 7.14 (R2012a)基础3利用命令利用命令char法法格式 char(S) %S是字符串,显示出S的文本例如:char(MATLAB工具箱)ans = MATLAB工具箱4利用命令利用命令input法法格式 input(out,in) %显示出字符串out的文本并等待终端的输入,in可缺省如果变量in是s,则输入的内容以字符串的形式进行保存。例如,在命令窗口中输入: x=in

3、put(Give a number x:)显示的结果为:Give a number x:然后在“x::”的后面输入一个数,不妨为6,回车即得:x = 6此时数值6以变量x的形式显示在Workspace工作空间内。若执行如下命令: x=input(Give a number x:,s)Give a number x:6x = 6此时数字6以字符串的形式保存在Workspace工作空间内。 5在字符串中用两个单引号来表示一个单引号在字符串中用两个单引号来表示一个单引号 Its a reference book.ans =Its a reference book.3.1.2 串数组的访问和大小串数组

4、的访问和大小1串数组的访问串数组的访问字符串的存储是按其中字符逐个顺序单一存放的,且存放的是字符的内部代码ASCII码。当在屏幕上显示字符变量的值时,显示出来的是文本,而不是ASCII数字。由于字符串是以向量的形式来存储的,所以可以通过它的下标对字符串中的任何一个元素进行访问。例如,对上面定义的字符串Book,输入命令: Book(14:19)ans =R2012a3字符串的查找字符串的查找在字符串中寻找某个字符串可用函数findstr来实现。格式 findstr(S1,S2) %S1、S2都为字符串,表示在较长的字符串中 查找较短的字符串出现的次数,并返回其位置2字符串的长度字符串的长度一个

5、字符串的长度可用一个字符串的长度可用length和和size函数来确定大小。例如:函数来确定大小。例如: length(Book)ans = 22 size(Book)ans = 1 22例如,在上面定义的字符串Book中查找A所在的位置: findstr(Book,A)ans = 2 5 findstr(A,Book)ans = 2 5注:字符串和要查找的字符串的位置可以互换,结果相同。因此,无论S1、S2哪个为长字符串,位置在前在后都没有关系。3.1.3 多行串数组的创建多行串数组的创建1多行串数组的直接输入多行串数组的直接输入字符串数组可以是多行多列的数组,但必须保证每一行都有相同的列数

6、。若字符串长度不一样,需要用空格填充,保证所有行的长度都相同。例如: S1=This string array;has two rows. %使用矩阵产生法,第二行后面需加4个空格S1 =This string arrayhas two rows.2利用串操作函数创建多行串数组利用串操作函数创建多行串数组利用函数char、strvcat 创建多行串数组,每行的字符串长度可以不同。例如:S1=char(This string array,has two rows.) S1 = This string array has two rows. S2=strvcat(创建,多行,字符串数组)S2 =

7、创建 多行 字符串数组1字符串转换成矩阵字符串转换成矩阵将字符串转换成矩阵的函数为str2mat。例如: S=数值,字符串,2012年6月 M=str2mat(S)S = 数值 字符串 2012年6月M =数值 字符串2012年6月3.1.4 字符串数组的转换字符串数组的转换2字符串与数值的转换字符串与数值的转换利用str2num和num2 str实现字符串与数值的相互转换。例如: X=1:9; S=num2str(X)S =1 2 3 4 5 6 7 8 9注:虽然S的显示结果与X看上去一样,但其含义不同。X是数组,S是字符串。同样字符串可以转化为数组,例如: S=11 22;33 44S

8、=11 2233 44 X=str2num(S)X = 11 22 33 443.2 单元数组单元数组3.2.1 3.2.1 单元数组的创建单元数组的创建1使用大括号使用大括号 直接创建直接创建例如: A=Command ,Workspace;Current Directory,HistoryA = Command Workspace Current Directory History2对细胞元素直接赋值创建对细胞元素直接赋值创建【例3-1】创建一个学生的各科成绩单元数组。S1,1=语文; S1,2=数学; S1,3=外语; S1,4=物理; S1,5=化学; S1,6=生物;S2,1=102

9、; S2,2=125; S2,3=130; S2,4=86; S2,5=82; S2,6=80;S3利用函数利用函数cell创建一个大小合适的空矩阵创建一个大小合适的空矩阵格式 cell(m,n) %创建一个mn的空细胞矩阵,矩阵所有行必须要有相同的细胞数 运行结果如下:S = 语文 数学 外语 物理 化学 生物 102 125 130 86 82 80注:该方法首先使用注:该方法首先使用cell函数定义一个单元数组,此时,由于数组的函数定义一个单元数组,此时,由于数组的各个元素还没有定义,因此,所显示的单元数组中元素都用空阵各个元素还没有定义,因此,所显示的单元数组中元素都用空阵 来表示。然

10、后,依次输入单元数据中各个元素的值,可以发现,每来表示。然后,依次输入单元数据中各个元素的值,可以发现,每输入一个值,用相应的值代替空阵。输入一个值,用相应的值代替空阵。3.2.2 单元数组的显示单元数组的显示1celldisp函数函数格式格式 celldisp(cell) %逐个显示逐个显示cell的每个元素的值的每个元素的值例如,对【例例如,对【例3-2】中的数组】中的数组B,执行命令:,执行命令: celldisp(B)显示的结果如下:显示的结果如下:B1,1 = matrixB2,1 =12345678B1,2 = laboratoryB2,2 = TollboxsB1,3 = MAT

11、LABB2,3 =7.142012(a)2cellplot函数函数格式 cellplot(B) %用彩色的图形来显示单元型变量B的结构形式例如,对【例3-2】中的数组B,继续执行命令: cellplot(B)显示结果如图3-1所示。matrixlaboratoryMATLABTollboxs图3-1 单元型变量的结构实际上,B1相当于B1,1;B2相当于B2,1;B3相当于B1,2,等等。注意使用大括号与小括号的不同,大括号是用于标示单元而不考虑这些单元的值,而小括号用于寻址单元的值。 3.2.3 单元数组的内容获取 为了获取单元数组中一个单元的值,只需使用大括号。如对【例3-2】中的数组B,

12、执行命令: B1ans =matrix B2ans =12345678 B3ans =laboratory例如: B(1)ans = matrix B(2)ans = 2x4 charMATLABMATLAB的单元数组在进行统计分析时,不能直接使的单元数组在进行统计分析时,不能直接使用计算统计量的函数,而必须将单元数组中单元的用计算统计量的函数,而必须将单元数组中单元的数值转化成数值向量,随后进行数值计算。数值转化成数值向量,随后进行数值计算。3.2.4 3.2.4 单元数组的数据处理单元数组的数据处理例如,对【例例如,对【例3-1】中形成的数组,计算这个学生考试的总分。】中形成的数组,计算这

13、个学生考试的总分。由于数组由于数组C的显示结果为:的显示结果为:C = 语文语文 数学数学 外语外语 物理物理 化学化学 生物生物 102 125 130 86 82 80运行结果如下:运行结果如下:X = 102 125 130 86 82 80ans = 605若直接对若直接对C的第的第2行求和,命令窗口显示出错。这时需将单元数行求和,命令窗口显示出错。这时需将单元数组转化成数值数组,具体程序如下:组转化成数值数组,具体程序如下:for i=1:6X(i)=C2,i; %将单元数组将单元数组C的第二行第的第二行第i列的内容赋于数值列的内容赋于数值数组数组XendX, sum(X) %显示数

14、组显示数组X及考试总分及考试总分3.3 结构数组结构数组1直接输入法直接输入法在给结构数组中元素直接赋值的同时定义该元素的名称,并使用在给结构数组中元素直接赋值的同时定义该元素的名称,并使用“.”将结将结构变量名与元素名连接。构变量名与元素名连接。格式 struct_name(record#).field_name=data %创建将数据data直接赋值给变量名 struct_name(record#)和元素名 field_name的结构数组 说明 创建11的结构数组时可省略记录号(record#)项 【例3-3】 建立学生档案的小型数据库。 student.test=90 86 82 88

15、92 75 80; =zhaohua; student.sex=F; student.age=20; student.num=20110501; student.add=qd uinversity; student.tel student运行结果如下运行结果如下 student = test: 90 86 82 88 92 75 80 name: zhaohua sex: F age: 20 num: 20110501 add: qd uinversity tel:们可以继续添加其他学生数据的结构变量,只需要加记录号即

16、可: student(2).test=92 87 85 81 90 78 82; student(2).name=yangping; student(2).sex=M; student(2).age=22; student(2).num=20110502; student(2).add=qd uinversity; student(2).tel我们可以继续添加其他学生数据的结构变量,只需要加记录号即可: student(2).test=92 87 85 81 90 78 82; student(2).name=yangping; student(2).sex=M; s

17、tudent(2).age=22; student(2).num=20110502; student(2).add=qd uinversity; student(2).tel此时输入student,将只得到该结构的成员变量名而不显示内容: studentstudent = 1x2 struct array with fields: test name sex age num add tel可以继续在命令窗口中查询student的具体内容: student(1) %系统将开始的student默认为student(1)ans = test: 90 86 82 88 92

18、75 80 name: zhaohua sex: F; age: 20; num: 20110501 add: qd uinversity tel:student(2)ans = test: 92 87 85 81 90 78 82 name: yangping sex: M; age: 22; num: 20110502 add: qd uinversity tel: 139053296972使用使用struct函数生成结构数组函数生成结构数组格式 S=struct(field1,V1, field2,V2,) % field为各成员变量名,V为对应的各成员 变量的

19、内容,返回结构数组S【例3-4】用struct函数创建结构数组变量。 S =struct(city,beijing,shanghai,renkou,1500,1300)运行结果如下:S = 1x2 struct array with fields: city renkouS.cityans =beijingans =shanghai S.renkouans = 1500 13003.3.2 结构数组的操作结构数组的操作1在结构数组中添加项在结构数组中添加项如果用户想在一个结构数组中添加其它项,直接按照生成格式输入即可。 【例【例3-5】 在学生数据库【例在学生数据库【例3-3】中的】中的stu

20、dent,若要添加元,若要添加元素项素项height和和weight,只需输入:,只需输入: student(1).height=1.62 student(1).weight=54; student(2).height=1.82; student(2).weight=75; student %显示显示student的结构的结构运行结果如下:运行结果如下: student = 1x2 struct array with fields: test name sex age num add tel height weight从上面的输出结果可知,在从上面的输出结果可知,在student中新添加了中新

21、添加了height和和weight两项纪录,进而可显示:两项纪录,进而可显示: student(1)ans = test: 90 86 82 88 92 75 80 name: zhaohua sex: F; age: 20; num: 20110501 add: qd uinversity tel:height: 1.6200 weight: 54 student(2)ans = test: 92 87 85 81 90 78 82 name: yangping sex: M; age: 22; num: 20110502 add: qd uinversity te

22、l:height: 1.8200 weight: 75 2在结构数组中删除项在结构数组中删除项格式格式 S=rmfield(S,fields) %将结构数组将结构数组S中的中的fields项删去,项删去,仍用数组名仍用数组名S表示表示说明说明 当当fields是字符串或单元数组变量时,将一次性删除多项。是字符串或单元数组变量时,将一次性删除多项。【例【例3-6】 对【例对【例3-5】中结果,输入语句:】中结果,输入语句: student=rmfield(student,weight)运行结果如下:student = 1x2 struct array with fiel

23、ds: test namesexage num add tel height student(1)ans = test: 90 86 82 88 92 75 80 name: zhaohua sex: F age: 20 num: 20110501 add: qd uinversity tel:height: 1.6200 student(2)ans = test: 92 87 85 81 90 78 82 name: yangpingsex: M;age: 22; num: 20110502 add: qd uinversity tel:h

24、eight: 1.82003在结构数组中调用元素项在结构数组中调用元素项结构数组中的任何信息,可以通过“结构体名称+元素项名称”的格式取出。例如,对【例3-6】中结果,输入语句: student(1).testans = 90 86 82 88 92 75 80 student(1).test (4)ans = 88 student(2).testans = 92 87 85 81 90 78 82 student(2).test(4)ans = 8也可直接取出所有同学的姓名和分数,如执行命令:ans = zhaohuaans = yangpingstudent.tes

25、tans = 90 86 82 88 92 75 80ans = 92 87 85 81 90 78 823.3.3结构数组与单元数组的转换结构数组与单元数组的转换格式 C=struct2cell(S) %将结构数组S转化为单元数组CS=cell2struct(C) %将单元数组C转化为结构数组S例如,在【例3-4】中创建的结构数组S,执行命令: C=struct2cell(S)C(:,:,1) = beijing 1x2 doubleC(:,:,2) = shanghai 1x2 double C=C(:,1),C(:,2)C = beijing shanghai 1x2 double 1x

26、2 double3.4 综合实例综合实例单元数组和结构数组具有类似数据库功能,因此本章实例给单元数组和结构数组具有类似数据库功能,因此本章实例给出一个建立学生班级档案数组。由于对字符串也可以实施查找出一个建立学生班级档案数组。由于对字符串也可以实施查找和计算长度,所以我们给出一个计算转移概率的方法,进而可和计算长度,所以我们给出一个计算转移概率的方法,进而可做一些市场预测做一些市场预测。3.4.1 建立学生班级档案数组建立学生班级档案数组【例【例3-7】 现给出现给出2011级机械班第一学期考试课程的任课教级机械班第一学期考试课程的任课教师和学生信息,如表师和学生信息,如表3-1和表和表3-2

27、所示。所示。表表3-1 2011级机械班学生信息级机械班学生信息学号(number)姓名(name)学习课程(course)成绩(score)20110103001赵凯高等数学,大学英语,计算机基础,机械制图86 80 92 7920110103002王菲高等数学,大学英语,计算机基础,机械制图78 85 90 8220110103003刘洋高等数学,大学英语,计算机基础,机械制图88 80 95 90 表表3-2 2011级机械班任课教师信息级机械班任课教师信息姓名(name)孙天宇刘梅芳王海涛杨一凡开设课程(course)高等数学大学英语基础计算机机械制图试求:(1)建立任课教师和学生的结

28、构数组teacher和student;(2)以建立的结构数组teacher和student为基础,再创建班级的细胞数组,并显示教师和学生的信息。(1)创建学生结构数组clearstudent(1).number=20110103001;student(1).name=赵凯;student(1).course=高等数学,大学英语,计算机基础,机械制图;student(1).score=86 80 92 79;student(2).number=20110103002;student(2).name=王菲;student(2).course=高等数学,大学英语,计算机基础,机械制图;student

29、(2).score=78 85 90 82;student(3).number=20110103003;student(3).name=刘洋;student(3).course=高等数学,大学英语,计算机基础,机械制图;student(3).score=88 80 95 90;(2)创建教师结构数组teacher(1).name=孙天宇;teacher(1).course=高等数学;teacher(2).name=刘梅芳;teacher(2).course=大学英语;teacher(3).name=王海涛;teacher(3).course=计算机基础;teacher(4).name=杨一凡;

30、teacher(4).course=机械制图;(3)创建班级单元数组class=cell(1,2); class1,1=student;class1,2=teacher;(4)显示单元数组结构celldisp(class) 运行结果如下:class1 = 1x3 struct array with fields: number name course scoreclass2 = 1x4 struct array with fields: namecours(5) 查询第一个学生信息class1(1).name %查询第一个学生的姓名class1(1).course %查询第一个学生学习课程class1(1).score %查询第一个学生成绩 %查询开课教师姓名运行结果如下:ans = 赵凯ans = 高等数学 大学英语 计算机基础 机械制图ans = 86 80 92 79ans = 孙天宇ans = 刘梅芳ans = 王涛ans = 杨一凡3.4.2 股票价格走势预测股票价格走势预测【例3-8】某人打算购买股票,选定某一只股票进行观察其价格变动情况,并进行记录。若当日收盘价格高于上一日的收盘价格,记为1,表示上升;否则记为0,表示下降。连续观察该种股票69天,得如下数据:1001

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论