I(:,72*(i-1)+1:72*i)=cell{1,xu(i)};為什么不兼容
- 教育綜合
- 2024-03-07 07:57:15
MATLAB中變量的基本數(shù)據(jù)類型是什么?
Matlab中有15種基本數(shù)據(jù)類型,主要是整型、浮點、邏輯、字符、日期和時間、結(jié)構(gòu)數(shù)組、單元格數(shù)組以及函數(shù)句柄等。Matlab主要數(shù)據(jù)類型的結(jié)構(gòu)圖如下所失:
1.整型
整型:通過intmax(class)和intmin(class)函數(shù)返回該類整型的最大值和最小值,例如intmax(‘int8’)=127
2.浮點
浮點數(shù):REALMAX('double')和REALMAX('single')分別返回雙精度浮點和單精度浮點的最大值,REALMIN('double')和REALMIN('single')分別返回雙精度浮點和單精度浮點的最小值。
3.邏輯
Logical:下例是邏輯索引在矩陣操作中的應(yīng)用,將5*5矩陣中大于0.5的元素設(shè)定為0:
A=rand(5);
A(A>0.5)=0
4.字符
Matlab中的輸入字符需使用單引號。字符串存儲為字符數(shù)組,每個元素占用一個ASCII字符。如日期字符:DateString=’9/16/2001’實際上是一個1行9列向量。構(gòu)成矩陣或向量的行字符串長度必須相同??梢允褂胏har函數(shù)構(gòu)建字符數(shù)組,使用strcat函數(shù)連接字符。
例如,命令name=['abc';'abcd']將觸發(fā)錯誤警告,因為兩個字符串的長度不等,此時可以通過空字符湊齊如:name=['abc';'abcd'],更簡單的辦法是使用char函數(shù):char(‘a(chǎn)bc’,’abcd’),Matlab自動填充空字符以使長度相等,因此字符串矩陣的列緯總是等于最長字符串的字符數(shù),例如size(char(‘a(chǎn)bc’,’abcd’))返回結(jié)果[2,4],即字符串’abc’實際存在的是’abc’,此時如需提取矩陣中的某一字符元素,需要使用deblank函數(shù)移除空格如name=char(‘a(chǎn)bc’,’abcd’);deblank(name(1,:))。此外,Matlab同時提供一種更靈活的單元格數(shù)組方法,使用函數(shù)cellstr可以將字符串?dāng)?shù)組轉(zhuǎn)換為單元格數(shù)組:
data=char(‘a(chǎn)bc’,’abcd’)
length(data(1,:))->?4
cdata=cellstr(data)
length(cdata{1})->?3
常用的字符操作函數(shù)
blanks(n)返回n個空字符
deblank(s)移除字符串尾部包含的空字符
eval(string)將字符串作為命令執(zhí)行
findstr(s1,s2)搜索字符串
ischar(s)判斷是否字符串
isletter(s)判斷是否字母
lower(s)轉(zhuǎn)換小寫
upper(s)轉(zhuǎn)換大寫
strcmp(s1,s2)比較字符串是否相同
strncmp(s1,s2,n)比較字符串中的前n個字符是否相同
strrep(s1,s2,s3)將s1中的字符s2替換為s3
5.日期和時間
Matlab提供三種日期格式:日期字符串如’1996-10-02’,日期序列數(shù)如729300(0000年1月1日為1)以及日期向量如1996102000,依次為年月日時分秒。
常用的日期操作函數(shù)
datestr(d,f)將日期數(shù)字轉(zhuǎn)換為字符串
datenum(str,f)將字符串轉(zhuǎn)換為日期數(shù)字
datevec(str)日期字符串轉(zhuǎn)換向量
weekday(d)計算星期數(shù)
eomday(yr,mth)計算指定月份最后一天
calendar(str)返回日歷矩陣
clock當(dāng)前日期和時間的日期向量
date當(dāng)前日期字符串
now當(dāng)前日期和時間的序列數(shù)
6.結(jié)構(gòu)
結(jié)構(gòu)是包含已命名“數(shù)據(jù)容器”或字段的數(shù)組。結(jié)構(gòu)中的字段可以包含任何數(shù)據(jù),例如:
構(gòu)建結(jié)構(gòu)數(shù)組:賦值方法
下面的賦值命令產(chǎn)生一個名為patient的結(jié)構(gòu)數(shù)組,該數(shù)組包含三個字段:
patient.name='JohnDoe';
patient.billing=127.00;
patient.test=[797573;180178177.5;220210205];
在命令區(qū)內(nèi)輸入patient可以查看結(jié)構(gòu)信息:
name:'JohnDoe'
billing:127
test:[3x3double]
繼續(xù)賦值可擴(kuò)展該結(jié)構(gòu)數(shù)組:
patient(2).name='AnnLane';
patient(2).billing=28.50;
patient(2).test=[687068;118118119;172170169];
賦值后結(jié)構(gòu)數(shù)組變?yōu)閇12]。
構(gòu)建結(jié)構(gòu)數(shù)組:struct函數(shù)
函數(shù)基本形式為: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});
訪問結(jié)構(gòu)數(shù)據(jù)
以下都是合法的結(jié)構(gòu)數(shù)組訪問命令:
mypatients=patient(1:2)獲取子結(jié)構(gòu)數(shù)據(jù)
mypatients(1)訪問結(jié)構(gòu)數(shù)據(jù)
patient(2).name訪問結(jié)構(gòu)數(shù)據(jù)中的特定字段
patient(3).test(2,2)訪問結(jié)構(gòu)數(shù)據(jù)中的特定字段(該字段為數(shù)組)
bills=[patient.billing]訪問多個結(jié)構(gòu)
tests={patient(1:2).test}提取結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成單元格數(shù)組
使用結(jié)構(gòu)字段的動態(tài)名稱
通過structName.(expression)可以賦予結(jié)構(gòu)字段名稱并訪問數(shù)據(jù)。例如字段名為expression、結(jié)構(gòu)名為structName,訪問其中第7行1至25列數(shù)據(jù)可以使用命令:structName.(expression)(7,1:25)。
例如,存在一個學(xué)生每周成績數(shù)據(jù)結(jié)構(gòu)數(shù)組,其數(shù)據(jù)通過以下方式建立:
testscores.wang.week(1:25)=...
[958976827992949289817593...
85848386859082828479968898];
testscores.chen.week(1:25)=...
[878091849987938797878289...
86829098757992849093847881];
即結(jié)構(gòu)名為testscores,字段使用每個學(xué)生的名稱命名,分別為wang和chen,每個學(xué)生下面包含名為week的成績結(jié)構(gòu)數(shù)組。
現(xiàn)計算給定結(jié)構(gòu)名稱、學(xué)生名稱和起止周數(shù)的平均分?jǐn)?shù)。
在命令窗口中輸入editavgscore.m,輸入以下代碼后保存文件:
functionavg=avgscore(struct,student,first,last)
avg=sum(struct.(student).week(first:last))/(last-first+1);
在命名窗口中輸入:avgscore(testscores,'chen',7,22)計算學(xué)生陳從第7周到第22周的平均分?jǐn)?shù)。
添加和刪除結(jié)構(gòu)字段
命令[struct](index).(field)可添加或修改字段。如patient(2).ssn='000-00-0000'在結(jié)構(gòu)patient中添加一個名為ssn的字段。
刪除字段使用rmfield函數(shù),如patient2=rmfield(patient,'name')刪除name字段并產(chǎn)生新的結(jié)構(gòu)。
單元格數(shù)組
單元格數(shù)組提供了不同類型數(shù)據(jù)的存儲機(jī)制,可以儲存任意類型和任意緯度的數(shù)組。
訪問單元格數(shù)組的規(guī)則和其他數(shù)組相同,區(qū)別在于需要使用花括號{}訪問,例如A{2,5}訪問單元格數(shù)組A中的第2行第5列單元格。
構(gòu)建單元格數(shù)組:賦值方法
使用花括號標(biāo)識可直接創(chuàng)建單元格數(shù)組,如:
A(1,1)={[143;058;729]};
A(1,2)={'abcd'};
A(2,1)={3+7i};
A(2,2)={-pi:pi/10:pi};
上述命令創(chuàng)建2*2的單元格數(shù)組A。繼續(xù)添加單元格元素直接使用賦值如A(2,3)={5}即可,注意需使用花括號標(biāo)識。簡化的方法是結(jié)合使用花括號(單元格數(shù)組)和方括號()創(chuàng)建,如C={[12],[34];[56],[78]};
構(gòu)建單元格數(shù)組:函數(shù)方法
Cell函數(shù)。如:
B=cell(2,3);
B(1,3)={1:3};
訪問數(shù)據(jù)
通過索引可直接訪問單元格數(shù)組中的數(shù)據(jù)元素,例如:
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)
函數(shù)句柄
函數(shù)句柄是用于間接調(diào)用一個函數(shù)的Matlab值或數(shù)據(jù)類型。在調(diào)用其它函數(shù)時可以傳遞函數(shù)句柄,也可在數(shù)據(jù)結(jié)構(gòu)中保存函數(shù)句柄備用。通過命令形式fhandle=@functionname可以創(chuàng)建函數(shù)句柄,例如trigFun=@sin,或匿名函數(shù)sqr=@(x)x.^2;。
使用句柄調(diào)用函數(shù)的形式是fhandle(arg1,arg2,...,argn)或fhandle()(無參數(shù))。如:
trigFun(1)。例:
functionx=plotFHandle(fhandle,data)
plot(data,fhandle(data))
plotFHandle(@sin,-pi:0.01:pi)
c++的一個小問題--看不懂
while循環(huán)體就是把a(bǔ)[]數(shù)組里的元素從最后一個“1”開始與7比較,如果小于7那么將該元素往后移一位,比如“1”比7小,那么將把它從現(xiàn)在的第7位移動到第8位(注意移位后數(shù)組a就變成了擁有8個元素的一維數(shù)組),顯然從1開始,1,2,4,5,6這五個數(shù)都比7小,所以將它們五個都往后移了一位。 while循環(huán)到數(shù)組元素“6”時結(jié)束循環(huán),執(zhí)行 *(a+i+1)=x語句,因為while循環(huán)了5次,所以i從7減少到2,所以此執(zhí)行語句即是將x的值7賦給數(shù)組a的第三個元素,所以a[2]=7。 接下來for(i=0;i冒泡排序是比較經(jīng)典的排序算法。代碼如下:
for(int i=1;ifor(int j=1;j
}
拓展資料:
原理:比較兩個相鄰的元素,將值大的元素交換至右端。
思路:依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后。重復(fù)第一趟步驟,直至全部排序完成。
第一趟比較完成后,最后一個數(shù)一定是數(shù)組中最大的一個數(shù),所以第二趟比較的時候最后一個數(shù)不參與比較;
第二趟比較完成后,倒數(shù)第二個數(shù)也一定是數(shù)組中第二大的數(shù),所以第三趟比較的時候最后兩個數(shù)不參與比較;
依次類推,每一趟比較次數(shù)-1;
……
舉例說明:要排序數(shù)組:int[]arr={6,3,8,2,9,1};
for(int i=1;i
}
參考資料:冒泡排序原理
EXCEL 多表格 批量查找
文件發(fā)給我
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("輸入要查找的內(nèi)容")
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區(qū)域中含有FindWhat所代表的值的所有單元格組成的Range對象
' 其參數(shù)與Find方法的參數(shù)相同
' 如果沒有找到單元格,將返回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;//各個位上的數(shù)累加
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計數(shù),同時sum是5的倍數(shù)換行;
cout< } } cout< cout<<"滿足條件的個數(shù)為:"< return 0; }
下一篇
返回列表