2001 年度「計算機基礎論3B」 2002-01-29

演習(の一例)

printf()int 型を出力するには %d, double 型を出力するには %f だった。 ポインタ型変数の値を出力するには %p とする。 何型へのポインタでもこれでよい。 出力の形式は機種依存である。 実習で使っている WS では十六進で表示される。

===============================================================================
#include <stdio.h>

int x;

main()
{
    int i, a[10];

    printf("%p\n", &x);
    printf("%p\n", &i);
    for (x=0; x<10; x++) {
        printf("%p ", &a[x]);
    }
    putchar('\n');
} 
===============================================================================

変数のアドレスは最終的には実行時に決まるので、 上のプログラムの出力は毎回一定ではない。 友だちと比較してみるのもおもしろいかもしれない。

教科書に載っていた、間違った swap() と正しい swap() に合う main() をそれぞれ書き、試してみよ。

swap() に少々手を加えて、 前者が後者より大きい場合のみ二つの値を入れ替える関数を書いてみよ。

係数 a, b, c を与えると二次方程式 ax^2+bx+c=0 の二つの根を“返す” 関数を書いてみよ。 C言語の関数では二つの値を返すことはできないから、 ここで“返す”と言ったのは文字通りの意味でではなく、 比喩的な意味でである。 どのような引数をもつ関数にするか、よく考えること。

教科書 76 ページの関数 reverse() の、ポインタ版を書いてみよ。


岩瀬順一