所以我正在尝试制作一个计算曲线下面积的主函数。我有三个单独的函数,每个函数以不同的方式计算区域:函数1使用梯形规则计算,函数2使用辛普森计算计算,函数3使用高斯求积法计算。我让每个程序都运行良好,现在我正在尝试将它们从main更改为函数,从一个名为“numericIntegration”的单独主程中调用。
到目前为止,我的主要内容是:
#include <math.h>
#include <stdlib.h>
#define pi 3.1415927;
void TrapezoidRule(float area);
void SimpsonsRule(float area);
void GaussQuadrature(float area);
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
TrapezoidRule(area);
}
if (userInput == 2) {
SimpsonsRule(area);
}
if (userInput == 3) {
GaussQuadrature(area);
}
//Print the area calculated using the chosen method
return 0;
}
如果需要,我将包括三个单独的功能,但为了使这篇文章更短,我现在将它们排除在外。他们每个人都被称为:
void TrapezoidRule(float area) {
void GaussQuadrature(float area) {
void SimpsonsRule(float area) {
我尝试编译时遇到的一个错误
(使用icc -o num numericalIntegration.c GaussQuadrature.c TrapezoidRule.c SimpsonsRule.c
)
是梯形规则和simpson规则都使用它们中的一个小函数将度数转换为弧度,我猜想在numericIntegration中没有正确调用。
所以这是我的具体问题:
更新:我得到的错误说: 第一个错误:“'degtorad'的多重定义” 第二个错误:首先在此定义
我想我明白我需要将函数degtorad作为头文件,但我不知道该怎么做?
答案 0 :(得分:2)
首先,要正确调用函数,需要声明它们,以获得原型。通常它们来自包含文件,但您也可以在使用它们之前声明它们。为此,请在main()
之前添加这些行:
void TrapezoidRule(float area);
void GaussQuadrature(float area);
void SimpsonsRule(float area);
通常这些都在包含文件中,但C include与包含文件的复制粘贴内容基本相同,因此最终结果相同。一旦你有更多的功能,或者你需要在很多地方使用它们,你真的想要包含文件。
如果您有一些实用程序功能,它只在您的一个文件中定义,但在很多文件中使用,那么请将它放在一个地方,并且只需在您使用它的地方进行声明,与上面类似。或者,如果在具有相同名称的许多文件中都有实用程序功能,请将其设为static
,这样链接器就不会抱怨相同符号的多个定义(但如果它们是相同的功能,那么这是个坏主意,因为现在你有许多相同功能的副本,你可能需要稍后更改它们。)
答案 1 :(得分:0)
您可能忘记与数学库libm.a
建立链接。通过将-lm
添加到执行最终链接步骤的编译器调用来执行此操作。
答案 2 :(得分:0)
你必须编译包含“小函数...将度数转换为弧度”的c源。
如果type fun() { ... }
在fun.c
中,则必须将其包含在编译命令字符串中:
icc -o num fun.c numericalIntegration.c GaussQuadrature.c TrapezoidRule.c SimpsonsRule.c
答案 3 :(得分:0)
如果要在新文件中定义这些函数,则需要编写一个头文件(.h
)来告诉编译器函数的样子,并在文件的顶部有
#include "GaussQuadrature.h"
#include "TrapezoidRule.h"
#include "SimpsonsRule.h"
然后在头文件中,您(可能)只需要输入:
void TrapezoidRule(float area);