程序设计求任意数后面的的任意个素数存在数组中
先看代码和运行结果
重点是第一张图是我们考试要写的部分
首先我们写一个新函数 pri函数 pri(y)如果y是素数返回值一 y不是素数返回值0 然后用这个函数求 假设我们输入 17 5 第一个需要检验的就是18是不是素数 发现不是 不是的话返回值不是1就不会存入 然后看i=19 19是素数存入数组 然后数组下标先是xx【0】=19然后下标x自+1 x也就是为1 然后x【1】=23 最后x【4】=37 x再自+=5 设置循环结束条件 x==k break 17 5都是我们输入的参数 那么这题解决了 下面我们来看一个错误的解法 错误使用了break语句
我们来分析核心部分第二个图的错误 为什么10它不是素数也会被打印出来 因为break语句是终止内层循环 终止后不会立刻返回外循环迭代条件而是会执行内循环结束后外循环认下的语句 所以10 在break后任然会进入下面的打印语句被打印出来 所以这个程序是错的 printf放到前面也不行 补充 刚刚我们说那个用break语句的代码是错的 错因就是break结束内循环后无法直接返回外循环迭代条件 而是会执行外循环在内循环结束后下面的语句 这是错误的根源 那如果我们非要用break语句行不行 也是可以的 把内循环后面不设置语句这样内循环后面自动就是外循环迭代条件了 比如我们现在来看 求1- 100之间的素数并把它们存储在数组a中这个程序
因为1 2不是素数所以i从三开始 这个程序设置双循环 如果检测到一次i被整除立即结束内循环由于内循环后面没语句所以返回迭代条件(✓) 并且如果一直找不到整除的 一直执行到j=i-1 那么就把i赋值给数组元素也就是a【x】=i 然后x++ 不断增加数组下标然后赋值 最后打印数组 这一步为什么i<=(x-1)呢 因为当最后一个i被存入数组a【】后x又自加了1 x最终值为数组最大下标加一 所以i最大值为x-1 这样就能打印出数组所有元素了 x也就是1-100内素数个数(因为数组下标是从0开始)