1 配列とファイル処理の復習

1.1 配列

文字や数字等のデータを処理することがコンピューターの仕事と考えることができる。処 理すべきデータは、全て、コンピューターのメモリー2に記憶しな くてはならない。それにアクセスするためには、プログラマーはその記憶場所に名前を付 けなくてはならない。加えて、C言語の場合3、効率よくデータを扱う4ためにデータの型も指定する必要がある。最初に学習 した単純型のデータ構造の場合、
	
	int a;
	double x;
のように宣言すると、 となる。このデータ構造では、変数名、たとえばawを指定す ることで、その領域のデータを入出力できる。

単純型のデータ構造の場合、一度に確保できるメモリーの領域は1個なので、大量のデー タを扱うのは不向きである。そこで、大量のデータを扱うために、配列というデータ構造 が考えられた。

これは、同じ型のデータを任意の個数宣言し、配列名と自然数 5でアクセスすることができ、便利である。配 列を使うためには、

	
	int b[10000];
	double y[10000];
のように宣言をする。こうすると、 となる。このデータ構造では、配列名と添え字(インデックス)、たとえばb[1234]y[45]を指定することで、その領域から値を入出力できる。

配列型のデータを取り扱う場合、繰り返し文とともに使われることが多い。次の例のよう にである。

	for(i=0; i<=9999;i++){
	  y[i]=3.1415*b[i]
	}

添え字が1つのものを一次元配列と言い、それ以上のものを多次元配列と言う。C言語では 多次元配列を使う場合、

	
	int hoge_1[100], hoge_2[100][100], hoge_3[100][100][100];
	double huga[10], huge[10][10], hugo[10][10][10];
のように宣言を行う。これらも、配列名と複数の添え字で、そこにあるデータにアクセス する事ができる。3次元以上ももちろん可能である。

当面、変数(データ構造)の宣言は、main関数の最初に書くと憶えて欲しい。 main関数の途中では宣言しない。実際は、他の場所でも宣言できるのであるが、そ れはより進んだ場面で学習する。

1.2 ファイル操作

コンピューターで大量のデータを操作する場合、ハードディスク上のファイルの取り扱い が必須である。ハードディスク上のファイルを取り扱うプログラムは簡単で、
  1. FILE型の変数、ファイルポインターの用意
  2. ファイルのオープン
  3. ファイルの読み書き
  4. ファイルのクローズ
を記述すれば良い。


1.2.1 ファイル出力

簡単な例として、次の ようなハードディスクにデータを書き込むプログラムを示す。このプログラムは、以下に ように書く。
	#include <stdio.h>

	int main(void)
	{
	  FILE *fp_write;

	  fp_write = fopen("test_out.txt","w");
     
	  fprintf(fp_write,"%d", 2004);
     
	  fclose(fp_write);
          
	  return 0;
	}

簡単である。ファイルポインターの宣言とオープンとクローズはおまじないと思えば良い。 実際に、ファイルにデータを書き出す部分は、fprintf関数を使う。これは、ディス プレイに出力するprintf関数とほとんど同じである。


1.2.2 ファイル入力

次の例は、ハードディスクからデータを読み込むプログラムである。 このプログラムは、以下にように書く。
	#include <stdio.h>

	int main(void)
	{
	  FILE *fp_read;
	  int a;

	  fp_read = fopen("test_out.txt","r");
     
	  fscanf(fp_read,"%d", &a);
     
	  fclose(fp_read);
          
	  return 0;
	}

難しいことは何も無い。おまじなの部分は、データ出力と同じである。ファイルからデータを読み出 す部分は、fscanf関数を使う。これは、キーボードから読み込むscanf関数と ほとんど同じである。

1.3 エラー処理付きファイルオープン

実用的なプログラムでは、エラー処理は必須である。ファイル操作のプログラムの場合、 ファイルが無い等の理由でオープンできない場合がある。このようなときには、エラー処 理として
	if((fp_read = fopen("test_out.txt","r"))==NULL){
	  printf("ファイルが開けません\n");
	  return 1;
	}
と書く。この例は、ファイル読み込みの場合であるが、書き込みの場合も同じようにエラー 処理を書く。これはファイル処理をする場合のオープンのパターンと憶えておいて欲しい。


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年11月11日


no counter