起凡免费三天会员注册:关于C编程的初级小问题,很有意思的!!!

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 07:07:34
void main(){
int n,i;
for(n=2;n<=100;n++){
for(i=2;i<n;i++)
if(n%i==0) break;
if(i>=n) printf("\t%d",n);
}
} int n,i;
for(n=2;n<=100;n++){
for(i=2;i<n;i++)
if(n%i==0) break;
if(i>=n) printf("\t%d",n);
}
本例程序中,第一层循环表示对1~100这100个数逐个判断是否是素数,共循环100次,在第二层循环中则对数n用2~n-1逐个去除,若某次除尽则跳出该层循环,说明不是素数。 如果在所有的数都是未除尽的情况下结束循环,则为素数,此时有i>=n, 故可经此判断后输出素数。

问题(1):
为什么i能大于等于n?前面不是已经规定了”for(i=2;i<n;i++)”吗?

问题(2)
为什么i>=n就表明是素数了?

#include"math.h"
void main(){
int n,i,k;
for(n=2;n<=100;n+=2){
k=sqrt(n);
for(i=2;i<k;i++)
if(n%i==0) break;
if(i>=k) printf("\t%2d",n);
}
}

问题(3):k=sqrt(n);是什么函数?
还望赐教,万分感谢!!!

首先素数是:它除了能表示为它自己和1的乘积
以外,不能表示为任何其它两个整数的乘积,例如:7

为了更清楚的让你理解,我就用举例的方法,来说一下。
我们就拿7来举例。
当在第一个for语句n=7时,第二个for 语句起的作用是判断它是否是素数,如果是素数,打印。如果不是,跳出。
1,在第二个for 语句中,当i=6时并且执行完这一次循环后,他们没有跳出,因为6 < n 。所以它又返回到 i++,上,故附值7,然后再判断是否小于n,当然,它不符合,所以跳出。跳到if(i>=n) printf("\t%d",n)。所以,会出现i=n的情况。(这是for 语句的应用,可以仔细的看一下相应的教材)。

2,要问为什么i>=n就是素数了,这首先要看你对第二个for 语句的理解,并且理解什么是素数。第二个for 语句是用来判断n是否会被从2到n-1的数整除,如果能,跳出,i就不会大于等于n,n就不是素数。反之,如果从2到n-1没有数能被n整除,那么i将会等于n跳出,即它是素数,故被print。

3,sqrt是开根。注:在头文件要有#include"math.h"

很简单, 规定的是循环的条件 i<n,而当 i>=n是为素数,是因为第二层循环完全循环,那么i肯定要与循环条件相反,才能正常跳出循环,如果是由break中止循环的话,也就是循环中止不是由 i<n判断得出,所以i>=n不受i<n所限制!

关注