数学建模----MATLAB----for&&while循环(进阶)

时间:2024-04-06 08:46:10

目录

1.for循环的运用

(1)求和计算

(2)闰年的判断

(3)斐波那契数列的计算

(4)一列数的5个数据一样,删除,5个数据不一样,就保留下来;

2.while循环

(1)基本语法

(2)条件断点的设置

(3)斐波那契数列

(4)循环注意事项

3.循环里面的break&&continue

(1)break语句

(2)continue语句


1.for循环的运用

(1)求和计算

利用for循环求和,设置求和变量和循环变量:

我们可以打印出来每次计算的结果:

这个双重循环就可以把每次计算的结果打印出来;

(2)闰年的判断

mod是求余函数,count作为一个计数器,每次遇到符合条件的数字,就会加上1,最后得到9999个数字里面,闰年的个数;

(3)水仙花数的打印输出

水仙花数就是每个数位上面数字的立方等于这个数字本身的数字,我们需要得到一个数字每个数位上面的数字,这个就要用到除数/求余函数(floor函数是求商,mod是求余数;

这2个函数,floor里面的是斜杠,mod里面的是逗号,最后我们把符合条件的水仙花数添加到我们的空向量S里面;

对于拿到一个数字每个数位上面的数,我们还有其他的方法,这个就要用到字符串的相关知识,我们这里只是认识一下,后面还是会遇到的:

num2str就是把数字转换成字符串,str2num就是把字符串转换为数字;

我们先随机生成一个数字,然后转换成字符串,字符串进行转置后再转换成数字,就可以取出里面的每一位;

我们设置temp是一个列向量,temp(1)就是里面的第一个元素,这样就可以使用temp(n)拿到里面的每一个元素,立方之后求和在和num进行比较就可以了;

(3)斐波那契数列的计算

我们这里计算前30项:

先是生成一个行向量(30个全1),这样我们每次计算的结果放进去就可以覆盖原来的结果了;

因为斐波那契数列的前面2个元素都是1,因此我们的k从3开始算的;

每次计算一个结果放到我们自己定义的向量里面去,这样就可以观察到计算的过程(把分号去掉)

(4)一列数的5个数据一样,删除,5个数据不一样,就保留下来;

我们首先要随机生成一个矩阵:用来存储符合条件的某几列,arr2=unique(column)这个代码的意思就是unique是一个函数,这个函数的返回值就是这个向量里面唯一的数字,因为这个for循环,我们每一次都是从arr里面取出来一列,也就是说,如果这一列的数字里面的某个数字重复出现的话,我们就会只保留一次,举一个简单的实例:例如我们的column有5个数字2 3 4 5 3,这个行向量的5个数字里面,3出现了两次,经过unique函数的调用以后,arr2这个行向量里面的数字就是2 3 4 5,也就是只剩下了4个数字,这4个数字互不相同,然后我们再去计算这个新的向量的长度,如果他经过了unique函数的调用之后,长度依然是5,就可以表明这个行向量的5个元素是互不相同的,这个里面判断完成之后相当于是进行了一个字符串的拼接,只不过这个里面没有字符串,都是列向量,我们把符合条件的列向量重新放到一个新的向量newarr里面去;

下面还有一种解决方案:利用众数,返回的第一个是众数的具体值,这个我们并不关注(所以在代码里面我是用波浪线进行标识的),我们关注的是出现的次数,如果f=1,也就是说明这个数组里面的众数,也就是出现的次数最多的数字,也就出现了一次,说明这个数组里面的数字各不相同,否则,有任何两个数字是一样的,众数就是2了,这个也是可以进行判断的,最后我们把符合条件的这一列添加到我们新建的空的向量newarr里面去;

(5)注意事项

1.for语句后面的是空语句,那么循环体一次也不会执行:

这个地方的2:1就是一个空语句,那么在matlab里面就不会把我们的变量x的值10打印出来;

2.for后面的语句只会在开始的时候使用一次,后续的时候,就算我们进行修改,执行的还是原来的

下面的这个实例,我们企图通过循环体里面的语句,把原来的1~4,全部修改为0,然后进行打印,但是最后输出的结果还是我们原来的1~4;

3.下面我们在循环的时候企图修改变量的值,但是修改后的值会打印输出,原来的向量里面的值还是会打印,这个就是想说明我们尽量不要在循环里面修改变量的值;

2.while循环

(1)基本语法

判断n最小是多少,1+1/2+1/3+.........+1/n的结果大于10;

while可以理解为当什么时候的意思,当我们while后面的判断条件是真的时候,就会执行循环,否则就会跳出循环;

我们把每次循环的结果累加到y的上面,当y<=10的时候,就会不断的执行循环体,当y>10就已经符合题意了,while后面的y<=10就是false,所以会跳出循环;

(2)条件断点的设置

设置断点之后右键选择“设置修改条件”;

设置对应的条件,因为上面我们已经知道了n=12367,所以我们设置mod(n,1000)=0,就是在n能够被1000整除的时候,才会执行这个断点;例如1000,2000,执行12次之后,n就是12000,再执行一次就打于12367了,这个时候就会跳出循环;(这个时候第一次到断点的位置n=1000,我们调试的时候应该训选择继续键,如果我们选择的是步进,就会1000,1001,1002,1003这样就行,如果我们选择继续,就会直接跳转到1000,2000,3000,这样进行下去);

(3)斐波那契数列

设计程序求斐波那契数列里面,第一个大于99999的数字是多少:

我们都知道斐波那契数列的前两个数字都是1,后面的一项是前面的两项的求和,我们设置循环的条件是a(n)<99999,符合条件就n加上1,不符合条件就找到了,退出循环;

最后的a是一个1*26的行向量,我们要找的是第一个大于99999的数字,就是a这个行向量的最后一个元素,我们使用a(end)就可以得到最后的一个元素,也就是第一个大于99999的数字;

(4)循环注意事项

while后面并不一定要是n<1000这样的判断表达式,也可以是常数,或者是向量:

只有后面的常数是非0数字的时候,循环才会继续执行,是0就会跳出循环;

后面的表达式是向量的情况:只有向量的元素都不是0,循环才会执行,向量里面只要有一个元素是0,循环就不会执行;

我们这个地方是定义了一个2*2的方阵,因为元素是1,2,3,4所以循环可以执行,我们的循环体里面修改向量的元素是0,这个时候循环就不会继续执行,所以刚开始进入循环,修改为0之后不符合循环的条件,直接跳出循环,只会输出一个矩阵;如果刚开始的时候4个元素,1,2,3,4里面的任何一个是0,比如1 2 3 0,或者1,2,0,3有0,循环就不会执行。

3.循环里面的break&&continue

(1)break语句

还是用这个题目举例子:

我们在刚开始的时候可以给n设置一个超级大的范围,当使用if语句判断y>10的时候,就会break终止循环;

(2)continue语句

求出1~10里面的奇数: