酒店电话服务优秀案例:我初学C语言,请教一下高手

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 17:14:14
#include "math.h"
main()
{
int m,k,j;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m)
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
printf("%d ",m)
}
printf("\n");
}
为什么程序中i要大于等与k+1,程序才能正确运行,i大于k或i等于k程序输出都是错误的结果??

因为你判数素数中的循环条件是i<=k+1;
如果这一层循环体中的break不能被执行时,循环结束时i和的值至少是等于k+1,而sqrt的返回值是double型的,所以还要大于k+1,才能保证i的覆盖范围啊

你的程序不完整啊,有很多错,最好把题目也贴出来啊……
#include <stdio.h>
#include "math.h"
void main()
{
int m,i;
double k;
for(m=101;m<=200;m=m+2){
k=sqrt(m);//开平方为double型
for(i=2;i>=k;i++)
if(m%i==0) break;//第二个for结束
if(i>=k+1)printf("%d ",m);
}//第一个for结束v
printf("\n");
}

//为什么程序中i要大于等与k+1,程序才能正确运行,i大于k或i等于k程序输出都是错误的结果??

你这个程序是输出101到200之间的所有素数。 如果m为素数,那么i取遍2到k之间的所有值,都不能满足m%i==0,退出for循环的时候i的值是k+1,这正好满足if的条件,于是m被输出。 如果m是偶数,那么总有一个2到k之间的值满足m%i==0,这就执行了break语句,退出循环时i的最大值是k,这不满足if条件,m也就不能被输出。

程序好象是求素数的,不过程序有问题.

这个题目还是很简单的,可你提供的信息给我们不够,什么题目?