我正在创建一个程序来读取文件并将其数据存储在一个数组中然后创建一个函数来计算它的衍生物,能够读取文件并创建衍生物,但是当我尝试创建一个外部函数时计算函数导数的值我遇到以下错误:“[错误]无效类型'double [int]'对于数组下标”Ja尝试以不同方式解决它,但没有成功。
#include "biblioteca.h"
int main(){
FILE* fp;
fp = fopen("entrada.txt","rt");
if (fp == NULL) {
printf("Erro na abertura do arquivo!\n");
exit(1); }
int i; //grau do polinomio
fscanf(fp,"%d",&i);
printf("i = [%d]\n",i);
double mat[i-1][i+1];
int c=0; //colunas
while(c<i+1){
fscanf(fp,"%lf",&mat[0][c]);
c++;
}
int h=i; //h grau do expoente
for(int l=0;l<i-1;l++){ //l linhas
int k=0; //contador
for(c=h;c>0;c--){
mat[l+1][c-1]=mat[l][c]*(h-k);
k++;
}
h--;
}
int k=0; //linhas
while(k<i){
for(c=0;c<i+1;c++){
printf("%lf \t",mat[k][c]);}
k++;
printf("\n");
}
double x=mat[i-1][0]*-1/mat[i-1][1];
printf("x = %lf\n",x);
double x1;
x1=f(**mat,i,1,x);
system("pause");
return 0;
}
库:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
double f(double mat,int i,int t,double x){
double x1=0;
for(int g=0;g<i+1;g++){
if(x==0){
x1=0;
}
if(x!=0){
x1=mat[t][g]*pow(x,g)+x1;
}
}
return x1;
}
答案 0 :(得分:0)
当您调用 f函数时,会传递double mat
作为参数。它只传递一个double值作为参数而不是整个矩阵。您需要在 f声明中将double mat
更改为double **mat
。
double f(double** mat,int i,int t,double x)
然而,要实现这一点,您需要动态分配矩阵。
double** mat = (double**)malloc(sizeof(double*) * (i-1));
for (int l = 0; l < i-1; i++)
mat[l] = (double*)malloc(sizeof(double) * (i+1));
然后我会让你学习如何释放记忆:)
您静态创建了mat,因此很难将其作为参数传递。但是,如果您确实希望将静态2D数组作为参数传递,也可以查看 here 。