c - 我在使用以下具有不同变量类型和指针的代码来查找贝塞尔函数时遇到问题

标签 c arrays pointers

这个作业是我的实验室之一,它希望我们根据输入的用户值找到一阶贝塞尔函数的值。这么久以来,我的心态是:首先我会要求用户输入,然后我使用数字的四舍五入,上面的数字和下面的数字。之后,我根据数字进行插值,找到错误,然后将所有内容呈现在屏幕上。 (我们必须使用指针和数组,否则我们不会得到任何标记。这是有道理的,我们如何列出从 0 到 10 的每个四舍五入数字的每种情况......)

问题是,我似乎没有得到正确的指针,并且程序总是说我们有 long int 和 *double 混合,即使我明确告诉程序这是一个 double。

代码:

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

int y;

 int readdata(double rho[y], double Jrho[y])
{

double a, b, c, x;

FILE* fp;
fp= fopen("Bessel1.dat", "r");

for (y=0; y<=10; y++)
    {
        fscanf(fp, "%lf %lf", &rho[y], &Jrho[y]);
    }

}

double Lagrange2nd(int y, double rho[y], double Jrho[y], double x)
{

double a, b, c;

double output;

a=(x-rho[(y+1)])*((x-rho[y])*Jrho[((y-1))]+(rho[((y-1))]- 

x)*Jrho[y])/(rho[((y-1))]-rho[y]);

b=(((rho[(y-1)]-x)*((x-rho[(y+1)])*Jrho[y]+(rho[y]- 

x)*Jrho[(y+1)]))/(rho[y]-rho[(y+1)]));

output = c = (a+b)/(rho[(y-1)]-rho[(y+1)]);

return output;
}

double errx(int y, double rho[y], double Jrho[y], double x)
{
double a, b, c;

double output;

output= (abs(c-(Jrho[(y-1)]*(x-rho[y])+Jrho[y]*(rho[(y-1)]-x)))+abs(c- 
(Jrho[y]*(x-rho[(y+1)])+Jrho[(y+1)]*(rho[y]-x))))/2;

return output;

}

int main()
{
double x, Jrho[y], rho[y];

printf("x=");
scanf("%lf", &x);
y=round(x);

Lagrange2nd(&rho[y], &x, &Jrho[y], y);

errx(&Jrho[y], &x, &rho[y], y);

printf("%d, %d", Lagrange2nd, errx);

return(0);
}

我知道这很困惑,但直到两个月前我才知道任何编程,但我们现在必须这样做……哎呀,我不太擅长这个,不是吗?

最佳答案

你使用什么编译器?使用 gcc 你会收到很多警告。特别是,很少有函数声明返回 void,但返回 int。

看起来编译器确实将“void”视为“int” - 这将导致很多精度问题。如果您已关闭警告 - 考虑重新启用它们,或使用更好的编译器:-)

void errx(double* rho[y], double* Jrho[y], double* x)
{
...
double output;

output= (abs(c-(Jrho[(y-1)]*(x-rho[y])+Jrho[y]*(rho[(y-1)]-x)))+abs(c-(Jrho[y]*(x- 
rho[(y+1)])+Jrho[(y+1)]*(rho[y]-x))))/2;

return output;
}

风格注释:考虑将声明和赋值合并在一个语句中。它将减少许多可能的错误,并会让你取得更好的成绩!

double output = (abs(c-(Jrho[(y-1)]*(x-rho[y])+Jrho[y]*(rho[(y-1)]-x)))+abs(c-(Jrho[y]*(x-rho[(y+1)])+Jrho[(y+1)]*(rho[y]-x))))/2;

关于c - 我在使用以下具有不同变量类型和指针的代码来查找贝塞尔函数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859432/

相关文章:

c - 使用 "byte"数据类型与 protobuf-c 的示例

c - 如何使用 C/Objective C 获取 telnet 结果?

javascript - 使用 jQuery Cookie 在数组中存储和返回值

c++ - 返回对模板类中私有(private)成员的引用

c# - 为什么我不能在fixed语句中使用extern函数?

c - 在没有库的情况下在 C 中使用 DLL

c++ - xxx.h : fatal error C1083: Cannot open include file: 'yyyy.h' : No such file or directory

java - Java 中 byte[] 和 List<Byte> 有什么区别?

php - 如何从数据库中提取数组的字符串值?

计算 c 中哈希集中的簇