C语言中的clock函数
这里是一个小白学习数据结构和C语言的学习笔记。
C语言中的函数clock( ),它可以捕捉从程序开始运行到clock( )被调用时所耗费的时间。它计时所用的单位是clock tick,翻译成中文就是“时钟打点”。
与之配套的还有一个常数CLK_TCK,实际上就是“clock tick”的缩写。它给出的是机器时钟每秒所走的时钟打点数。这个数在不同机器中可能不一样,可以通过写程序得到一台机器的CLK_TCK。
代码如下:
#include <stdio.h>
#include<math.h>
#include<time.h>int main( )
{printf("%d\n", CLK_TCK);return 0;
}
将clock( )函数和常数CLK_TCK两个配合在一起,就可以计算出来一个函数到底跑了多少秒钟。
以下是一个常用的模板:
#include<studio.h>
#include<time.h>
/*要用clock( )函数必须要包含time.h*/
clock_t start,stop;/*clock_t是clock( )函数返回的变量类型*/
double duration;/*记录被测函数运行时间,以秒为单位*/
int main( )
{ /*不在测试范围内的准备工作写在clock( )调用之前*/start=clock();/*开始计时*/MyFunction();/*把被测函数加在这里*/stop=clock();/*停止计时*/duration=((double)(stop-start))/CLK_TCK;/*计算运行时间*//*其他不在测试范围的处理写在后面,例如输出duration的值*/return 0;
}
下面是一个具体的例子。
例:写程序计算给定多项式f(x)=∑i=09i⋅xif(x)=\sum_{i=0}^9 i·x^if(x)=∑i=09i⋅xi在给定点x=1.1x=1.1x=1.1处的值f(1.1)f(1.1)f(1.1)
#include<stdio.h>
#include<math.h>
#include<time.h>
clock_t start, stop;
double duration;
#define MAXN 10
double f(int n, double a[], double x);int main()
{int i;double a[MAXN];for (i = 0; i < MAXN; i++) a[i] = (double)i;start = clock();f(MAXN - 1, a, 1.1);stop = clock();duration = ((double)(stop - start)) / CLK_TCK;printf("ticks=%f\n", (double)(stop - start));printf("duration=%6.2e\n", duration);return 0;}
double f(int n, double a[], double x)
{int i;double p = a[0];for (i = 1; i <= n; i++)p += (a[i] * pow(x,i));return p;
}
这样计算出来得到的结果是
计算结果都是0,是因为这个函数跑的实在是太快了,它的运行时间不到一个tick,所以clock函数铺捉不到它。解决方法就是让被测函数重复运行充分多次,使得测出的总的时钟打点间隔充分长,最后计算被测函数平均每次运行的时间即可。
调整后的代码如下:
#include<stdio.h>
#include<math.h>
#include<time.h>
clock_t start, stop;
double duration;
#define MAXN 10
#define MAXK 1e7/*被测函数最大重复调用次数*/
double f(int n, double a[], double x);int main()
{int i;double a[MAXN];for (i = 0; i < MAXN; i++) a[i] = (double)i;start = clock();for(i=0;i<=MAXK;i++)/*重复调用函数已获得充分多的时钟打点数*/f(MAXN - 1, a, 1.1);stop = clock();duration = ((double)(stop - start)) / CLK_TCK/MAXK;/*计算函数单次运行的时间*/printf("ticks=%f\n", (double)(stop - start));printf("duration=%6.2e\n", duration);return 0;}
double f(int n, double a[], double x)
{int i;double p = a[0];for (i = 1; i <= n; i++)p += (a[i] * pow(x,i));return p;
}
这样运行出来的结果是
当然,这个数据在不同的电脑上运行出来的结果不同,因为不同机器的CLK_TCK不一定相同。
参考资料:
[1]中国大学MOOK数据结构课程
C语言中的clock函数相关推荐
- c语言中的printf函数_C语言中的printf()函数与示例
c语言中的printf函数 C语言中的printf()函数 (printf() function in C) The printf() function is defined in the <s ...
- c语言的point函数,C语言中friend友元函数详细解析
C语言中friend友元函数详细解析 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien ...
- C语言中的strstr函数
C语言中的strstr函数 说到strstr函数,可能很多人会比较陌生,对比其他的字符串函数比如strcpy,strcmp等等,它的确比较少用,但其实他也是一个非常有用和常见的函数,今天,就让我们一起 ...
- C语言中的atoi函数的实现
C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个 ...
- main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...
PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...
- C语言中的sprint函数,求sprintf函数的详解
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:求sprintf函数的详解,要附带例,粘贴来的也可以,只 问题详情:还有就是我还想要一些常用的宽度修饰之类的输入或者输出格式:回答: ...
- c语言里面gets(a)是什么意思,C语言中的gets()函数
在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串, 比如:I love MIT 这种情况,scanf() ...
- C语言中的Sleep函数的解读
Sleep函数: 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include <windows.h& ...
- sleep函数的作用c语言,C语言中的sleep函数是什么意思【详细介绍】
计算机知识:C语言中的Slee函数 Sleep函数简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned milliseconds); 在V ...
最新文章
- 5G时代下,边缘计算产品的未来展望
- centos普通用户修改文件权限_centos修改文件及文件夹权限
- 【最短路】hxk化学课
- navicat远程连接mysql10060
- 从电源问题出发,带你揭秘新体系结构范式 COA
- PyTorch系列 (二): pytorch数据读取自制数据集并
- 轻松在阿里云上搭建Redis
- python魔术方法str_python 魔术方法(三)对象的打印 -- __repr__ 与 __str__
- 如何在三层交换机上实现跨VLAN 的DHCP配置
- 724. 寻找数组的中心索引
- B站晚会大火的 140 万个理由!
- php简短一句话木马免杀,免杀/一句话木马(PHP)
- 从零到无学单片机——画原理图、PCB
- 一款好看的 VSCode 代码主题和图标主题
- python中polyfit 之poly1d与polyval的含义
- 流场(向量场)临界点的检测与分类
- 央行等8部委发文规范供应链金融,严禁无牌开展相关业务
- 《程序员的创世传说》设定资料
- 李彦宏“泼水门”:舆论的狂欢,还是魏则西的葬歌?
- 银河麒麟禁止抓屏printScreen
热门文章
- python 自相关序列(ACF)
- Java利用stream将一个List中部分字段复制到另一个List中
- Microsoft Visual Source Safe 2005(VSS)安装使用图文教程
- 无代码开发是什么,如何选择无代码平台?
- ssl 客户端证书验证_SSL客户端身份验证:这是信任的问题
- Webpack2/3配置ExtractTextPlugin和Autoprefixer
- Wisdom Chain文档知识库之多重签名
- 字段名对但是提示标识符无效_【Java基础教程】Java标识符和关键字
- Linux 操作系统有关知识整理
- 终于找到了梦想中的前端框架 --- vue.js