在程序开始时调用一次time()结束时调用一次time(),两次相减就能获得秒数。
例:
#include <timeh>
#include <stdioh>
int main()
{
int iStartTime = time(NULL);
int i = 1;
int iEndTime;
while (i > 0)//这里应该放你要运行的程序
{
i++;
}
iEndTime = time(NULL);
printf("%ds elapsed\n",iEndTime-iStartTime);
return 0;
}
但这个方法精度很低,只能精确到秒。要更高的精确度需要调用 *** 作系统的API。如在Windows下,精确到毫秒级:
#include <windowsh>
#include <stdioh>
int main()
{
unsigned uStartTime = GetTickCount();//该函数只有在Win2000及以上的版本才被支持
int i = 1;
unsigned uEndTime;
while (i > 0)
{
i++;
}
uEndTime = GetTickCount();
printf("%ums elapsed\n",uEndTime-uStartTime);
return 0;
}
#include <stdioh>
#include <timeh>
int main( )
{
long start,end;
start = clock();
//测试的程序段
end = clock();
printf("%ld\n",start-end);//单位:毫秒
return 0;
}
在开始的时候,输出一个系统时间,结束的时候输出一个系统时间
#include<timeh>
void
main(){
struct
tm
sttime,fitime;
_getsystime(&sttime);
m=1;
a[0]=0;
a[1]=1;
while(m>0){
if(check(m)){
if(m==L-1){
out();
change();
}else
extend();
}else
change();
}
_getsystime(&fitime);
printf("starttime:
%d:%d\n",sttimetm_min,sttimetm_sec);
printf("finishtime:%d:%d\n",fitimetm_min,fitimetm_sec);
}
#include <stdioh>
#include <stdlibh>
#include <conioh>
enum DateType
{
YEAR,
MONTH,
DAY,
HOUR,
MINUTE,
SEC,
MAX,
};
#define DUMMY 0
const char g_apcCnName[MAX]={"年","月","日","时","分","秒"};
int isLeapYear(int iYear)
{
return ((iYear%4==0&&iYear%100!=0)||iYear%400==0);
}
int main()
{
int i;
int aiTime[MAX]={0};
int aiTimeMaxValue[MAX]={9999,12,31,23,59,59};
int aiTimeMinValue[MAX]={1970,1,1,0,0,0,};
int aiMonthMaxDay[]={DUMMY,31,28,31,30,31,30,31,31,30,31,30,31};
for(i=YEAR;i<MAX;++i)
{
printf("请输入%s",g_apcCnName[i]);
scanf("%d",aiTime+i);
if(MONTH==i&&isLeapYear(aiTime[YEAR]))
{
aiMonthMaxDay[2]=29;
}
if(DAY==i)
{
aiTimeMaxValue[DAY]=aiMonthMaxDay[aiTime[MONTH]];
}
if(aiTime[i]>aiTimeMaxValue[i]||aiTime[i]<aiTimeMinValue[i])
{
printf("输入数据不合法,请重新输入\n");
i--;
}
}
aiTime[SEC]++;
for(i=SEC;i>YEAR;i--)
{
if(aiTime[i]>aiTimeMaxValue[i])
{
aiTime[i]=aiTimeMinValue[i];
aiTime[i-1]++;
}
}
printf("\n最后的输出结果是:");
for(i=YEAR;i<MAX;i++)
{
printf("%d%s",aiTime[i],g_apcCnName[i]);
}
getch();
return 0;
}
扩展资料:
用while和do…while循环时,循环变量的初始化的 *** 作应在循环体之前,而for循环一般在语句1中进行的;while循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次。
而while循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。
顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,均可广义的把它们看成一个语句。
在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock( void );
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在timeh文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明显,clock_t是一个长整形数。在timeh文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000) //CLOCKS_PER_SEC为系统自定义的
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:
void elapsed_time()
{
printf("Elapsed time:%u secs/n",clock()/CLOCKS_PER_SEC);
}
当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include “stdioh”
#include “stdlibh”
#include “timeh”
int main( )
{
long i = 10000000L;
clock_t start, finish;
double Total_time;
/ 测量一个事件持续的时间/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i--) ;
finish = clock();
Total_time = (double)(finish-start) / CLOCKS_PER_SEC;
printf( "%f seconds/n", Total_time);
return 0;
}
在笔者的机器上,运行结果如下:
Time to do 10000000 empty loops is 003000 seconds
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。
参考资料
c语言测试程序执行时间csdn博客[引用时间2017-12-31]
以上就是关于怎样知道C语言运行一个程序用了多长时间全部的内容,包括:怎样知道C语言运行一个程序用了多长时间、在C语言中,怎么测试运行程序所用的时间、C语言计算递归程序的运行时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)