ホームページを閲覧しているときに、アクセスカウンターと呼ばれる「そのページが何 回閲覧されたか」を表示する仕組みがある。これは、ホームページにアクセスしたとき にあるプログラムが動くようになっていて、そのプログラムが何回実行されたかを調べ ている。すなわち、実行回数をファイルに保存しておき、プログラムを実行するときに はそのファイルを読み込んで実行回数に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