此代码用于显示介于500和1000之间的引物号。
当我在gcc 6.2.1上构建此代码时,它会返回错误,但是当我在Visual Studio 2015上构建它时,它就会成功。
#include <stdio.h>
#include <math.h>
int primer_number(int a)
{
int i, m = 0;
for (i = 2; i<int(sqrt(double(a))); i++)
{
if (a%i == 0) return m = 1;
}
return m;
}
int main(void)
{
int i;
for (i = 500; i <= 1000; i++)
{
if (primer_number(i) == 0) printf("%d\n", i);
}
}
屏幕截图gcc 6.2.1
x=3.14159265359;
float y=1.41421;
int z=int(x);
z=int(y);
您的错误消息:
cfile.c:605:10: error: expected expression before ‘int’
int z=int(x);
^~~
cfile.c:606:6: error: expected expression before ‘int’
z=int(y);
^~~
答案 0 :(得分:2)
int(sqrt(double(a)))
是C ++中的有效表达式,但不是C中的有效表达式。也许Visual Studio 2015有一些非标准扩展,允许在C中使用这样的表达式,或者您正在编译文件,就像它是C ++文件一样。
double x=3.14159265359;
float y=1.41421;
int z=(int)x; //correct syntax to cast double to int
z=(int)y; // there should be no syntax error
将其更改为(int)sqrt(a)
。
for (i = 2; i< (int)sqrt(a)); i++)
{
if (a%i == 0) return m = 1;
}
<击> 进一步清理的建议
通过将调用移至sqrt(a)
,您可以获得更好的性能。此外,您根本不需要变量m
。
int primer_number(int a)
{
int i;
int end = (int)sqrt(a);
for (i = 2; i < end; i++)
{
if (a%i == 0) return 1;
}
return 0;
}
击> <击> 撞击>
PS 函数中使用的逻辑错误。您可以使用略微修改的逻辑:
int primer_number(int a)
{
int i;
for (i = 2; i*i <= a; i++)
{
if (a%i == 0) return 1;
}
return 0;
}