c - c语言如何让用户输入一个数学函数?

标签 c

我正在做一个大学项目,我必须创建一个数值积分计算器。我需要用户输入被积函数来替换下面的 double f(double x) 函数,以便我的程序可以处理任何具有非无穷大限制的一维积分。

代码如下:

#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;
}

最佳答案

C 标准库不包含任何可让您直接解析任意数学表达式的内容。这种表达式解析器/求值器的实现远远超出了 Stack Overflow 答案的范围,但是如果您被允许使用外部库(即,这个问题不是您的项目的目的),则有开源选项,例如TinyExpr .您应该能够将用户的输入读入字符串(例如使用 fgets)并将其传递给库。

(如果不允许您使用库,请阅读解析器并研究链接的 github 页面上的图表和源代码,然后在遇到问题时提出更具体的问题。)

关于c - c语言如何让用户输入一个数学函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021354/

相关文章:

c - 访问已分配内存时的分段代码

c - 如何防止 gcc 优化器产生不正确的位操作?

c - Hexagon 编译器遇到 `typedef struct mystruct *mystruct` 问题

c - 在 C 中是否以这种方式释放结构?

c - 是 int foo() { return foo();递归函数?

c - c中两个进程之间的同步

c - 如何将多个字符值存储在单个整数变量中?

c++ - 'void *' to ' void (*) (bool)' 使用 C++ 编译器在 C 中编译文件的指针错误

objective-c - 返回后使用 NSOperationQueue 延迟释放 malloc'd void*

c++ - 将 C++ 转换为 C