以下のプログラムは http://www.math.meiji.ac.jp/~mk/labo/howto/glsc-progs/に置いてあります。
/*
* draw-graph.c -- 1変数関数のグラフを描く
* コンパイル: ccmg draw-graph.c
*/
#include <stdio.h>
#include <math.h>
#define G_DOUBLE
#include <glsc.h>
double pi;
int main()
{
int i, n;
double a, b, c, d;
double h, x;
double f(double);
char title[100];
double win_width, win_height, w_margin, h_margin;
pi = 4 * atan(1.0);
/* 表示する範囲 [a,b]×[c,d] を決定 */
a = - 10 * pi; b = 10 * pi; c = - 2.0; d = 2.0;
/* 区間の分割数 n */
n = 200;
/* GLSC の開始
メタファイル名、ウィンドウ・サイズの決定 */
win_width = 200.0; win_height = 200.0; w_margin = 10.0; h_margin = 10.0;
g_init("GRAPH", win_width + 2 * w_margin, win_height + 2 * h_margin);
/* 出力デバイスの決定 */
g_device(G_BOTH);
/* 座標系の定義: [a,b]×[c,d] という閉領域を表示する */
g_def_scale(0,
a, b, c, d,
w_margin, h_margin, win_width, win_height);
/* 線を二種類用意する */
g_def_line(0, G_BLACK, 2, G_LINE_SOLID);
g_def_line(1, G_RED, 0, G_LINE_SOLID);
/* 表示するための文字列の属性を定義する */
g_def_text(0, G_BLACK, 3);
/* 定義したものを選択する */
g_sel_scale(0); g_sel_line(0); g_sel_text(0);
/* 座標軸を描く */
g_move(a, 0.0); g_plot(b, 0.0);
g_move(0.0, c); g_plot(0.0, d);
/* タイトルを表示する */
sprintf(title, "Bessel function J0(x) (%g<=x<=%g)", a, b);
g_text(20.0, 10.0, title);
/* 刻み幅 */
h = (b - a) / n;
/* グラフを描くための線種の選択 */
g_sel_line(1);
/* 折れ線でグラフを描く */
g_move(a, f(a));
for (i = 1; i <= n; i++) {
x = a + i * h;
g_plot(x, f(x));
}
/* ユーザーのマウス入力を待つ */
printf("終りました。X の場合はウィンドウをクリックして下さい。\n");
g_sleep(-1.0);
/* ウィンドウを閉じる */
g_term();
return 0;
}
double f(double x)
{
/* 0 次 Bessel 関数 */
return j0(x);
}