我们要先了解一下什么是质数(素数),这里我仅大概叙述一下:质数(素数)就是除了1和它本身不能被其他自然整数整除的数值,若不懂请先自行百度百科
好了,我们了解完之后,我们就开始思考任务二的问题“输出某个范围内的所有质数(素数)”我们就来先输出[2,100]之间的所有质数(素数)吧,
首先我们的思路和上页的思路基本一致,先判断用户输入的一个数值是否是质数(素数)
这里的代码和质数(素数)的定义混合在一起,会有点逻辑上的难题,我思考了很长时间才写出来,大家刚开始学要慢慢分析,这里要多花点时间学习下,
因为不能被1和其自身整除,所以我们“for()”循环的初始变量为 i=2;i<sum;i++,
如果 用户输入的数值sum能够整除i的话,那么就要跳出循环
在外面为何要有一个 条件判断呢?
那是因为,我们跳出循环有两种情况,
情况一是执行了“break;”直接终止了正在循环的循环,
情况二是没有执行“break;”语句自行执行循环完毕跳出循环的,
若是情况一,则用户输入的数值肯定被某个整数整除了,固然就不可能是质数(素数)了,且直接循环终止,所以“i<sum”,
若是情况二,则用户输入的数值没有被某个整数整除,则绝对是质数(素数),那么循环是自动结束的,故“i>=sum”,
代码如下:
#include<stdio.h> int main() { int sum,i; scanf("%d",&sum); for(i=2;i<sum;i++) { if(sum%i==0) break; } if(i<sum) printf("非质数\n"); else printf("质数\n"); }
调试代码截图:
好了,我们了解了 判断单个数值是否为质数,那么我们要求的是输出[2,100]内的所有质数,那么我们应该怎么去完成呢?
其实,这也与上页的内容基本相似,加上一个循环,就可以实现我们想要的,
代码如下:只是在上方的单个判断加上了个循环而已,就实现了我们想要的结果,
#include<stdio.h> int main() { int sum,i; for(sum=2;sum<=100;sum++) { for(i=2;i<sum;i++) { if(sum%i==0) break; } if(i>=sum) printf("%d\n",sum); } }
代码调试截图:
对比一下“质数表”
发现我们的结果都是正确的。
小结:
我们通过学习了这两道题,我们应该会悟道一丝丝小灵感,写循环判断之前,我们应该先单独试一试内层的代码是否正确,之后外套循环即可,这样能省下我们大部分的时间和精力。
写代码时,要记得花括号相对应,且尽量能自行缩进代码就要缩进,不仅美观而且能让我们的思路更加清晰。
如果大家看完了,还没有悟道我所说的,那么请你自己写一遍这两道题,从错误中,慢慢领悟,不要急!
习题:
1.用C语言输出所有的四叶玫瑰数(代码和调试截图)
2.用C语言输出[1,100]以内的所有合数(代码和调试截图)
参考答案在下一页!
评论抢沙发