multichoice Matlab for循环

时间:2014-11-14 05:44:33

标签: matlab for-loop

有谁能告诉我如何手动解决这个问题?

考虑以下MATLAB函数:

function Anew = mystery( A ) 

N=5;  
for ii=2:N     
    Anew(ii)= A(ii-1); 
end   
end  

如果我们定义v = [0,1,2,3,4,5,6,7,8,9,10]x = mystery(v)的输出是什么?

  • a)x = [1 2 3 4 5 6 7 8 9 10]
  • b)x = [1 2 3 4 5 6]
  • c)x = [0 1 2 3 4 5]
  • d)x = [0 0 1 2 3]

1 个答案:

答案 0 :(得分:2)

好的,让我们逐行浏览此代码。


第一行:

N = 5;

这基本上创建了一个名为N的变量,并将值5存储在其中。没什么大不了的。

下一行:

for ii = 2 : N

这是一个for循环,每次循环迭代时,ii的值将改变1.循环第一次运行ii = 2,然后下一次它再次开始,ii = 3最多ii = 5,然后循环停止。

所以,让我们从ii = 2开始。循环内的语句相当于:

Anew(2) = A(2-1);

这简化为:

Anew(2) = A(1);

如果查看代码,Anew从未定义过。当您尝试将值分配给先前未声明的数组中的某个位置时,MATLAB将填充您自动指定为零的位置之前的值。因此,如果您这样做:

Anew(8) = 9; %// For example

Anew看起来像这样:

Anew = 

0    0    0    0    0    0    0    9

第8个位置的值为9,而第8个位置之前的其他位置都为零。因此,通过执行Anew(2) = A(1);Anew的第一个位置为零,而Anew的第二个位置获得A的第一个值并将其置于此处。因此,Anew目前看起来像:

Anew = 

0    0

让我们ii = 3。这意味着在循环中,语句简化为:

Anew(3) = A(3-1);

....这是:

Anew(3) = A(2);

这意味着Anew的第三个位置会复制A的第二个元素。请注意,Anew的原始大小为2.通过执行Anew(3) = A(2);,MATLAB将自动调整Anew的大小,然后将A(2)放入第三个位置Anew。因此,Anew看起来像:

Anew = 

0    0    1

作为一个小测试,如果我们要做Anew(6) = A(2);,这就是它的样子:

Anew = 

0    0    0    0    0    1

请注意,在此之前我们之前有Anew = [0 0];。通过执行Anew(6) = A(2);Anew的第3,第4和第5个位置将填充0,第6个位置的值为1,即A(2)

你现在可以看到一个模式。 Anew的每个位置都会将A的元素向左移动1.因此,对于ii = 4

Anew(4) = A(3);

现在的样子是:

Anew = 

0    0    1    2

最后,对于ii = 5,我们得到:

Anew(5) = A(4);

现在的样子是:

Anew = 

0    0    1    2    3

在此循环结束后,Anew将作为mystery的输出返回。

因此,答案是(d)x = [0 0 1 2 3];


希望这有帮助!