2016-12-07 2 views
0

Я делаю университетский проект, где мне нужно создать калькулятор цифровой интеграции. Мне нужно, чтобы пользователь вводил функцию подынтегрального выражения для замены функции double f(double x) ниже, чтобы моя программа могла работать для любого одномерного интеграла с ограничениями без бесконечности.Как попросить пользователя ввести математическую функцию на языке c?

Вот код:

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

Так вы нужен оценщик выражений? –

+0

http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work –

+1

Вы должны будете указать свой ввод более подробно. ваша функция scanf не будет работать. –

ответ

2

Стандартная библиотека C не содержит ничего, что позволило бы вам разобрать произвольные математические выражения непосредственно. Реализация такого анализатора парсеров/оценщиков далеко выходит за рамки ответа на переполнение стека, но если вам разрешено использовать внешнюю библиотеку (т. Е. Эта проблема не соответствует вашему проекту), существуют варианты с открытым исходным кодом, таких как TinyExpr. Вы должны просто прочитать ввод пользователя в строку (например, с fgets) и передать ее в библиотеку.

(Если вы не можете использовать библиотеку, читать на анализаторах и изучать диаграммы и исходный код на связанную странице GitHub, затем задать более конкретный вопрос, если вы столкнетесь с проблемами.)

+0

Благодарим за помощь! –

+0

@WangHenry, вы можете использовать алгоритм шунтирования для анализа математических выражений. – ForceBru

+0

Привет, сайт TinyExpr не показывает, как его установить, можете ли вы показать мне, как он установлен? –

Смежные вопросы