それぞれについて,リスト1のプログラムを例にして説明する.この
プログラムは,つぎに示すデータをファイルから読み込んで,全ての整数の合計値と各列
の平均値を計算するプログラムである.データは,10000行4列,合計4万個の整数である.
-76797 99987 53528 -43172 -34698 44783 -106207 -106631 -83424 31615 18774 -4134 78694 -886 64632 103022 -86516 -99744 -51044 -11396 90058 54995 -39364 -36610 -78969 106494 -5209 -95276 75913 32002 39260 106490 24615 -14585 -44056 97291 -77175 -42889 98034 -53226 96100 9434 50013 67420 この辺は長いので省略 100747 -2875 37515 4509 77468 12111 76950 82072 -102787 41331 75324 -96228 -53535 -6367 65795 -62947
1 #include <stdio.h> 2 3 int cal(int hoge[][4]); // プロトタイプ宣言 4 5 double ave0, ave1, ave2, ave3; // 各列の平均値はグローバル変数とする 6 7 //=========================================================================== 8 // main 関数 9 //=========================================================================== 10 int main(void) 11 { 12 FILE *in_file; 13 int i,data[10000][4], sum_data; 14 15 in_file = fopen("/home/yamamoto/tmp/program/int_data.txt", "r"); 16 17 for(i=0; i<10000; i++){ 18 fscanf(in_file,"%d%d%d%d", 19 &data[i][0],&data[i][1],&data[i][2],&data[i][3]); 20 } 21 22 fclose(in_file); 23 24 sum_data = cal(data); 25 26 printf("sum all = %d\n", sum_data); 27 printf("average = %f\t%f\t%f\t%f\n", ave0,ave1,ave2,ave3); 28 29 return 0; 30 } 31 32 //=========================================================================== 33 // データ処理のためのユーザー定義関数 34 //=========================================================================== 35 int cal(int hoge[][4]){ 36 int i; 37 int sum0=0, sum1=0, sum2=0, sum3=0; 38 39 for(i=0; i<10000; i++){ 40 sum0+=hoge[i][0]; 41 sum1+=hoge[i][1]; 42 sum2+=hoge[i][2]; 43 sum3+=hoge[i][3]; 44 } 45 46 ave0=sum0/10000.0; 47 ave1=sum1/10000.0; 48 ave2=sum2/10000.0; 49 ave3=sum3/10000.0; 50 51 return sum0+sum1+sum2+sum3; 52 }
sum all = -15594426 average = -612.222100 377.635000 -430.162000 -894.693500
ファイルからデータを取得するには,(1)ファイル情報を格納する変数の用意する,(2)ファ イルをオープンする,(3)ファイルからデータを読み込む,(4)ファイルをクローズすると いう一連の動作が必要である.リスト1では次のようにしている.
FILE *in_file; in_file = fopen("/home/yamamoto/tmp/program/int_data.txt", "r"); for(i=0; i<10000; i++){ fscanf(in_file,"%d%d%d%d", &data[i][0],&data[i][1],&data[i][2],&data[i][3]); } fclose(in_file);
ユーザー定義関数に単純型の変数を渡す場合と配列を渡す場合では,次の点で大きく異な る.注意が必要である.
sum_data = cal(data); 長いので省略 int cal(int hoge[][4]){ ここに関数での処理の内容を書く. return sum0+sum1+sum2+sum3; }