我有这个程序,在C中,我得到这些错误:
calcularpi.c:37:2:错误:'media'的参数1的不兼容类型
calcularpi.c:22:8:注意:预期'double *'但参数类型为'double'
calcularpi.c:38:2:错误:'eam'参数1的不兼容类型
calcularpi.c:23:8:注意:预期'double '但参数类型为'double'
double genera_valor(double lim_inf, double rango);
int dentro_circunferencia(double x, double y);
double calcula_pi(long int num_puntos);
double media(double valores[100]);
double eam(double valores[100]);
int main(void){
srand48(time(NULL)); // Inicializamos semilla
long int num_puntos = 0;
double valores[100];
int i=0;
printf("Numero de puntos a generar: ");
scanf("%ld",&num_puntos);
while (i<100){
valores[i] = calcula_pi(num_puntos);
i++;
}
printf("El valor es: \n %lf", media(valores[100]));
printf("El error es: \n %lf", eam(valores[100]));
}
double media(double valores[100]){
double suma=0;
int i;
for (i=0;i<100;i++)
{
suma=suma + valores[i];
}
return suma/100;
}
double eam(double valores[100]){
int i=0;
double suma=0;
double errores[100];
while (i<100)
{
errores[i]= fabs(M_PI - (valores[i]));
suma=suma+ errores[i];
i++;
}
return suma/100;
}
double calcula_pi(long int num_puntos){
int i=0;
double min=-1;
double puntoscircunferencia=0;
double rango=2;
double x=0;
double y=0;
while (i<num_puntos){
genera_valor(min, rango);
x=genera_valor(min,rango);
y=genera_valor(min,rango);
if (dentro_circunferencia (x, y)==1){
puntoscircunferencia++;
}
i++;
}
return (puntoscircunferencia*4)/num_puntos;
}
double media(double valores[100]);
double genera_valor(double lim_inf, double rango){
rango = 2;
lim_inf = -1;
double r=drand48();
double valor= lim_inf + rango * r;
return valor;
}
/* Comprueba si el punto esta dentro de la circunferencia.*/
int dentro_circunferencia(double x, double y){
if(y<1-x*x){
return 1;
}
else
return 0;
}
我想知道数组或变量问题在哪里,所以我可以完成应用程序。 我认为其余的都没问题。 感谢。
答案 0 :(得分:0)
变化:
printf("El valor es: \n %lf", media(valores[100]));
printf("El error es: \n %lf", eam(valores[100]));
为:
printf("El valor es: \n %f", media(valores));
printf("El error es: \n %f", eam(valores));
valores
是你的数组,在这里,并在此上下文中衰减到类型double *
- valores[100]
是数组的第101个元素(比元素的数量多一个)实际上有)并衰减键入double
。由于media()
和eam()
都接受double *
类型的单个参数(double media(double valores[100]);
等同于double media(double * valores);
),这就是您遇到类型不匹配错误的原因
同样%f
是double
printf()
的{{1}}更合适的格式说明符。这与scanf()
和朋友不同,其中%lf
是正确的。