我正在做一个大学项目,我必须创建一个数值积分计算器。我需要用户输入被积函数来替换下面的double f(double x)
函数,这样我的程序就能用于任何具有非无穷限制的1-D积分。
以下是代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x)
{
return x;
}
double traprule(double a, double b, double N)
{
double h, sum, fn, fa, fb, I;
sum = 0;
h = (b - a) / N;
for (int n = 1; n < N; n++)
{
fn = f(a + n * h);
sum = sum + fn;
}
fa = f(a);
fb = f(b);
I = 0.5 * h * ((fa + fb) + 2 * sum);
return I;
}
int main()
{
scanf("%s", &f)
double result;
result = traprule(0, 10, 10);
printf("%lg", result);
return 0;
}
答案 0 :(得分:2)
C标准库不包含任何可以直接解析任意数学表达式的内容。这样的表达式解析器/求值程序的实现远远超出了Stack Overflow答案的范围,但是如果允许使用外部库(即,这个问题不是你的项目的问题),那么有开源选项,例如TinyExpr。您应该能够将用户的输入读入字符串(例如使用fgets
)并将其传递给库。
(如果您不允许使用库,请阅读解析器并研究链接github页面上的图表和源代码,如果遇到问题,请提出更具体的问题。)