ホームページを閲覧しているときに、アクセスカウンターと呼ばれる「そのページが何 回閲覧されたか」を表示する仕組みがある。これは、ホームページにアクセスしたとき にあるプログラムが動くようになっていて、そのプログラムが何回実行されたかを調べ ている。すなわち、実行回数をファイルに保存しておき、プログラムを実行するときに はそのファイルを読み込んで実行回数に1を加えてまた保存するということを行っている わけだ。
このようなときに利用できるアクセスカウンタープログラムの基本として、プログラム の実行回数をカウントし、「○回目の実行です」と表示するプログラムを作成しなさい。ただし、
#include <stdio.h> int main(void){ FILE *fp; int access; /*--------------- ファイルのオープン(読み込みモード) ------------------------*/ if((fp=fopen("/tmp/1e/up.log","r"))==NULL){ printf("can not open the file\n"); return 1; } fscanf(fp, "%d", &access); /*-- ファイルからデータを読み込む --*/ fclose(fp); /* -- ファイルのクローズ --*/ /*--------------- 実行回数の表示 -----------------------------------------*/ printf("%d 回目の実行です\n", access); /*--------------- ファイルのオープン(書き込みモード) ------------------------*/ if((fp=fopen("/tmp/1e/up.log","w"))==NULL){ printf("can not open the file\n"); return 1; } fprintf(fp, "%d",access+1); /*-- ファイルへデータを書き込む --*/ fclose(fp); /*-- ファイルのクローズ --*/ return 0; }
0時 | 1時 | 2時 | 3時 | 23時 | ||
1日 | 8.3 | 7.9 | 7.5 | 7.2 | 9.8 | |
2日 | 9.3 | 9.2 | 9.1 | 9.0 | 6.3 | |
3日 | 6.2 | 5.8 | 5.3 | 4.9 | 12.0 | |
30日 | 4.3 | 3.9 | 3.3 | 2.8 | 3.8 |
#include <stdio.h> int main(void){ FILE *fp; double temp[31][24]; double max_day[31], min_day[31], av_day[31]; double max_nov, min_nov, av_nov; double sum_day, sum_nov; int dates, hours; int i, j; /* --------------- 日数と時間の設定 --------------------------*/ dates = 30; hours = 24; /* --------------- ファイルのオープン ------------------------*/ if((fp=fopen("/tmp/1e/temperature.txt","r"))==NULL){ printf("can not open the file\n"); return 1; } /* --------------- ファイルからデータを読み込む ---------------*/ for(i=1; i<=dates; i++){ for(j=0; j<=hours-1; j++){ fscanf(fp, "%lf", &temp[i][j]); } } /* --------------- ファイルのクローズ -----------------------*/ fclose(fp); /* --------------- 最大と最小、平均の計算 --------------------*/ max_nov = -9999; /* 11月の仮の最高気温 */ min_nov = 9999; /* 11月の仮の最低気温 */ sum_nov = 0.0; /* 11月の気温の合計の初期値 */ for(i=1; i<=dates; i++){ /* iは、日にちを表す */ max_day[i] = -9999; /* i日の仮の最高気温 */ min_day[i] = 9999; /* i日の仮の最低気温 */ sum_day = 0.0; /* i日の気温の合計の初期値 */ for(j=0; j<=hours-1; j++){ /* jは時刻を表す */ sum_day += temp[i][j]; /* 時刻毎の気温の合計 */ if(temp[i][j] > max_day[i]){ /* i日の最大気温の探索 */ max_day[i] = temp[i][j]; } if(temp[i][j] < min_day[i]){ /* i日の最低気温の探索 */ min_day[i] = temp[i][j]; } } av_day[i]=sum_day/hours; /* i日の平均気温の計算 */ sum_nov += av_day[i]; /* 11月1日までの平均気温の和 */ if(max_day[i] > max_nov){ /* 11月の最大気温の探索 */ max_nov = max_day[i]; } if(min_day[i] < min_nov){ /* 11月の最低気温の探索 */ min_nov = min_day[i]; } } av_nov = sum_nov/dates; /* 11月の平均気温の計算 */ /* --------------- 結果の表示 ----------- --------------------*/ printf("\n\nTemperature November/2003 at Akita\n"); printf("------------------------------------\n"); printf(" day max min average \n"); printf("====================================\n"); for(i=1; i<=dates; i++){ printf("%3d %5.1lf %5.1lf %5.1lf\n", i, max_day[i], min_day[i], av_day[i]); } printf("------------------------------------\n\n"); printf("max(Nov.) = %5.1lf\n", max_nov); printf("min(Nov.) = %5.1lf\n", min_nov); printf("average(Nov.) = %5.1lf\n\n", av_nov); return 0; }
Temperature November/2003 at Akita ------------------------------------ day max min average ==================================== 1 20.3 6.0 12.1 2 20.4 9.5 15.2 3 22.8 13.9 17.8 4 14.9 6.4 11.5 5 18.4 4.3 10.6 6 17.9 10.5 13.3 : : : : : : : : 25 10.6 7.6 9.2 26 7.0 0.6 4.3 27 7.3 -0.3 2.8 28 12.2 0.1 6.0 29 15.7 7.9 12.2 30 15.1 11.2 13.4 ------------------------------------ max(Nov.) = 22.8 min(Nov.) = -0.5 average(Nov.) = 9.2