我想找到100以内的所有素数。这是我的代码。
// Find all the prime number within 100.
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
int main() {
int i,n;
int j = 0;
for ( n = 2; n <= 100; ++n) {
bool isPrime = true;
for (i = 2; i <= sqrt(float(n)); ++i) {
if(n % i == 0) {
isPrime = false;
break;
}
}
if(isPrime) {
++j;
printf("%d is a prime number\n",n);
}
}
printf("The total number of prime number within 100 is %d\n",j);
return 0;
}
编译时,有一个错误。
prime.c:14:8: error: expected expression before ‘float’
m = float(n);
^
有人可以帮忙解决这个问题吗?谢谢。
答案 0 :(得分:9)
你在使用时使用了错误的语法(你使用的是C ++的许多样式之一,但对于C只有一种方式)。变化:
sqrt(float(n))
到
sqrt((float)n)
但请注意,sqrt
需要double
,所以严格来说应该是:
sqrt((double)n)
另请注意,演员表不是必需的,您只需写下:
sqrt(n)
答案 1 :(得分:3)
更改此
sqrt(float(n))
到这个
sqrt((float)n)
您希望将n
转换为浮动。
您应该使用此功能:
float sqrtf (float x);
在C99中接收一个浮点作为参数。否则,最好将其转换为double(如果使用sqrt())。
你写的:
float(n)
就像说float是一个函数的名称,你传递参数n。
请注意,在您的情况下,您不需要强制转换,因为它将自动执行(如果使用sqrtf()则浮动;如果使用sqrt(),则浮动)。
其他注释,与语法错误无关。
为什么不从3开始循环并将计数器增加2?如果你考虑一下,这将更快,并将产生相同的结果。如果您想测试自己,请查看我的示例here。
此外,当我寻找素数时,我发现非常令人兴奋的是Eratosthene的筛子(ΚόσκινοτουΕρατοσθένη)。 Here is一个例子。
答案 2 :(得分:2)
如果您想将n
投射到float
,请使用(float)n
。
答案 3 :(得分:1)
只是做:
sqrt(n);
您的考试成绩与您的案例相同。