gpt4 book ai didi

c - 应为 ‘float *’,但参数的类型为 ‘float’,与 ‘find_m’ 的参数 2 的类型不兼容

转载 作者:行者123 更新时间:2023-11-30 21:02:13 27 4
gpt4 key购买 nike

我正在尝试用 C 语言编写最小二乘法。

cc least_square.c -lm -o least_square

用 gcc 编译后出现此错误。

least_square.c: In function ‘main’:
least_square.c:37:32: error: incompatible type for argument 1 of ‘find_m’
printf("m = %.3f\n", find_m(x[i], x[i], k)) ;
^
least_square.c:8:11: note: expected ‘float *’ but argument is of type ‘float’
float find_m(float [], float [], int data_number) ;
^
least_square.c:37:32: error: incompatible type for argument 2 of ‘find_m’
printf("m = %.3f\n", find_m(x[i], x[i], k)) ;
^
least_square.c:8:11: note: expected ‘float *’ but argument is of type ‘float’
float find_m(float [], float [], int data_number) ;
^
least_square.c:38:32: error: incompatible type for argument 1 of ‘find_n’
printf("n = %.3f\n", find_n(x[i], y[i], k)) ;
^
least_square.c:10:11: note: expected ‘float *’ but argument is of type ‘float’
float find_n(float [], float [], int data_number) ;
^
least_square.c:38:32: error: incompatible type for argument 2 of ‘find_n’
printf("n = %.3f\n", find_n(x[i], y[i], k)) ;
^
least_square.c:10:11: note: expected ‘float *’ but argument is of type ‘float’
float find_n(float [], float [], int data_number) ;

我的代码: /* y = mx + n --- 使用最小二乘法 */

#include<stdio.h>
#include<math.h>


float find_m(float [], float [], int data_number) ;

float find_n(float [], float [], int data_number) ;


int main(){


int k, i ;

printf("Number of data(k)\n? ") ;
scanf("%d", &k) ;

float x[k] ;
float y[k] ;

for (i = 0 ; i <= (k - 1) ; i++){
x[i] = 0 ;
y[i] = 0 ;
}

for (i = 0 ; i <= (k - 1) ; i++){

printf("%d. point x coordinate(xi)\n? ", i+1) ; /* get data */
scanf("%f", &x[i]) ;

printf("%d. point y coordinate(yi)\n? ", i+1) ;
scanf("%f", &y[i]) ;

printf("m = %.3f\n", find_m(x[i], x[i], k)) ;
printf("n = %.3f\n", find_n(x[i], y[i], k)) ;
}


return 0 ;


}


float find_m(float x[], float y[], int data_number){ /* Find constant m */


int i,
a = 0,
b = 0,
c = 0,
d = 0,
e = 0 ;

for (i = 0 ; i <= (data_number - 1) ; i++){

a += x[i] * y[i] ;

b += x[i] ;

c += y[i] ;

d += pow(x[i], 2) ;

e += x[i] ;
}


return ((data_number * a) - (b * c)) / ((data_number * d) - pow(e, 2)) ;


}


float find_n(float x[], float y[], int data_number){ /*Find constant n*/


int i,
a = 0,
b = 0,
c = 0,
d = 0,
e = 0,
f = 0;
float n ;

for (i = 0 ; i <= (data_number - 1) ; i++){

a += pow(x[i], 2) ;

b += y[i] ;

c += x[i] * y[i] ;

d += x[i] ;

e += pow(x[i], 2) ;

f += x[i] ;
}


return (((a * b) - (c * d)) / ((data_number * e) - pow(f, 2))) ;


}

我无法弄清楚我的错误是什么。我认为一切都是对的。

错误提示“expected float *”,但我已经将参数类型设置为 float。

最佳答案

find_mfind_n 都有指向 float 的指针作为前两个参数。他们的签名相当于:

float find_m(float*, float*, int data_number) ;

float find_n(float*, float*, int data_number) ;

您正在将 float 作为参数传递。您需要传递指针。如果不完全理解代码的用途,就很难提供真正有效的解决方案。一种可能性是您希望在每次迭代中扫描部分数组,在这种情况下,您可以使用数组名称作为参数。这些将衰减为指向数组第一个元素的指针。

printf("m = %.3f\n", find_m(x, x, k)) ; 
printf("n = %.3f\n", find_n(x, y, k)) ;

关于c - 应为 ‘float *’,但参数的类型为 ‘float’,与 ‘find_m’ 的参数 2 的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31498834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com