快捷搜索:  汽车  科技

labview循环求11到99中的偶数之和(如何求解1000以内的所有素数)

labview循环求11到99中的偶数之和(如何求解1000以内的所有素数)注意,在LabVIEW的for循环中,可以提前结束循环,相当于C语言中的break语句,其方法是,选中for循环框,点击右键,在弹出的右键菜单中选择"条件接线端",即可出现上图所示的条件结束特符号。通过这种方式,在用2到根号下x 之间的所有整数去除x的时候,只要出现一个能整除的情况(余数为0)就说明x不是一个素数,此时就可以跳出结束for循环,没必要循环完所有的次数。在上面代码中,使用for循环,循环次数为(根号下x)-1,其中,对x开根号后要向下取整并强制转换为一个32位的整数类型。在for循环内部,从2开始,用"商与余数.vi"函数逐个去整除x,若余数为0,则跳出for循环,即for循环结束,在循环结束后,将余数是否为0的判断值输出到循环外,若为0,则说明这个数不是素数,所以对其取反,作为整个子程序的输出,用来标示当前数是否为素数。对于第二个问题,遍历1000以内的所有大于1的自然数,

实例说明

先看一下什么是素数:素数也叫质数(primer number),是指一个大于1的自然数,除了1和它自身外,不通整除其它自然数的数,符合这种规律的数就叫素数。

素数有无穷多个,那么在LabVIEW中如何编程实现求解1000以内的所有素数呢?

编程思路

求解1000以内的所有素数,这个问题可以分解为下面两个问题:

  • 如何判断一个数是否为素数
  • 查找1000以内的所有符合条件的素数

对于第一个问题,基本的判断思路比较简单:对于一个大于1的正整数x,如果用2到根号下x 之间的所有整数去除,均不能整除,则这样的x可以判断为是一个素数。

对于第二个问题,遍历1000以内的所有大于1的自然数,逐个判断是否为素数,若是,则统计出来,否则忽略。

下面看一下在LabVIEW中如何编程解决这两个问题。

如何判断一个数是否为素数

在LabVIEW写一个子程序,命名为"isPrimeNumber.vi",该子程序输入一个整数"x",输出一个布尔值"是素数?",若x是素数,则布尔值为真,反之为假,其框图程序的实现代码如下:

labview循环求11到99中的偶数之和(如何求解1000以内的所有素数)(1)

在上面代码中,使用for循环,循环次数为(根号下x)-1,其中,对x开根号后要向下取整并强制转换为一个32位的整数类型。在for循环内部,从2开始,用"商与余数.vi"函数逐个去整除x,若余数为0,则跳出for循环,即for循环结束,在循环结束后,将余数是否为0的判断值输出到循环外,若为0,则说明这个数不是素数,所以对其取反,作为整个子程序的输出,用来标示当前数是否为素数。

注意,在LabVIEW的for循环中,可以提前结束循环,相当于C语言中的break语句,其方法是,选中for循环框,点击右键,在弹出的右键菜单中选择"条件接线端",即可出现上图所示的条件结束特符号。通过这种方式,在用2到根号下x 之间的所有整数去除x的时候,只要出现一个能整除的情况(余数为0)就说明x不是一个素数,此时就可以跳出结束for循环,没必要循环完所有的次数。

查找1000以内的所有符合条件的素数

编写一个主程序来调用上面的子程序"isPrimeNumber.vi",查找1000以内所有符合条件的素数,其框图程序的实现代码如下:

labview循环求11到99中的偶数之和(如何求解1000以内的所有素数)(2)

根据素数的定义,使用for循环查找2-1000以内的所有素数,循环次数为999次,在for循环中添加一个移位寄存器用以存储所有的素数,其初始值为一个空数组。在循环内部逐个数判断是否为素数,若是素数,则使用"数组插入.vi"函数添加到移位寄存器的数组中,否则,移位寄存器中的值保留为上次的值。

循环结束后,移位寄存器数组中的值即为1000以内所有符合条件的素数,为方便查看结果,本例中将数组的所有元素使用"数组至电子表格字符串转换.vi"函数转换为字符串在前面板上进行显示,其显示结果如下,从图中可以看出,通过本程序,已经完整的求出了1000以内所有的素数了。

labview循环求11到99中的偶数之和(如何求解1000以内的所有素数)(3)

总结

通过这个例子可以学习到的知识点包括:

  • for循环 break 移位寄存器的用法
  • 子程序的编程方法
  • 数组插入及至电子表格字符串的转换方法。

如果你觉得这篇文章对你有用的话,抖抖小手点个赞吧。

猜您喜欢: