Alex_McAvoy

想要成为渔夫的猎手

Matlab 循环结构

【循环结构】

循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构,其根据循环体中的条件来判断继续执行某个功能还是退出循环。

循环结构可以看做一个条件判断语句与一个转向语句的组合,其三要素是:循环变量、循环体、循环终止条件。

依据判断条件,循环结构分为当型循环和直到型循环

  • 当型循环:先判断再执行,直到条件不成立时退出循环(for 语句、while 语句)
  • 直到型循环:先执行,后判断(do-while 语句,matlab中没有,若想使用,需将 while 与 if 语句结合构建)

【for 语句】

语句结构:

1
2
3
for 循环条件
语句序列
end

流程图:

实例:

1
2
3
4
5
sum=0;
for i=1:100
sum=sum+i;
end
disp(sum);

说明:

  • 循环条件是切片表达式 start:step:end,用于指定循环体的执行次数,该次数由切片表达式所创建的数组的列数来确定
  • 语句序列被称为循环体,其可以是一条命令、多条命令(顺序结构)、控制结构、循环结构
  • 依靠缩进来识别代码块
  • 语句以end结尾
  • for 语句执行次数是确定的,执行次数为:$\frac{end-start}{step}$

【while 语句】

语句结构:

1
2
3
while 循环条件
语句序列
end

流程图:

实例:

1
2
3
4
5
6
7
sum=0;
i=1;
while i<=100
sum=sum+i;
i=i+1;
end
disp(sum);

说明:

  • 循环条件是一个关系表达式或逻辑表达式,通过表达式来控制循环体执行的次数
  • 语句序列被称为循环体,其可以是一条命令、多条命令(顺序结构)、控制结构、循环结构
  • 依靠缩进来识别代码块
  • 语句以end结尾
  • 表达式的值一般都是标量值,但若表达式为数组且所有元素逻辑值为真时,while 语句依然会照样执行循环,但不推荐将数组作为表达式使用,若表达式为空数组时,默认值为假,结束循环
  • 与 for 语句的区别:while 语句执行次数不确定,for 语句执行次数确定

【do-while 语句】

由于 for 语句和 while 语句都是当型循环,而 matlab 中并没有提供直到型循环,因此若想使用直到型循环,需要自己进行构建。

语句结构:

1
2
3
4
5
6
while 1
语句序列
if 循环条件
break;
end
end

流程图:

实例:

1
2
3
4
5
6
7
8
9
10
sum=0;
i=1;
while 1
sum=sum+i;
i=i+1;
if i==101
break
end
end
disp(sum);

【continue 与 break】

continue 语句

continue 语句会将控制权传给下一个循环的迭代,忽略该次循环剩下的语句。

在循环嵌套中,在内层循环中使用 continue 会把控制权传给本次外层循环中,下一个内层循环所嵌套的迭代。

简单来说,使用 continue 后,直接结束本层循环,前往下一层循环。

在实际应用中,常通过 if 语句来控制是否执行 continue

实例:

1
2
3
4
5
6
7
8
9
10
sum=0;
i=1;
while i<=100
i=i+1;
if mod(i,10)==0
continue
end
sum=sum+i;
end
disp(sum);

break 语句

在循环语句中,有时不需要运行到最后一次循环,即可得到所需的结果,那么后续的循环过程不仅浪费了运行时间,还占据了内存。

利用 break 语句,可以立即终止循环结构。

在实际应用中,常通过 if 语句来控制是否执行 break

实例:

1
2
3
4
5
6
7
8
9
10
sum=0;
i=1;
while i<=100
i=i+1;
sum=sum+i;
if i==11
break;
end
end
disp(sum);

【循环下的数组与结构体】

数组

预分配空间:a=[]*n,n 是分配的空间数

将多个数据输入到数组:

  • 方法一:循环输入

    1
    2
    3
    4
    5
    n=input('n=');
    a=[]*n;
    for i=1:n
    a(i)=input('a=');
    end
  • 方法二:一次性输入,循环解析

    1
    2
    3
    4
    5
    6
    7
    n=input('n=');
    a=[]*n;
    str=input('str=','s');
    str=strsplit(str,' '); % 按空格分割字符串,返回值是一元胞数组
    for i=1:n
    a(i)=str2num(str{i});
    end

循环访问数组:

1
2
3
for i=1:n
disp(a(i));
end

结构体数组

定义:

1
2
3
4
for i=1:n
people(i).name=input('name:','s');
people(i).age=input('age:');
end

访问:

1
2
3
for i=1:n
disp(people(i).name);
end
感谢您对我的支持,让我继续努力分享有用的技术与知识点!