2000年11月13日更新(5章の演習問題への補足)
  関谷トップページへ アプリケーション演習トップページへ 作者へのメッセージ

アプリケーション演習 No.15 C言語プログラミング 5-2 配列のポインタ表示

  2000.09.22 KPC 情報技術科 関谷

1.今日の実習(「5-2 配列のポインタ表示」)への補足

A。2次元以上の配列と文字列へのポインタ配列

 5-2のテキストにあるように、1次元の配列は、配列とポインタが全く同様に使えます。ただし、2次元以上になると、2次元目以上の添え字を仮引数に明示しなければなりません。(例えば、int is[][4])。添え字の計算で、それらが必要になるためです。
 なお、文字列の場合は、少し、違うようです。次節「5-3 名簿のデータ操作」では、文字列へのポインタ配列を使った例があるので、そこで、文字列へのポインタ配列について学習します。

アドレス&・間接参照*演算子と増分++・減分−−演算子の優先順序の復習


優先順序 結合規則 演算子名 形式 
レベル1 → 後置増分 op1++ 後置減分 op1--
レベル2 ← 前置き増分++op1 前置減分 --op1 アドレス &op1 間接参照 *op1 正符号 +op1 負符号 -op1 補数 ~op1 否定 !op1
               

2.今日の実習(5-2 配列のポインタ表示)

5-2 配列のポインタ表示

プログラム 5-1,5-2 文字列の途中を切り出す関数slice

 プログラム5−1は、文字列の配列名を実引数にして、関数の仮引数は文字列へのポインタ変数にしている。プログラム5-2は、5-1のメインでの関数呼出し方法を関数の仮引数の型に合わせて、文字へのポインタを使っている。
 標準入力からの文字の読み込み関数getstr()は、EOFでのwhileループから抜けた後の'\0'の代入番地が違っている。(後の例2で使って間違いが分かった。)訂正のこと。
*--s = '\0';
   関数のプロトタイプ宣言は、どちらも同じで、次のようになる。
void getstr(char *s);
void slice(char *s, char *t, int n, int m);

 プログラムの入力では、C言語のプログラムの様式に合わせて作成のこと。なお、考察を先頭部分に書くのが良い。

プログラム 5-3, 5-4 3つの整数の値を順次に交換する関数swp

 プログラム5-3は、整数のポインタにアドレスを代入して、それを実引数にしている。5-4は、実引数にアドレス演算子を使っている。
 関数のプロトタイプ宣言は、どちらも同じで、次のようになる。
void swp(int *pi, int *pj, int *pk);

例題2 文字列の長さlを求める関数をポインタを用いて書く

 演算子の優先順序の関係から、18行目では、(*pl)++;となる。
 標準入力からの文字の読み込み関数getstr()(プログラム5−1)は、EOFでのwhileループから抜けた後の'\0'の代入番地が違っている。訂正のこと。
*--s = '\0';
 関数のプロトタイプ宣言は、次のようになる。
void getstr(char *s);
void lgstr(char *ps, int *pl);  関数getstr()の定義は、前のプログラムからコピーのこと。

5章の演習問題 8)−10)

 これまで、文字列の処理をいろいろと行ってきたが、それらをポインタで扱う問題です。文字列(char型の配列)は、ポインタ変数で、便利に扱えます。

5−8)文字の配列sを入力し、そのポインタをpsとする。*ps,*++psを印字しなさい。

 この問題では、*ps,*++psの2つの文字の出力を同じ、printf文で行うと、違いが見えない。2つのprinntf文に分ける必要がある。

3.レポート

3.1 レポート用ファイルの作成

 レポートは、実習した全部のプログラムを順番に貼り付けて、レポート用のテキストファイルを作成のこと。

3.2 提出フォルダとファイル名

・フォルダ:w:\アプリケーション演習¥C言語ptr_array9.22
・ファイル名:nn氏名ap15.txt

この科目の成績と授業の評価について(再録)

 前半は、Word/Excelの学習でしたが、後半はC言語の学習をしています。従って、試験と評価は両方を対象にします。  後半のC言語プログラミングは、論理の問題だから、向き不向きがあります。しかし、入学試験を合格してきた皆さんなら、ある程度やれば、できるのです。それでも、新しい言語だから、まじめに学習しないで、新しい言語の習得ができる訳がありません。これが嫌な人は、早く、方向転換をした方が良いでしょう。

 小生の授業の進め方についての評価も最後にお願いするつもりです。お互いに真剣にやりましょう。