*時間の計測 [#zf60da83]
time.h の time関数は、1970年1月1日0時0分からの経過時間(秒)をlong型で返します。
時間を計り始めた時刻を t0、時間を計り終えた時刻を t1 とすると、t1 から t0 を引くことで経過時間(秒)を求めることができます(プログラム1)。
#geshi(c){{
#include <time.h>
int main(void) {
long t0 = time(NULL);
int i;
for (i = 0; i < 1000000; i++ ) {}
long t1 = time(NULL);
long t = t1 - t0;
printf("%ds\n", t);
return 0;
}
}}
*時間計測機能付き計算ゲーム [#f9f3a2a2]
以前に作成した計算ゲームに、時間計測の機能をつけてゲームを面白くしましょう。
10問正解するまでの時間を計測します。
#geshi(c){{
/*
* 時間計測機能付き計算ゲーム
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int) time(NULL));
long t = time(NULL);
int s = 0;
long t = time(NULL); // 開始時刻
int s = 0; // 得点
while (s < 10) {
int i = rand() % 99 + 1;
int j = rand() % 99 + 1;
printf("第%d問: %d + %d = \n", s + 1, i, j);
int a;
scanf("%d", &a);
if (a == i + j) {
printf("正解!\n");
s++;
} else {
printf("間違い!\n");
}
}
t = t - time(NULL)
printf("時間: %d秒", t);
printf("時間: %d秒", time(NULL) - t);
return 0;
}
}}
*スピード計算ゲーム [#jcf813fa]
次に、制限時間内に何問正解できるかを競うゲームにしてみましょう。
#geshi(c){{
/*
* スピード計算ゲーム
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int) time(NULL));
long limit = 30;
long limit = 30; // 制限時間(秒)
printf("制限時間: %d秒\n", limit);
long t = time(NULL);
int s = 0;
long t = time(NULL); // 開始時刻
int s = 0; // 得点
while (time(NULL) < t + limit) {
int i = rand() % 99 + 1;
int j = rand() % 99 + 1;
printf("第%d問: %d + %d = \n", s + 1, i, j);
int a;
scanf("%d", &a);
if (time(NULL) > t + limit) { break; } // 時間切れ
if (a == i + j) {
printf("正解!\n");
s++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解", s);
return 0;
}
}}