指数函数图

时间:2018-12-22 19:16:32

标签: c arrays loops if-statement

我需要生成函数图 $$ y = \ exp(-0.1x)sin(0.5x)$$
对组成绘图的每个点都使用星号(*),以使绘图垂直向下延伸到页面的下方,每行一个点(一个星号)。 每条印刷线均由适当的编号组成。的空白。

如何在C程序中绘制此函数。 我是C语言的初学者,他只知道-2个D数组, 控制语句,数据输入-输出。

我不知道-递归,函数等。 我不知道,我该如何绘制这样的函数,因为我知道如何绘制金字塔,矩形等。

3 个答案:

答案 0 :(得分:2)

好的,所以这是一个完整的解决方案,在终端中使用printf使用自定义绘图仪。

在顶部有很多定义,您可以对其进行调整以更改绘图大小,精度和界限。

还有一个方程函数,您也可以使用。

使用gcc main.c -lm -o a.exe之类的代码编译代码。

您会得到类似的东西。

enter image description here

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

#define PLOT_WIDTH (72U)
#define PLOT_HEIGHT (30U)

#define LIMIT_X_MAX (25.0)
#define LIMIT_Y_MAX (1.0)

#define LIMIT_X_MIN (-2.0)
#define LIMIT_Y_MIN (-1.0)

#define PLOT_POINTS (500U)

void print_plot(const bool plot[PLOT_WIDTH][PLOT_HEIGHT])
{
    int i;
    int j;

    for (i = PLOT_HEIGHT - 1; i >= 0; i--)
    {
        printf("\n");
        for (j = 0; j < PLOT_WIDTH; j++)
        {
            if (plot[j][i])
            {
                printf("*");
            }
            else
            {
                printf("-");
            }
        }
    }

    printf("\n");
}

double equation(const double x)
{
    return exp(-0.1 * x) * sin(0.5 * x);
}

size_t get_plot_x(const double x)
{
    double xx = x - LIMIT_X_MIN;
    return (size_t)((PLOT_WIDTH - 1) * (xx / (LIMIT_X_MAX - LIMIT_X_MIN)));
}

double limit_y(const double y)
{
    double yy = y;
    if (y > LIMIT_Y_MAX) {
        yy = LIMIT_Y_MAX;
    }
    if (y < LIMIT_Y_MIN) {
        yy = LIMIT_Y_MIN;
    }

    return yy;   
}

size_t get_plot_y(const double y)
{
    double yy = limit_y(y) - LIMIT_Y_MIN;

    return (size_t)((PLOT_HEIGHT - 1) * (yy / (LIMIT_Y_MAX - LIMIT_Y_MIN)));
}

double get_next_x(const double x)
{
    return  x + ((LIMIT_X_MAX - LIMIT_X_MIN) / PLOT_POINTS);
}

void populate_plot(bool plot[PLOT_WIDTH][PLOT_HEIGHT])
{
    double x;
    double y;

    for (x = LIMIT_X_MIN; x < LIMIT_X_MAX; get_next_x(x))
    {
        y = equation(x);

        plot[get_plot_x(x)][get_plot_y(y)] = true;
    }
}

int main(void)
{
    bool plot_area[PLOT_WIDTH][PLOT_HEIGHT] = { false };

    populate_plot(plot_area);

    print_plot(plot_area);

    return 0;
}

答案 1 :(得分:1)

  1. 您想绘制函数y=exp(-0.1x)sin(0.5x),对吗?

    然后您的第一个任务就是编写函数。

    使用一些样本值从C根void main(int argc, char *argv[])调用新函数,以确保计算正确。确定功能正常后,再进行“绘图”部分的工作。

  2. 由于要绘制“向下”(一次一行),因此可能要求解“ x”而不是“ y”。相应地调整C函数。

  3. 最后,循环调用您的函数:

    void main(int argc, char *argv[])
    {
       ...
       for (y=0; y < nlines; y++) {
          x = myFunction(y);
          myPlot(x, y);
       }
       ...
    
  4. 尝试一下。如果您在此过程中遇到任何挑战,请回传您遇到的任何具体问题。

答案 2 :(得分:-1)

这就是您所需要的。

您需要一个绘图库。这是koolplot,您可以在http://koolplot.codecutter.org/v1.2/koolplot1_2.zip处下载。另外,这是一个类似绘图库http://ndevilla.free.fr/gnuplot/的终端。

您需要一个方程式。

您需要一些C代码。在这里您可以找到示例代码。 http://koolplot.codecutter.org/byExample.html