求助C语言中这个是什么问题

这是一个求素数的,为什么输入识别会说有一个警告,而且求好心人告知一下这个求素数的原理,有点混乱,老师讲的没太听明白。。。#include<stdio.h>#include<math.h>main(){ int n,i,k; scanf("%d",&n); k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0) break; if(i>=k+1) printf("yes"); else printf("no");}

素数就是不被除了1和本身的任何自然数整数整除的自然数。所以只要不被整除就是素数。
sqrt()只是为了优化算法而已。
2是素数:if(n==2) {printf("\n2 is susuo ?Yes");return;}//return 结束程序。
其他只有奇数才是素数:
if(n%2==0){printf("\n%d is susuo ?No",n);return;} //被整除:NO
else {
k=(int)sqrt(n);
for(int i=3;i<=k;i+=2)
if(n%i==0) {printf("\n%d is susuo ?No",n);return;}//被整除:NO
}
printf("\n%d is susuo ?Yes",n);//程序能跑到这里的都不被整除:Yes.
return;追问

自己做不出才按照老师的做法做的。。。初学者。。。,不过为啥把老师一模一样的输入电脑里会出警告呢?

追答

sqrt函数返回一个double类型的值, k是一个int类型,显式转换就没警告了。强制转换(int)sqrt(n);

追问

你好,请问那个sqrt前面为什么加(int)?这是规定吗,还是表示开方出来是整数,必须加吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-25
这是把浮点数赋值给整型变量时的警告信息,意思是可能会丢失数据。
不过在本题中是正好正确的。例如,根号99赋值给整型数后,就是9。
第2个回答  2018-09-25
k=sqrt(n); // sqrt函数返回一个double类型的值, k是一个int类型
警告是会丢失精度, 不过在这里不影响