当前位置:首页 > 教育综合 > 正文

I(:,72*(i-1)+1:72*i)=cell{1,xu(i)};为什么不兼容

MATLAB中变量的基本数据类型是什么?

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。Matlab主要数据类型的结构图如下所失:

1.整型

整型:通过intmax(class)和intmin(class)函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127

2.浮点

浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN('single')分别返回双精度浮点和单精度浮点的最小值。

3.逻辑

Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0:

A=rand(5);

A(A>0.5)=0

4.字符

Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’实际上是一个1行9列向量。构成矩阵或向量的行字符串长度必须相同。可以使用char函数构建字符数组,使用strcat函数连接字符。

例如,命令name=['abc';'abcd']将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name=['abc';'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数,例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name=char(‘abc’,’abcd’);deblank(name(1,:))。此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组:

data=char(‘abc’,’abcd’)

length(data(1,:))->?4

cdata=cellstr(data)

length(cdata{1})->?3

常用的字符操作函数

blanks(n)返回n个空字符

deblank(s)移除字符串尾部包含的空字符

eval(string)将字符串作为命令执行

findstr(s1,s2)搜索字符串

ischar(s)判断是否字符串

isletter(s)判断是否字母

lower(s)转换小写

upper(s)转换大写

strcmp(s1,s2)比较字符串是否相同

strncmp(s1,s2,n)比较字符串中的前n个字符是否相同

strrep(s1,s2,s3)将s1中的字符s2替换为s3

5.日期和时间

Matlab提供三种日期格式:日期字符串如’1996-10-02’,日期序列数如729300(0000年1月1日为1)以及日期向量如1996102000,依次为年月日时分秒。

常用的日期操作函数

datestr(d,f)将日期数字转换为字符串

datenum(str,f)将字符串转换为日期数字

datevec(str)日期字符串转换向量

weekday(d)计算星期数

eomday(yr,mth)计算指定月份最后一天

calendar(str)返回日历矩阵

clock当前日期和时间的日期向量

date当前日期字符串

now当前日期和时间的序列数

6.结构

结构是包含已命名“数据容器”或字段的数组。结构中的字段可以包含任何数据,例如:

构建结构数组:赋值方法

下面的赋值命令产生一个名为patient的结构数组,该数组包含三个字段:

patient.name='JohnDoe';

patient.billing=127.00;

patient.test=[797573;180178177.5;220210205];

在命令区内输入patient可以查看结构信息:

name:'JohnDoe'

billing:127

test:[3x3double]

继续赋值可扩展该结构数组:

patient(2).name='AnnLane';

patient(2).billing=28.50;

patient(2).test=[687068;118118119;172170169];

赋值后结构数组变为[12]。

构建结构数组:struct函数

函数基本形式为:strArray=struct('field1',val1,'field2',val2,...)

例如:

weather(1)=struct('temp',72,'rainfall',0.0);weather(2)=struct('temp',71,'rainfall',0.1);

weather=repmat(struct('temp',72,'rainfall',0.0),1,3);

weather=struct('temp',{68,80,72},'rainfall',{0.2,0.4,0.0});

访问结构数据

以下都是合法的结构数组访问命令:

mypatients=patient(1:2)获取子结构数据

mypatients(1)访问结构数据

patient(2).name访问结构数据中的特定字段

patient(3).test(2,2)访问结构数据中的特定字段(该字段为数组)

bills=[patient.billing]访问多个结构

tests={patient(1:2).test}提取结构数据转换成单元格数组

使用结构字段的动态名称

通过structName.(expression)可以赋予结构字段名称并访问数据。例如字段名为expression、结构名为structName,访问其中第7行1至25列数据可以使用命令:structName.(expression)(7,1:25)。

例如,存在一个学生每周成绩数据结构数组,其数据通过以下方式建立:

testscores.wang.week(1:25)=...

[958976827992949289817593...

85848386859082828479968898];

testscores.chen.week(1:25)=...

[878091849987938797878289...

86829098757992849093847881];

即结构名为testscores,字段使用每个学生的名称命名,分别为wang和chen,每个学生下面包含名为week的成绩结构数组。

现计算给定结构名称、学生名称和起止周数的平均分数。

在命令窗口中输入editavgscore.m,输入以下代码后保存文件:

functionavg=avgscore(struct,student,first,last)

avg=sum(struct.(student).week(first:last))/(last-first+1);

在命名窗口中输入:avgscore(testscores,'chen',7,22)计算学生陈从第7周到第22周的平均分数。

添加和删除结构字段

命令[struct](index).(field)可添加或修改字段。如patient(2).ssn='000-00-0000'在结构patient中添加一个名为ssn的字段。

删除字段使用rmfield函数,如patient2=rmfield(patient,'name')删除name字段并产生新的结构。

单元格数组

单元格数组提供了不同类型数据的存储机制,可以储存任意类型和任意纬度的数组。

访问单元格数组的规则和其他数组相同,区别在于需要使用花括号{}访问,例如A{2,5}访问单元格数组A中的第2行第5列单元格。

构建单元格数组:赋值方法

使用花括号标识可直接创建单元格数组,如:

A(1,1)={[143;058;729]};

A(1,2)={'abcd'};

A(2,1)={3+7i};

A(2,2)={-pi:pi/10:pi};

上述命令创建2*2的单元格数组A。继续添加单元格元素直接使用赋值如A(2,3)={5}即可,注意需使用花括号标识。简化的方法是结合使用花括号(单元格数组)和方括号()创建,如C={[12],[34];[56],[78]};

构建单元格数组:函数方法

Cell函数。如:

B=cell(2,3);

B(1,3)={1:3};

访问数据

通过索引可直接访问单元格数组中的数据元素,例如:

N{1,1}=[12;45];

N{1,2}='Name';

N{2,1}=2-4i;

N{2,2}=7;

c=N{1,2}

d=N{1,1}(2,2)

函数句柄

函数句柄是用于间接调用一个函数的Matlab值或数据类型。在调用其它函数时可以传递函数句柄,也可在数据结构中保存函数句柄备用。通过命令形式fhandle=@functionname可以创建函数句柄,例如trigFun=@sin,或匿名函数sqr=@(x)x.^2;。

使用句柄调用函数的形式是fhandle(arg1,arg2,...,argn)或fhandle()(无参数)。如:

trigFun(1)。例:

functionx=plotFHandle(fhandle,data)

plot(data,fhandle(data))

plotFHandle(@sin,-pi:0.01:pi)

c++的一个小问题--看不懂

while循环体就是把a[]数组里的元素从最后一个“1”开始与7比较,如果小于7那么将该元素往后移一位,比如“1”比7小,那么将把它从现在的第7位移动到第8位(注意移位后数组a就变成了拥有8个元素的一维数组),显然从1开始,1,2,4,5,6这五个数都比7小,所以将它们五个都往后移了一位。 while循环到数组元素“6”时结束循环,执行 *(a+i+1)=x语句,因为while循环了5次,所以i从7减少到2,所以此执行语句即是将x的值7赋给数组a的第三个元素,所以a[2]=7。 接下来for(i=0;ijava冒泡排序法代码

冒泡排序是比较经典的排序算法。代码如下:

for(int i=1;ifor(int j=1;j//交换位置
}

拓展资料:

原理:比较两个相邻的元素,将值大的元素交换至右端。

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较;

第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较;

依次类推,每一趟比较次数-1;

……

举例说明:要排序数组:int[]arr={6,3,8,2,9,1};

for(int i=1;ifor(int j=1;j//交换位置
}

参考资料:冒泡排序原理

EXCEL 多表格 批量查找

文件发给我

Sub 多表查找()


Dim i, j As Integer

Dim findcell, findcells As Range

Dim sr As String

Dim lastrow As Integer

Dim sh As Worksheet

sr = InputBox("输入要查找的内容")

If Sheets(1).Name <> sr Then

Set sh = Sheets.Add

sh.Move before:=Sheets(1)

sh.Name = sr

End If

For i = 2 To Sheets.Count


Set findcells = FindAll(SearchRange:=Sheets(i).Cells, FindWhat:=sr, _

LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False)

If Not findcells Is Nothing Then

For Each findcell In findcells

j = j + 1

findcell.EntireRow.Copy Sheets(sr).Rows(j)

Next findcell

Else

GoTo jixu

End If

jixu:

Next i

End Sub

Function FindAll(SearchRange As Range, FindWhat As String, _

Optional LookIn As XlFindLookIn = xlValues, Optional LookAt As XlLookAt = xlWhole, _

Optional SearchOrder As XlSearchOrder = xlByRows, _

Optional MatchCase As Boolean = False) As Range

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' 返回SearchRange区域中含有FindWhat所代表的值的所有单元格组成的Range对象

' 其参数与Find方法的参数相同

' 如果没有找到单元格,将返回Nothing.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim FoundCell As Range

Dim FoundCells As Range

Dim lastcell As Range

Dim FirstAddr As String

With SearchRange

Set lastcell = .Cells(.Cells.Count)

End With

Set FoundCell = SearchRange.Find(what:=FindWhat, After:=lastcell, _

LookIn:=LookIn, LookAt:=LookAt, SearchOrder:=SearchOrder, MatchCase:=MatchCase)

If Not FoundCell Is Nothing Then

Set FoundCells = FoundCell

FirstAddr = FoundCell.Address

Do

Set FoundCells = Application.Union(FoundCells, FoundCell)

Set FoundCell = SearchRange.FindNext(After:=FoundCell)

Loop Until (FoundCell Is Nothing) Or (FoundCell.Address = FirstAddr)

End If

If FoundCells Is Nothing Then

Set FindAll = Nothing

Else

Set FindAll = FoundCells

End If

End Function

用c++怎么编程这一题?

#include

using namespace std;

int fun(int x)

{

int sum=0,t=0;

t=x;

while(t)

{

sum+=t%10;//各个位上的数累加

t/=10;

}

if(x%11==0&&sum==13)

return 1;

else

return 0;

}

int main()

{

int sum=0;

for(int i=1;i<=1000;i++)

{

if(fun(i)==1)

{

sum++;

cout<

if(sum%5==0)//sum计数,同时sum是5的倍数换行;

cout<

}

}

cout<

cout<<"满足条件的个数为:"<

return 0;

}

展开全文阅读