好吧,我正在嘗試編寫一個程序,它使用Simpson的3/8規則對積分進行數值計算。我遇到了將Integral * newintegral的值傳遞給simpson()函數的問題。我對結構和指針的理解並不十分自信,我一直在回顧課堂筆記和整天在線檢查信息,但我仍然不明白爲什麼它不起作用。將結構(指向結構?的指針?)傳遞給函數
當我嘗試構建程序時,出現了一些錯誤,特別是:第46行「Integral之前的期望表達式」和大部分55-63「無效類型的參數」 - > '(有'積分')我不明白爲什麼第一個發生,因爲我的講師這種類型的事例的例子,當一個結構傳遞給一個函數只有語法func(Struct_define_name individual_struct_name)。我認爲這是我在做什麼與心靈(積分是結構類型的名稱,我是特定的結構),但顯然不是。
我認爲這兩個問題是相連的,所以我包含了所有我的代碼上下文,但行如上所述,實際上有錯誤的是46和55-63 bly首先定義了錯誤的結構或者其他東西。
(順便在辛普森的數學()函數實際上並沒有正常工作,現在是這樣,但是這不是我關心的)
而且我試着尋找其他類似的問題,但我沒有了解其他代碼正在做什麼,所以我無法推斷如何修復我的代碼。我知道這是不是給其他人非常相關的,但我真的不明白編程以及足夠的嘗試和短語我的問題在一般意義上...
'#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct integral {
double result, limits[2];
int degree;
double coefficients[];
} Integral;
// Prototype of function that calculates integral using Simpson's 3/8 rule
double simpson(Integral i);
// function (?) which initialises structure
Integral *newintegral() {
Integral *i = malloc(sizeof *i);
double lim1_in, lim2_in;
int degree_input, n;
printf("Please enter the degree of the polynomial.\n");
scanf("%d", °ree_input);
i->degree = degree_input;
printf("Please enter the %d coefficients of the polynomial, starting\n"
"from the highest power term in the polynomial.\n", (i->degree+1));
for (n=i->degree+1; n>0; n=n-1) {
scanf("%lg", &i->coefficients[n-1]);
}
printf("Please enter the upper limit of the integral.\n");
scanf("%lg", &lim1_in);
i->limits[0] = lim1_in;
printf("Please enter the lower limit of the integral.\n");
scanf("%lg", &lim2_in);
i->limits[1] = lim2_in;
return i;
}
int main() {
Integral *i = newintegral();
simpson(Integral i);
return 0;
}
double simpson(Integral i) {
int n;
double term1, term2, term3, term4;
for (n=(i->degree); n>0; n=n-1) {
term1=(pow(i->limits[1],n)*(i->coefficients[n]))+term1;
term2=(pow(((((2*(i->limits[1]))+(i->limits[0])))/3),n)*(i->coefficients[n]))+term2;
term3=(pow(((((2*(i->limits[0]))+(i->limits[1])))/3),n)*(i->coefficients[n]))+term3;
term4=(pow(i->limits[0],n)*(i->coefficients[n]))+term4;
}
i->result = (((i->limits[0])-(i->limits[1]))/8)*(term1+(3*term2)+(3*term3)+term4);
printf("The integral is %lg\n", i->result);
return 0;
}'