はじめに

■1-1 このテキストの前提

このテキストはC言語講座の中級編です。以下の事項を前提に説明をしていきます。

  1. C言語の基礎的な文法(変数、定数、配列、関数、ライブラリ関数、ポインタ、構造体の基礎)を理解していること。
    初級編では扱いきれなかった内容を説明していきます。基礎的な文法がわからない人は、もう一度確認しておいてください。また、プログラミング言語の文法は暗記する必要はありませんし、このテキストですべて説明することも不可能です。分らなくなった時は、すぐに市販の書籍を参照してください。書店にはC言語関連の書籍がたくさんあって目移りしますが、基本的に初心者用、ビギナー用、入門書などと銘打ってあるものであればどれでも構いません。但し、たくさんの本をそろえるよりも、一つの本を隅々まで読むことを薦めます。
  2. 開発環境として、オペレーティングシステムにLinux、コンパイラはgcc (GNU C Compiler)を使用します。そのため、Linuxの基本的な使用方法を知っておく必要があります。また、Windowsにおけるプログラミングについては一切触れません。


■1-2 マニュアルの見方

このテキストでは、C言語のライブラリ関数を使用します。C言語のライブラリ関数に関する基礎的な知識をもっていることを前提に説明していきますが、ライブラリ関数の詳細な仕様までは暗記しておく必要はありません。市販の書籍等を参考にしていただければ問題ないのですが、皆さんが使っているパソコン(Linux)にもオンラインマニュアルが用意されています。ここでは、その使い方を説明しておきます。

ちょっと余談ですが、WindowsやWindows上のアプリケーション(WordやExcelなど)にもオンラインマニュアルが完備されています。これらは、「スタート」−>「ヘルプ」やウィンドウの右上の「ヘルプ」メニューなどから参照できます。アプリケーションの機能について詳細に説明してくれていますので、ぜひ目を通してみてください。Wordなどの使用方法をマスターするためにわざわざ書籍を購入する必要はありません。

Linuxにおいて、オンラインマニュアルを参照するにはmanコマンドを使用します。例えば、標準ライブラリの”strcpy関数(文字列をコピーする関数です)”のマニュアルを参照する場合は以下のように入力します。

man 3 strcpy

ここで、man3strcpyの間には空白が必要です。この例は、「マニュアルの3章にある”strcpy関数”のページを表示せよ」という意味になります(3は省略することも可能です)。このコマンドの実行結果は下図のようになります。

この時、残念ながらマニュアルが英語で表示されてしまった場合は、環境変数LANGを日本語に設定してください。具体的な方法はLinuxのバージョンやシェルによって違いますが、例えば、

setenv LANG ja_JP.eucJP

あるいは、

LANG=ja_JP.eucJP
export LANG

とすればOKでしょう。なお、マニュアルが一画面に収まらない場合は、スペースキーで次のページ、'B'で前のページの表示が出来ます。さらに、manコマンドを終了するには'q'を押してください。



この状態で'q', 'スペース', 'B'を押す。


■1-3 初級レベルの確認

ここでは、C言語の初級レベルの内容の確認を演習問題をとおして行います。ここに書かれている内容がわからない人はC言語講座(初級編)などを参照し、各自で復習してください。

復習1:キーボードからの入力と画面への出力

キーボードから入力された底辺、高さから三角形の面積を求めるプログラムtriangleを作れ。

復習1の解答

※コンパイルと実行
プログラムのソースファイルがfukusyu1.cであり、triangleという名前でプログラムをコンパイルしたいとします。このときは、
gcc -o triangle fukusyu1.c
と入力します。また、コンパイル済みのプログラムを実行する時は、そのプログラムの名前(この場合はtriangle)の前に「./」をつけて入力します。

復習2:文字列の操作

キーボードから入力された文字列(英文字)の大文字、小文字を反転するプログラムhantenを作成せよ。

復習2の解答

復習3:配列の操作

下のようなデータがある。ローマ字を指定すれば、漢字が出てくるようなプログラムmemberを作れ。

hara 原
matsuo 松尾
morisako 森迫
morita 森田
nakata 中田
niihara 新原
sakinaga 崎永
tokonishi 床西

但し、これらのデータは、以下のようにソースファイル中であらかじめローマ字と漢字に分けて配列に格納すること。

char romaji[8][10]={"hara", "matsuo", "morisako",  "morita", "nakata", "niihara", "sakinaga", "tokonishi"};
char kanji[8][5]={"原", "松尾", "森迫", "森田", "中田", "新原", "崎永", "床西"};

復習3の解答

復習4:関数の利用

受け取った二つの引数の四則演算の結果を返す関数(tashizan, hikizan, kakezan, warizan)を持つプログラムenzan1を作成せよ。プログラムのおおまかな内容は以下のようになる。

……
main(){
    ……
    scanf("%d", &a);
    scanf("%d", &b);
    ……
    ... = tashizan(a, b);
    ... = hikizan(a, b)
    ... = kakezan(a, b)
    ... = warizan(a, b)
    printf(…);
}
……

復習4の解答

復習5:引数のアドレス渡し

復習4のプログラムでは四則演算それぞれに対応する関数を作成していた。ここでは、四則演算のすべてを計算する一つの関数を作成することで、復習4と同等の計算を行うプログラムenzan2を作成せよ。プログラムのおおまかな内容は以下のようになる。

……
main(){
    ……
    scanf("%d", &a);
    scanf("%d", &b);
    ……
    sisoku(a, b, &add, &sub, &mul, &div);
    printf(…);
}
……

復習5の解答