数学建模----MATLAB----for&&while循环(进阶)
阑梦清川 2024-06-14 13:35:03 阅读 66
目录
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里面的奇数:
上一篇: C++第二十一弹---vector深度剖析及模拟实现(上)
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。