错误:'浮动'之前的预期表达式

时间:2014-10-02 12:52:05

标签: c

我想找到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);
    ^

有人可以帮忙解决这个问题吗?谢谢。

4 个答案:

答案 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())。

sqrt-ref

你写的:

float(n)

就像说float是一个函数的名称,你传递参数n。

请注意,在您的情况下,您不需要强制转换,因为它将自动执行(如果使用sqrtf()则浮动;如果使用sqrt(),则浮动)。


其他注释,与语法错误无关。

为什么不从3开始循环并将计数器增加2?如果你考虑一下,这将更快,并将产生相同的结果。如果您想测试自己,请查看我的示例here

此外,当我寻找素数时,我发现非常令人兴奋的是Eratosthene的筛子(ΚόσκινοτουΕρατοσθένη)。 Here is一个例子。

答案 2 :(得分:2)

如果您想将n投射到float,请使用(float)n

答案 3 :(得分:1)

只是做:

sqrt(n);

您的考试成绩与您的案例相同。