gpt4 book ai didi

c - 家庭作业,卡在指针和函数调用上

转载 作者:行者123 更新时间:2023-11-30 16:37:47 25 4
gpt4 key购买 nike

目前它将构建并运行。但我的问题是,当我尝试调用指针函数时,它不会打印出主函数中的第一个打印语句。我的最终目标是让它像 f() 从 1-36 的值表一样打印。在这几行代码中使用 & 和 * 是家庭作业的一部分。

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


double pointer (double *bi);
double f(double x);
double trapz(int n, double a, double b);
double simpsons(int m, double c, double d);

int main()
{
int g, h, xii=0;

double e[35];
for ( xii=1; xii>36; xii++){
printf("%d,%f", xii, pointer(&e));
}


double x0 = 1, xn = 36, x1 = 1, xm =36;
int n1 = 35, n2 = 100, n3 = 10000, n4 = 35, n5 = 1000, n6 = 10000;




printf("For n = %d, the integral is %f\n", n1, trapz(n1, x0, xn));
printf("For n = %d, the integral is %f\n", n2, trapz(n2, x0, xn));
printf("For n = %d, the integral is %f\n", n3, trapz(n3, x0, xn));


printf("for n = %d, the integral is %f\n", n4, simpsons(n4, x1, xm));
printf("for n = %d, the integral is %f\n", n5, simpsons(n5, x1, xm));
printf("for n = %d, the integral is %f\n", n6, simpsons(n6, x1, xm));

printf("Enter the amount of intervals 'n' for the Trapezoidal rule and I'll give you an answer!\n");
scanf("%d", &g);
printf("\nYour answer is: %f\n", trapz(g, x0, xn));

printf("Enter the amount of intervals 'n' for the Simpson's rule and I'll give you an answer!\n");
scanf("%d", &h);
printf("\nYour answer is: %f\n", simpsons(h, x1, xm));

return 0;
}

double pointer (double *bi){

int xi=0;
for ( xi=1; xi>36; xi++){
*bi=f(xi);
}
return 0;
}

double f(double x)/*function that calculates f(x)*/
{

double y;

y = 1000 * sin( 5*x )/(x*x+7.68);

return y;
}

double trapz(int n, double a, double b)
{
int i;
double dx, x, sum;
dx = (b-a)/n;
sum=f(a)+f(b);
for (i=1; i<n; i++){
x=a+dx*i;
sum+=2*f(x);
}
sum*=dx/2;
return sum;
}
double simpsons( int m, double c, double d)
{
int j;
double dz, z, sum2;
dz = (d-c)/m;
sum2 = f(c)+f(d);
for (j=1; j<m; j++){
z=c+dz*j;
sum2 += 2*(j+j%2)*f(z);
}
sum2 *= dz/3;
return sum2;
}

更新:我编辑了它现在正在打印的指针函数,但不是正确的数字

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


double pointer(double *bi, int ci);
double f(double x);
double trapz(int n, double a, double b);
double simpsons(int m, double c, double d);

int main()
{
int g, h, xii=0;

double e[35];
for ( xii=1; xii<36; xii++){
printf("\t%d \t\t %f\n", xii, pointer(&e, xii));/*calls function and prints xii,f(xi). 1-36 for xi, and 1-36 for f(xi)*/
}


double x0 = 1, xn = 36, x1 = 1, xm =36;
int n1 = 35, n2 = 100, n3 = 10000, n4 = 35, n5 = 1000, n6 = 10000;




printf("For n = %d, the integral is %f\n", n1, trapz(n1, x0, xn));
printf("For n = %d, the integral is %f\n", n2, trapz(n2, x0, xn));
printf("For n = %d, the integral is %f\n", n3, trapz(n3, x0, xn));


printf("for n = %d, the integral is %f\n", n4, simpsons(n4, x1, xm));
printf("for n = %d, the integral is %f\n", n5, simpsons(n5, x1, xm));
printf("for n = %d, the integral is %f\n", n6, simpsons(n6, x1, xm));

printf("Enter the amount of intervals 'n' for the Trapezoidal rule and I'll give you an answer!\n");
scanf("%d", &g);
printf("\nYour answer is: %f\n", trapz(g, x0, xn));

printf("Enter the amount of intervals 'n' for the Simpson's rule and I'll give you an answer!\n");
scanf("%d", &h);
printf("\nYour answer is: %f\n", simpsons(h, x1, xm));

return 0;
}

double pointer(double *bi, int ci){
double ans;
*bi = (1000 * sin( 5*ci ))/(ci*ci+7.68);
ans = *bi;
return ans;

/*function is supposed to return f(xi)*/
}

double f(double x)/*function that calculates f(x)*/
{

double y;

y = 1000 * sin( 5*x )/(x*x+7.68);

return y;
}

double trapz(int n, double a, double b)
{
int i;
double dx, x, sum;
dx = (b-a)/n;
sum=f(a)+f(b);
for (i=1; i<n; i++){
x=a+dx*i;
sum+=2*f(x);
}
sum*=dx/2;
return sum;
}
double simpsons( int m, double c, double d)
{
int j;
double dz, z, sum2;
dz = (d-c)/m;
sum2 = f(c)+f(d);
for (j=1; j<m; j++){
z=c+dz*j;
sum2 += 2*(j+j%2)*f(z);
}
sum2 *= dz/3;
return sum2;
}

最佳答案

注意编译器警告:

16:34: warning: passing argument 1 of 'pointer' from incompatible pointer type [-Wincompatible-pointer-types]
printf("%d,%f", xii, pointer(&e));
^
5:8: note: expected 'double *' but argument is of type 'double (*)[35]'
double pointer (double *bi);

e 是指向指针函数内预期的 double 组的指针:

double e[35];

printf("%d,%f", xii, pointer(e));

此外,您的意图是迭代 e 的所有元素:

for ( xii=0; xii<35; xii++){
printf("%d,%f", xii, pointer(e));
}

经过这样的计算:

double pointer (double *bi){

int xi=0;
for ( xi=0; xi<35; xi++){
bi[xi] = f(xi);
}
return 0;
}

关于c - 家庭作业,卡在指针和函数调用上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47734145/

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