好的,所以這個程序正在編譯和運行,除非它正在輸出一個區域爲零的答案。 (注意這個函數是調用它的主要部分)。我已經將最短的功能作爲例子。錯誤答案C中的梯形法則
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define pi 3.1415927;
//Function to convert degrees to radians
float TrapezoidRule(float);
float SimpsonsRule(float);
float GaussQuadrature(float);
int main() {
int userInput, N;
float area, error;
printf("Choose which method to use to calculate the area of the function sin(x) from 0 to pi:\n");
printf("Enter 1 to use the Trapezoid Rule, enter 2 to use Simpson's Rule, enter 3 to use Gauss' Quadrature.\n");
scanf("%d", &userInput);
printf("\nEnter the number of intervals to use to calculate the area.\n");
scanf("%d", &N);
if (userInput == 1) { //Call Trapezoid rule function
printf("You are in this loop\n");
TrapezoidRule(area);
}
if (userInput == 2) {
SimpsonsRule(area);
}
if (userInput == 3) {
GaussQuadrature(area);
}
error = ((fabs(area - 2.0))/2.0)* 100;
//Print the area calculated using the chosen method
printf("\narea using chosen method = %.7f. Actual area = 2.0\n", area);
printf("The percentage error for your chosen method = %.7f\n", error);
return 0;
}
高斯正交函數如下所示:
#include <stdio.h>
#include <math.h>
double pi = 3.1415927;
int main (void) {
float area, a, b, h, k, error;
a = 0.0;
b = pi;
h = (b - a)/2;
k = a + h;
area = h * (sin(k + (h/sqrt(3.0))) + sin(k + (h/sqrt(3.0))));
//error = fabs(((area-2.0)/2.0) * 100);
printf("Area according to Gauss Quadrature = %.8f, True area = 2.0\n Error = %.8f percent\n", area, error);
return 0;
}
使用printf語句,我可以看到該函數的調用是否正確,但該地區的心不是」正在函數計算正確。這可能與主函數的調用方式有關嗎?對不起,我是一個初學者編程,很困惑如何正確調用和使用函數。非常感謝您的幫助!
什麼是第二個程序返回的值? 「TrapezoidRule」函數有問題嗎? *那個*函數是怎麼樣的? –
這還不清楚 - 您的第二個片段是另一個程序還是您的功能?如果它的功能,它爲什麼重新定義主要? – asawyer
另外,你應該閱讀關於通過參數*和參考*傳遞參數*以及它們的差異,因爲這很可能是您的問題。 –