问题
使用printf函数画的一些数学函数图形。
代码:
/////////////////////////////////////////////////////
// 程序名称:printf()函数作图demo
// 作 者:Gavin Liu (songzitea@sina.com)
// 完成时间:2005-6-29
/////////////////////////////////////////////////////
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
/*****************宏定义****************/
#define STEP_X 0.2
#define STEP_Y 0.025
#define F(x) (sin(x))
/****************函数声明***************/
void HideCursor();
void GotoXy(int x, int y);
void Frame();
void FunPic();
/*****************主函数****************/
int main(void){
system("title printf()函数作图demo");
HideCursor();
Frame();
FunPic();
system("pause");
return 0;
}
/*****************函数体****************/
//画坐标架,取水平向为Y轴,竖直向为X轴
void Frame(){
int i;
//画X轴
for(i = 0; i < 40; i++) {
GotoXy(40, i);
printf("│");
}
//画Y轴
GotoXy(0, 19);
printf("────────────────────┼───────────────────");
//标X,Y
GotoXy(42, 0);
putchar('X');
GotoXy(77, 20);
putchar('Y');
}
//画函数图像 因为这仅仅是一个示意性的程序,也不存在修改坐标架的情况,所以这里边的数字直接在函数中给出,而不是通过宏定义
void FunPic(){
int i;
int r, c; //行列数
for(i = -19; i <= 20; i++){
//计算行列数
r = i + 19;
c = (int)((F(i * STEP_X) / STEP_Y) + 40);
//列数超出绘图区,结束本次循环,避免因自动换行而产生变形
if(c > 79 || c < 0) continue;
else { //画函数图像
GotoXy(c, r);
putchar('*');
}
printf("\n\n");
}
}
//隐藏光标
void HideCursor(){
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; //后边的0代表光标不可见
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//光标移动
void GotoXy(int x, int y){
HANDLE hout; //定义句柄变量hout
COORD coord; //定义结构体coord
coord.X = x;
coord.Y = y;
hout = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出(屏幕)句柄
SetConsoleCursorPosition(hout, coord); //移动光标
}
输出结果:
转载请注明出处:http://blog.youkuaiyun.com/utimes/article/details/8456365