C语言几个简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 15:52:05
仍然是判素数,有一个地方未懂,讲解一下来

这个程序:
#include<math.h>
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for (i=2;i<=k;i++)
if (m%i==0)break;
if(i>k)printf("%d is a prime number\n",m);
else printf("%d is not a prime number\n",m);
}

最后else那句,有什么作用啊
可以不要吗
问题是这样的:如果i<=k那就一定不是素数了啊?为什么呢?

这个应该是求素数的程序,就是一个数只能被1和他自己整除
else的作用是打印出这个数不是素数。
如果不要else对程序没有任何影响,只是说明如果什么都没有打印显示出来就说明这个数不是素数
补充:
#include<math.h>
main()
{
int m,i,k;
scanf("%d",&m); //输入需要判断的数m
k=sqrt(m);
//计算k=m的平方根(因为如果输入12,3*4和4*3是一样的,所以只需要计算小于m的平方根的循环就好。并且这里的k是int的,sqrt(m)计算出来的是double的,所以舍去小数部分)
for (i=2;i<=k;i++)
if (m%i==0)break;
//上面两句是循环,当m/i的余数为0的时候跳出循环。如果是素数,则素数不可能被大于等于2和小于等于自己平方根的数整除(因为他只能被1和自己整除),所以if语句一直不成立。另外,for语句的执行情况是,当判断i<=k成立时,执行for语句,并且最后计算i++在执行判断语句。当i=k时,判断还是成立的,因此还会计算一遍if语句,然后再执行i++语句,这个时候i就>k了,不满足for的判断语句,跳出循环(这个时候m没有被任何一个i整除)。如果m被其中一个i整除的时候,也就是当i<=k时,就满足if(m%i==0),则执行break语句,跳出循环,这个时候m当然也就不是素数(被不是1和他自己的数i整除)
if(i>k)printf("%d is a prime number\n",m);
//如果是素数,做什么
else printf("%d is not a prime number\n",m);
//不是素数,做什么

}
说得比较罗嗦,希望你能看明白

可以不要啊~
因为只有种可能
如果你加了系统还会认为你错

printf语句是输出语句,这句话的作用是用来