C语言每日一练——第54天:计算程序运行时长

本文介绍了如何使用C语言中的clock_t和time_t系列函数来计算程序运行时长。通过示例代码展示了如何利用clock()和time()函数,以及difftime()函数在不同场景下获取程序的运行时间,包括CPU时钟数和实际时间差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言每日一练
2021年11月6日

题目描述

用C语言计算程序运行时长(库函数)

分析

要获取程序运行时间,只需要在程序运行开始和结尾各获取一次系统时间,将他们相减即可求出运行时间。

使用C语言的时间函数,需要用到time.h头文件,计算程序运行时间,可以考虑使用clock_t系列函数或time_t系列函数(这两个都是数据类型long int)。

  • clock_tclock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
    ------------------------------------clock_t clock(void) ;------------------------------------
    简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
    #define CLOCKS_PER_SEC ((clock_t)1000)——在linux系统下,CLOCKS_PER_SEC的值可能有所不同,使用的linux打印出来的值是1000000,表示的是微秒。这一点需要注意。
  • time_ttime() 是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型。difftime,计算机函数,用来返回两个time_t型变量之间的时间间隔,即计算两个时刻之间的时间差。
    time_t time(time_t *t);——如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。
    double difftime(time_t time2, time_t time1);——返回两个time_t型变量之间的时间间隔,即 计算两个时刻之间的时间差。
    ——百度百科

sleep():windows下,包含在windows.h,原型:void Sleep(DWORD dwMilliseconds);,单位毫秒(注意,是大写S)。
Linux下,包含在unistd.h,原型unsigned int sleep(unsigned int seconds);,单位

代码实现

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


int main()
{
    clock_t ckt_start, ckt_end;  //clock_t变量
    time_t tt_start, tt_end;     //time_t变量
    double duration = 0;         //运行时长
    int i = 0;

    ckt_start = clock();         //获取CPU时钟数
    tt_start = time(NULL);       //获取秒数
    for(i = 0; i < 5; i++)
    {
        printf("%d ", i + 1);
        Sleep(1000);             //粗略延时
    }
    puts("");                    //回车

    /* 使用 clock_t 进行计时 */
    ckt_end = clock();           //获取CPU时钟数
    duration = (ckt_end - ckt_start) / CLOCKS_PER_SEC;
    printf("clock_t:程序运行时长:%f 秒\n", duration);
    duration = ckt_end - ckt_start;
    printf("CLOCKS_PER_SEC = %d\n", CLOCKS_PER_SEC);
    printf("clock_t:程序运行时长:%f 毫秒\n", duration);

    /* 使用 time_t 进行计时 */
    tt_end = time(NULL);         //获取秒数
    duration = difftime(tt_end, tt_start);
    printf("time_t:程序运行时长:%f 秒\n", duration);
    return 0;
}

运行结果

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉_Super

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值