C言語のきほん「暗算トレーニング(2)」

スポンサーリンク
プログラミング C言語

前回は、clock関数による処理時間の計測法をご紹介した。

この方法では、プログラム開始からの経過時間がclock_t型で表現できる値を超えてしまうと正しく計測できない。

今回は、time関数によって、得られる暦時刻を用いて処理時間を計測する方法をご紹介しよう。

0~99の整数を3つ加算する暗算に要する時間をtime_t型と同じ精度で計測するプログラムである。

なお、本プログラムは、
 Windows 11 Home(23H2)上で、Visual Studio Code(1.93.1)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。

//暗算トレーニング(0~99の整数を3つ加算するのに要する時間を計測)

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a,b,c;
    int x;
    clock_t start,end;  //開始時間、終了時間
  
    srand(time(NULL));  //乱数の種を設定

    a = rand() % 100; //0~99の乱数を生成
    b = rand() % 100; //0~99の乱数を生成
    c = rand() % 100; //0~99の乱数を生成

    printf("%d + %d + %dはいくつですか:",a,b,c);

    start = time(NULL);    //計測開始

    while (1)
    {
       scanf("%d",&x);
       if(x == a + b + c)
            break;
        printf("違います!\n再入力してください。\n");
    }

    end = time(NULL);  //計測終了

    printf("%f.1秒かかりました。\n",difftime(end,start));

    if(difftime(end,start) > 35.0)
        printf("時間がかかりすぎです。\n");
    else if (difftime(end,start) > 20.0)
        printf("まあまあです。\n");
    else
        printf("早いです。\n");
    
    return 0;    
    
}

実行結果

55 + 86 + 7はいくつですか:148    
13.000000.1秒かかりました。
早いです。

difftime関数は、2つの暦時刻の差を求める関数である。

参考)新・明解C言語 中級編 柴田 望洋(著)

コメント

タイトルとURLをコピーしました