以下のプログラムは http://nalab.mind.meiji.ac.jp/~mk/labo/howto/glsc-progs/に置いてあります (curl -O http://nalab.mind.meiji.ac.jp/ mk/labo/howto/glsc-progs/draw-graph.c で入手可能)。
1 /*
2 * draw-graph.c -- 1変数関数のグラフを描く
3 * コンパイル: ccmg draw-graph.c
4 */
5
6
7 #include <stdio.h>
8 #include <math.h>
9
10 #define G_DOUBLE
11 #include <glsc.h>
12
13 double pi;
14
15 int main()
16 {
17 int i, n;
18 double a, b, c, d;
19 double h, x;
20 double f(double);
21 char title[100];
22 double win_width, win_height, w_margin, h_margin;
23
24 pi = 4 * atan(1.0);
25
26 /* 表示する範囲 [a,b]×[c,d] を決定 */
27 a = - 10 * pi; b = 10 * pi; c = - 2.0; d = 2.0;
28
29 /* 区間の分割数 n */
30 n = 200;
31
32 /* GLSC の開始
33 メタファイル名、ウィンドウ・サイズの決定 */
34 win_width = 200.0; win_height = 200.0; w_margin = 10.0; h_margin = 10.0;
35 g_init("GRAPH", win_width + 2 * w_margin, win_height + 2 * h_margin);
36
37 /* 出力デバイスの決定 */
38 g_device(G_BOTH);
39
40 /* 座標系の定義: [a,b]×[c,d] という閉領域を表示する */
41 g_def_scale(0,
42 a, b, c, d,
43 w_margin, h_margin, win_width, win_height);
44
45 /* 線を二種類用意する */
46 g_def_line(0, G_BLACK, 2, G_LINE_SOLID);
47 g_def_line(1, G_RED, 0, G_LINE_SOLID);
48
49 /* 表示するための文字列の属性を定義する */
50 g_def_text(0, G_BLACK, 3);
51
52 /* 定義したものを選択する */
53 g_sel_scale(0); g_sel_line(0); g_sel_text(0);
54
55 /* 座標軸を描く */
56 g_move(a, 0.0); g_plot(b, 0.0);
57 g_move(0.0, c); g_plot(0.0, d);
58
59 /* タイトルを表示する */
60 sprintf(title, "Bessel function J0(x) (%g<=x<=%g)", a, b);
61 g_text(20.0, 10.0, title);
62
63 /* 刻み幅 */
64 h = (b - a) / n;
65 /* グラフを描くための線種の選択 */
66 g_sel_line(1);
67 /* 折れ線でグラフを描く */
68 g_move(a, f(a));
69 for (i = 1; i <= n; i++) {
70 x = a + i * h;
71 g_plot(x, f(x));
72 }
73
74 /* ユーザーのマウス入力を待つ */
75 printf("終りました。X の場合はウィンドウをクリックして下さい。\n");
76 g_sleep(-1.0);
77 /* ウィンドウを閉じる */
78 g_term();
79 return 0;
80 }
81
82 double f(double x)
83 {
84 /* 0 次 Bessel 関数 */
85 return j0(x);
86 }