c语言程序设计,求帮助!

img

img

设定x的步长,先计算出80列的函数值组成数组,然后根据值的大小逐行输出即可

#include <math.h>

#define NANCHAR ' '
#define NAN -99999
char grid[25][80];
double data[80];
double dmax = 0;
double dmin = 0;

//x*x*x-3*x+1
void getminmax(int s,int e)
{
    float step = (e-s)/80.0;
    int k = 0;
    for(double i=s;i<=e;i+=step)
    {
        double y = i*i*i-3*i+1;
        //double y = cos(i);
        if(i==s)
            dmax = dmin = y;
        else if(dmax < y)
            dmax = y;
        else if(dmin > y)
            dmin = y;
        data[k++] = y;
    }
}

void getV(int range)
{
    float yscale = (dmax-dmin)/25; //图形适当进行压缩或拉升
    float xscale = range/80.0;
    int k = 0;
    for(double i=0;i<range;i+=xscale)
    {
        if(data[k] != NAN)
        {
            int y = int((dmax-data[k])/yscale);
            int x = int(i/xscale);
            grid[y][x] = '*';
        }
        k++;
    }
}


void display()
{

    int i,j;
    for(i=0;i<25;i++)
    {
        for(j=0;j<80;j++)
        {
            printf("%c",grid[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

void main()
{
    int i,j;
    for(i=0;i<25;i++)
        for(j=0;j<80;j++)
            grid[i][j] = NANCHAR;
    for(j=0;j<80;j++)
        data[j] = NAN;
    int s,e;
    scanf("%d%d",&s,&e);
    getminmax(s,e);
    getV(e-s);
    display();
    system("pause");
}