设定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");
}