我想创建一个程序来计算某些给定数据的回归线以及错误,因此可以在大学作业中使用。这是下面的程序:
#include <stdio.h>
#include <math.h>
int main(void)
{
int i,n,N;
double x[n],y[n],a=0.0,b=0.0,c=0.0,d=0.0,D,P=0.0,p,Sx,A,B,dA,dB;
printf("Give the number of data you want to input for x : ");
scanf("\n%d", &N);
printf("\nGive the values of x : ");
for (i=1; i<=N; i++);
{
printf("\n Enter x[%d] = ", i);
scanf("%lf", &x[i]);
a+=x[i];
b+=pow(x[i],2);
}
printf("\nGive the values of y : ");
for (i=1; i<=N; i++);
{
printf("\n Enter y[%d] = ", i);
scanf("%lf", &y[i]);
c+=y[i];
}
D=N*b-pow(a,2);
A=(b*c-a*d)/D;
B=(N*d-a*c)/D;
for (i=1; i<=N; i++);
{
d+=x[i]*y[i];
p=y[i]-A-B*x[i];
P+=pow(p,2);
}
Sx=sqrt(P/N-2);
dA=Sx*sqrt(b/D);
dB=Sx*sqrt(N/D);
printf("\n x \t \t \t y");
for (i=1; i<=N; i++);
printf("\nx[%d] = %lf\t%lf = y[%d]", x[i],y[i]);
printf("\nA = %lf\t B = %lf", A,B);
printf("\nThe errors of A & B are dA = %lf and dB = %lf", dA,dB);
printf("\nThe equation of the regression line is y=%lfx+(%lf)", B,A);
return 0;
}
我有两个问题。
谢谢您的帮助!
答案 0 :(得分:0)
为此,您需要对malloc
和free
使用动态内存分配。因此,您的代码应如下所示:
int N;
double *x;
printf("Give the number of data you want to input for x :\n");
scanf("%d", &N);
x = malloc(sizeof(double) * N);
然后,在程序结束时,您需要释放内存:
free(x);
如果您不想处理手动内存管理(或由于某种原因而不能),则可以使用静态最大数组大小,如下所示:
#define MAX_N_X 100
int main(void) {
int N;
double x[MAX_N_X];
printf("Give the number of data you want to input for x :\n");
scanf("%d", &N);
if (N > MAX_N_X) {
printf("Can't handle that many inputs! Maximum %d\n", MAX_N_X);
return 0;
}
}
printf
的两个参数。你写道:
printf("\nx[%d] = %lf\t%lf = y[%d]", x[i],y[i]);
但是应该是:
printf("\nx[%d] = %lf\t%lf = y[%d]", i, x[i], y[i], i);
答案 1 :(得分:0)
发布此程序几天后,我发现此程序存在主要问题,而解决方法是删除;来自for命令,以及其他一些小的更改。我以为我可能会添加此评论以让您知道,现在它就像是一种魅力。最简单的错误甚至会愚弄受过训练的眼睛。发现这一点后,我很震惊,没有人意识到这一错误。